QUIC-LB: Generating Routable QUIC Connection IDs摘要
https://quicwg.org/load-balancers/draft-ietf-quic-load-balancers.html
这是一个互联网草案,描述了一种用于生成可路由 QUIC 连接 ID 的协议,以便负载均衡器可以正确地路由具有迁移地址的数据包。
QUIC 地址迁移允许客户端在保持连接状态的同时更改其 IP 地址。为了减少观察者链接两个 IP 地址的能力,客户端和服务器在通过不同的客户端地址进行通信时使用新的连接 ID。这给通过 IP 地址和端口 4 元组路由数据包的传统“第 4 层”负载平衡器带来了问题。
该规范提供了一种在服务器连接 ID 中安全编码路由信息的标准化方法,以便正确配置的负载平衡器可以正确路由具有迁移地址的数据包。由于它提出了一种结构化的连接 ID 格式,它还提供了一种连接 ID 自编码其长度的方法,以帮助一些硬件卸载。
该规范定义了几种算法,用于在给定一些共享参数的连接 ID 中对服务器映射进行编码。映射通常只能被具有参数的观察者发现,尽可能地保持不可链接性。
该规范还描述了一些可选的功能,例如配置轮换、无状态重试、加密卸载等,这些功能需要负载平衡器、服务器和其他可信中介之间的合作。
该文档是一个互联网草案,描述了一种用于生成可路由 QUIC 连接 ID 的协议,以便负载均衡器可以正确地路由具有迁移地址的数据包。
QUIC 地址迁移允许客户端在保持连接状态的同时更改其 IP 地址。为了减少观察者链接两个 IP 地址的能力,客户端和服务器在通过不同的客户端地址进行通信时使用新的连接 ID。这给通过 IP 地址和端口 4 元组路由数据包的传统“第 4 层”负载平衡器带来了问题。
该文档提供了一种在服务器连接 ID 中安全编码路由信息的标准化方法,以便正确配置的负载平衡器可以正确路由具有迁移地址的数据包。由于它提出了一种结构化的连接 ID 格式,它还提供了一种连接 ID 自编码其长度的方法,以帮助一些硬件卸载。
该文档定义了几种算法,用于在给定一些共享参数的连接 ID 中对服务器映射进行编码。映射通常只能被具有参数的观察者发现,尽可能地保持不可链接性。
该文档还描述了一些可选的功能,例如配置轮换、无状态重试、加密卸载等,这些功能需要负载平衡器、服务器和其他可信中介之间的合作。
配置轮换是一种机制,用于在负载平衡器和服务器之间分发不同的配置参数,以便在不同的阶段使用不同的算法或参数。配置轮换使用连接 ID 的前两位进行编码。
无状态重试是一种机制,用于将 QUIC 的无状态重试功能卸载给负载平衡器,以应对拒绝服务攻击。无状态重试使用特殊的连接 ID 格式和令牌来实现。
加密卸载是一种机制,用于将 QUIC 的加密功能卸载给硬件辅助或其他中介。加密卸载使用自我描述长度字段来确定连接 ID 的长度,并使用特殊的连接 ID 格式来实现。
简单哈希算法是一种算法,用于在连接 ID 中对服务器池中的服务器进行编码。简单哈希算法使用一个哈希函数和一个配置密钥来生成一个哈希值,并将其截断为所需的长度。
平面哈希算法是一种算法,用于在连接 ID 中对服务器池中的服务器进行编码。平面哈希算法使用一个哈希函数和一个配置密钥来生成一个哈希值,并将其与一个随机数进行异或操作,以生成一个伪随机数。
块哈希算法是一种算法,用于在连接 ID 中对服务器池中的服务器进行编码。块哈希算法使用一个哈希函数和一个配置密钥来生成一个哈希值,并将其分成多个块,并根据每个块的值选择一个随机数表中的一个随机数。
块密码算法是一种算法,用于在连接 ID 中对服务器池中的服务器进行编码。
该文档是一个互联网草案,描述了一种用于生成可路由 QUIC 连接 ID 的协议,以便负载均衡器可以正确地路由具有迁移地址的数据包。该文档的目标是提供一种标准化的方法,使得负载均衡器可以在不影响 QUIC 的安全性和隐私性的前提下,实现对 QUIC 流量的有效分发。
QUIC 地址迁移允许客户端在保持连接状态的同时更改其 IP 地址。为了减少观察者链接两个 IP 地址的能力,客户端和服务器在通过不同的客户端地址进行通信时使用新的连接 ID。这给通过 IP 地址和端口 4 元组路由数据包的传统“第 4 层”负载平衡器带来了问题,因为它们无法识别新的连接 ID,并且可能将数据包发送到错误的服务器。
该文档提供了一种在服务器连接 ID 中安全编码路由信息的标准化方法,以便正确配置的负载平衡器可以正确路由具有迁移地址的数据包。该方法基于以下假设:负载均衡器可以访问连接 ID 的一部分或全部;负载均衡器可以与服务器之间共享一些配置参数;负载均衡器可以使用一些算法来从连接 ID 中解析出服务器映射。
该文档提出了一种结构化的连接 ID 格式,它由三个部分组成:配置 ID、服务器 ID 和随机位。配置 ID 是一个固定长度的字段,用于标识负载均衡器和服务器之间协商的配置参数;服务器 ID 是一个可变长度的字段,用于编码服务器池中的服务器;随机位是一个可变长度的字段,用于增加连接 ID 的熵,并防止链接性分析。
该文档还提供了一种连接 ID 自编码其长度的方法,以帮助一些硬件卸载。该方法使用自我描述长度字段(Self-Delimiting Length Field, SDF)来表示连接 ID 的长度。SDF 是一个可变长度的字段,其第一个字节的高两位表示 SDF 的长度(1、2、3 或 4 字节),其余位表示连接 ID 的长度(1 到 255 字节)。
该文档定义了几种算法,用于在给定一些共享参数的连接 ID 中对服务器池中的服务器进行编码。这些算法分为两类:哈希算法和密码算法。哈希算法使用一个哈希函数和一个配置密钥来生成一个哈希值,并根据不同的方法将其映射到服务器 ID 上;密码算法使用一个密码函数和一个配置密钥来加密或解密服务器 ID。
哈希算法有四种:简单哈希算法、平面哈希算法、块哈希算法和键控哈希算法。
块哈希算法使用一个哈希函数和一个配置密钥来生成一个哈希值,并将其分成多个块,并根据每个块的值选择一个随机数表中的一个随机数。随机数表由负载均衡器和服务器之间共享,每个表有一个唯一的 ID。
键控哈希算法使用一个哈希函数和一个配置密钥来生成一个哈希值,并将其与一个随机数进行异或操作,以生成一个伪随机数。随机数由负载均衡器和服务器之间共享,每个随机数有一个唯一的 ID。
密码算法有两种:块密码算法和流密码算法。块密码算法使用一个块密码函数和一个配置密钥来加密或解密服务器 ID;流密码算法使用一个流密码函数和一个配置密钥来加密或解密服务器 ID。
块密码算法使用 AES-ECB 模式作为块密码函数,它将服务器 ID 分成 16 字节的块,并对每个块进行加密或解密。如果服务器 ID 的长度不是 16 的倍数,它会在末尾填充随机位。
流密码算法使用 AES-CTR 模式作为流密码函数,它将服务器 ID 作为整体进行加密或解密。它使用连接 ID 的前 8 字节作为计数器的初始值,并在每次加密或解密时递增计数器。
配置轮换是一种机制,用于在负载均衡器和服务器之间分发不同的配置参数,以便在不同的阶段使用不同的算法或参数。配置轮换使用连接 ID 的前两位进行编码,表示当前使用的配置参数的索引。
配置轮换有两种模式:快速模式和慢速模式。快速模式是一种简单的方式,它在负载均衡器和服务器之间广播新的配置参数,并立即生效;慢速模式是一种更安全的方式,它在负载均衡器和服务器之间交换新的配置参数,并在一定时间后生效。
配置轮换需要负载均衡器和服务器之间有一种可靠的通信方式,以传输新的配置参数。该文档定义了一种基于 QUIC 的通信方式,称为 QUIC-LB 控制协议。该协议使用特殊的连接 ID 格式和数据帧格式来实现。
QUIC-LB 控制协议使用连接 ID 的第三位作为标志位,表示该连接是否用于控制协议。如果该位为 1,则表示该连接用于控制协议;如果该位为 0,则表示该连接用于普通 QUIC 流量。
QUIC-LB 控制协议定义了两种数据帧:QUIC_LB_CONFIG 和 QUIC_LB_RETRY_TOKENS。QUIC_LB_CONFIG 帧用于传输新的配置参数;QUIC_LB_RETRY_TOKENS 帧用于传输无状态重试所需的令牌。
无状态重试是一种机制,用于将 QUIC 的无状态重试功能卸载给负载平衡器,以应对拒绝服务攻击。