跳到主要内容

10. 性能考量

突发流量通常会导致时间上相关的分组丢失; 进而可能使隧道内运行的协议中的拥塞控制器作出次优响应. 为避免这种情况, IP 代理端点 SHOULD 尽量避免增加 IP 流量的突发性; 它们 SHOULD NOT 为了将批处理量提高到利用硬件卸载所需的最低程度以上而排队分组.

当隧道内运行的协议使用拥塞控制时, 例如 [TCP] 或 [QUIC], 被代理流量将承受至少两层嵌套的拥塞控制器. 当使用 QUIC DATAGRAM 帧发送隧道化分组时, 对于仅包含封装 IP 分组的 QUIC DATAGRAM 帧的那些分组, 外层 HTTP 连接 MAY 禁用拥塞控制. 实现者可参考 UDP-USAGE 第 3.1.11 节中的指导.

当隧道内运行的协议使用丢失恢复时, 例如 [TCP] 或 [QUIC], 且外层 HTTP 连接运行在 TCP 之上时, 被代理流量将承受至少两层嵌套的丢失恢复机制. 这可能降低性能, 因为二者有时会各自独立地重传相同数据. 为避免这种情况, IP 代理 SHOULD 通过 HTTP/3 执行, 以便利用 QUIC DATAGRAM 帧.

10.1. MTU 考量

在结合 QUIC Datagram 扩展 [DGRAM] 使用 HTTP/3 时, IP 分组在 QUIC DATAGRAM 帧中传输. 由于这些帧无法被分片, 它们只能承载长度不超过某一给定值的分组, 该值由 QUIC 连接配置和路径 MTU (PMTU) 决定. 如果端点正在使用 QUIC DATAGRAM 帧, 并尝试通过隧道路由一个无法装入 QUIC DATAGRAM 帧的 IP 分组, IP 代理 SHOULD NOT 在 DATAGRAM capsule 中发送该 IP 分组, 因为这会破坏 Datagram Packetization Layer PMTU Discovery (DPLPMTUD) 等方法所依赖的端到端不可靠性特征 [DPLPMTUD]. 在这种场景下, 端点 SHOULD 丢弃该 IP 分组, 并向被丢弃分组的发送者发送 ICMP Packet Too Big 消息; 见 ICMPv6 第 3.2 节.

10.2. ECN 考量

如果某个 IP 代理端点在包含 IP 代理请求流的连接上禁用了拥塞控制, 它就无法在该外层连接上指示支持 Explicit Congestion Notification (ECN) [ECN]. 也就是说, 对于处于拥塞控制之外的 QUIC 分组, QUIC 发送方 MUST 使用 Not ECN-Capable Transport (Not-ECT) 码点标记所有 IP 头部. 端点仍可通过 QUIC ACK_ECN 帧或 TCP ECN-Echo (ECE) 位报告 ECN 反馈, 因为对等方可能没有禁用拥塞控制.

相反, 如果外层连接上没有禁用拥塞控制, [ECN-TUNNEL] 中关于在内层和外层 IP 头部之间转移 ECN 标记的指导并不适用, 因为如果外层连接使用 ECN, 它会正确响应拥塞通知. 内层流量也可以使用 ECN, 且不依赖于外层连接是否使用 ECN.

10.3. Differentiated Services 考量

隧道化 IP 分组可以在 traffic class IP 头字段中设置 Differentiated Services Code Points (DSCPs) [DSCP], 以请求特定的逐跳行为. 如果某个 IP 代理端点被配置为 Differentiated Services 域的一部分, 它 MAY 基于这些标记实现流量差异化. 然而, 使用 HTTP 可能会限制在 IP 代理端点之间路径上对隧道化 IP 分组进行差异化处理的可能性.

当 HTTP 连接受拥塞控制约束时, 使用不同 DSCP 标记分组可能导致这些分组之间发生重排序, 进而可能使底层传输连接的拥塞控制器表现不佳. 如果隧道化分组受到外层连接的拥塞控制约束, 为防止这种情况, 它们需要避免携带转发行为并不等价的 DSCP 标记. 在这种场景下, IP 代理端点 MUST NOT 将 DSCP 字段从内层 IP 头部复制到承载该分组的外层 IP 头部. 相反, 应用需要为每个 DSCP 分别使用到代理的独立连接. 注意, 本文档未定义让请求限定于特定 DSCP 值的方法; 这种支持留给未来扩展.

如果隧道化分组使用 QUIC datagrams, 且不受外层连接的拥塞控制约束, IP 代理端点 MAY 将隧道化流量中的 DSCP 字段值转换到外层 IP 头部. IP 代理端点 MUST NOT 将多个内层分组合并到同一个外层分组中, 除非它们具有相同的 DSCP 标记或等价的 traffic class. 注意, 转换 DSCP 值的能力取决于隧道入口和出口是否属于同一个 Differentiated Service 域.