对频繁确认 (ACK) 的依赖是当前传输协议设计的产物,而不是基本要求。本文分析了WLAN中数据包和ACK在无线介质上的争用和冲突引起的问题,提出了一种ACK机制,可以最小化QUIC中ACK帧的强度,提高传输层连接的性能。
本备忘录的状态
本互联网草案的提交完全符合 BCP 78 和 BCP 79 的规定
Internet-Drafts 是 Internet 工程任务组 (IETF) 的工作文件。请注意,其他小组也可以将工作文档作为 Internet-Drafts 分发。当前 Internet-Drafts 列表位于https://datatracker.ietf.org/drafts/current/。
Internet-Drafts 是有效期最长为六个月的草稿文件,可以随时被其他文件更新、替换或作废。将 Internet-Drafts 用作参考材料或引用它们而不是“正在进行的工作”是不合适的。
该互联网草案将于 2022 年 5 月 26 日到期
版权声明
版权所有 (c) 2021 IETF Trust 和文件作者。版权所有。
本文件受 BCP 78 和 IETF 信托关于 IETF 文件的法律规定 ( https://trustee.ietf.org/license-info ) 的约束,该条款在本文件发布之日生效。请仔细阅读这些文件,因为它们描述了您对本文件的权利和限制。从本文档中提取的代码组件必须包含 Trust Legal Provisions 第 4.e 节所述的修订版 BSD 许可文本,并且按照修订版 BSD 许可中的描述不提供任何保证。
1.需求语言
本文档中的关键词“必须”、“不得”、“要求”、“应”、“不应”、“应该”、“不应”、“推荐”、“可以”和“可选”是按照RFC 2119 [ RFC2119 ]中的描述进行解释。
2.问题陈述
随着 4K 无线投影、基于 VR/AR 的互动游戏等的出现,无线局域网 (WLAN) 上的高吞吐量传输成为一项苛刻的要求。然而,无线介质的共享特性会导致数据传输和反向信令(如确认)之间的竞争。ACK 与数据包共享相同的介质路由,尽管 ACK 的大小要小得多,但仍会导致类似的介质访问开销。争用和冲突,以及 ACK 浪费的无线资源,导致数据路径上的吞吐量显着下降。该草案遵循[ AOD ]中描述的路线图
三、ACK机制标准概述
RFC 9000 [ RFC9000 ]指定了一个简单的延迟 ACK 机制,接收器可以为每个其他数据包发送一个 ACK,并且在观察到重新排序时或当 max_ack_delay 计时器到期时为每个数据包发送一个 ACK。但是,这种 ACK 机制可能无法将 ACK 的数量与不同网络条件下传输所需的强度相匹配。例如,当 WLAN 传输的数据吞吐量非常高时,QUIC 会产生大量的 ACK。在这种情况下,最小化 QUIC 的 ACK 强度不仅是数据吞吐量提高的胜利,也是能源和 CPU 效率的胜利。
RFC 1122 [ RFC1122 ]和RFC 5681 [ RFC5681 ]是引入延迟 ACK 的两个核心功能标准,这是大多数 Linux 发行版中的默认确认机制。RFC 4341 [ RFC4341 ]和RFC 5690 [ RFC5690 ]描述了一种确认拥塞控制机制,其中允许的最小 ACK 频率是每个发送窗口两次。RFC 3449 [ RFC3449 ]讨论了由于不对称效应导致的 TCP 确认机制的不完善性和可变性,并建议缩放 ACK 频率以缓解这些影响。这些 RFC 揭示了对频繁 ACK 的依赖是当前传输协议设计的产物,而不是基本要求。基于这一见解,一些正在进行的 IETF 草案在 TCP 和 QUIC 工作组中都非常关注 ACK 扩展技术。
首先,[ ACK-PULL ]提出了 TCP ACK 拉取机制,它允许发送方请求 ACK 以获取要发送的数据段,而无需接收方额外延迟。当延迟的 ACK 降低传输性能时,这在某些情况下会有所帮助。
[ QUIC-SCALING ]建议通过至少每收到10个数据包发送一个ACK来降低ACK频率,而不是拉更多的ACK,[ QUIC - SATCOM ]建议每个往返时间(RTT)四个ACK的ACK频率,旨在降低非对称路径的链路传输成本。
与使用 ACK 频率的经验值不同,该草案旨在通过提出 Tame ACK (TACK) 来提高可扩展性,其频率是网络连接的带宽延迟乘积的函数。[ IYENGAR-ACK ]为 QUIC 提出了发送方控制的 ACK-FREQUENCY 帧的扩展,在这种情况下,它可以被重用以帮助发送方与接收方同步动态调整的 TACK 频率。
4. QUIC优化ACK机制
4.1。降低 ACK 强度
ACK强度可以以Hz为单位进行量化,即每秒ACK的数量。字节计数 ACK 和周期性 ACK 是降低传输层 ACK 强度的两种基本方法。
1. 字节计数 ACK:ACK 强度是通过为每 L (L >= 2) 个传入的全尺寸数据包发送一个 ACK 来控制的,其中数据包大小等于 Max Packet Size(在 QUIC 中的 max_packet_size 参数中设置) . 字节计数 ACK (f_b) 的强度与数据吞吐量 (bw) 成正比:
f_b = bw/L*max_packet_size (1)
通常,可以通过设置较大的 L 值来减小 f_b。但是,对于给定的 L,f_b 会随着 bw 的增加而增加。这意味着当数据吞吐量非常高时,ACK强度可能仍然比较大。换句话说,字节计数 ACK 的强度与带宽成比例地变化。
2.周期性ACK:字节计数ACK的无限强度可以归因于ACK发送和数据包到达之间的耦合。周期性 ACK 可以将 ACK 强度与数据包到达解耦,当 bw 高时实现有界的 ACK 强度。周期性 ACK (f_pack) 的强度为:
f_pack = 1/alpha (2)
其中 alpha 是两个 ACK 之间的时间间隔,是 RTT 的函数。但是,当 bw 非常低时,ACK 强度总是与高吞吐量情况下一样高。也就是说,周期性ACK的强度不适应带宽变化,浪费资源。
结合这两种方式,QUIC 连接中的最小 ACK 强度可以设置为 f_quic = min{f_b,f_pack}。通过等式(1)和(2),我们有
f_quic = min{bw/(L*max_packet_size), 1/alpha} (3)
我们设置 alpha = RTTmin/beta,这意味着每个 RTTmin 发送 beta ACK。RTTmin 是给定网络路径观察到的最小 RTT。因此,QUIC 连接中的最小 ACK 强度可以如下给出:
f_quic = min{bw/(L*max_packet_size), beta/RTTmin} (4)
其中 beta 表示每个 RTT 的 ACK 数量,L 表示在发送 ACK 之前计数的全尺寸数据包的数量。为了最小化 ACK 强度,需要较小的 beta 或较大的 L。萨拉兰德斯特罗姆等人。在[Sara]中给出了beta的下界,即beta >= 2。根据数据路径(plr_data)和ack路径(plr_ack)的丢失率也可以推导出L的上界,即, L <= feedback_info/(plr_data*plr_ack),其中feedback_info表示一个ACK携带的信息量
定性地,当带宽延迟积 (bdp) 较大时(即 bdp >= beta*L* max_packet_size)应用周期性 ACK,当 bdp 较小时应用字节计数 ACK(即 bdp < beta*L* max_packet_size )。
对于具有大 bdp 的传输,beta = 2 应该足以确保利用率,但大的瓶颈缓冲区(即一个 bdp)使得需要更频繁地确认数据。一般来说,最小发送窗口(SWNDmin)可以粗略估计如下:
SWNDmin = beta*bdp/(beta-1) (5)
理想情况下,瓶颈缓冲区要求由最小发送窗口决定,即 SWNDmin - bdp。由于 ACK 频率加倍将瓶颈缓冲区需求从 1 bdp 大幅降低到 0.33 bdp,因此建议使用 beta = 4 来提供冗余 [Sara],在实践中更加稳健。
4.2. 基于 OWD 的 RTTmin 估计
在本文档中,RTTmin 是在一段时间内给定网络路径在发送端观察到的最小 RTT 样本,而 OWDmin 是在一段时间内在同一网络路径上观察到的最小 OWD 样本。
RTT 估计系统包含一个发送器和一个接收器。发送方几乎无法生成每包 RTT 样本,这是在发送较少 ACK 的情况下最小 RTT 估计偏差的根本原因。当多个带有出发时间戳的数据包通过同一路径在端点之间传输时,可以在发送方接收到 ACK 帧后对该路径的 RTT 进行采样。但是,当发送较少的 ACK 帧时,在 ACK 间隔期间可能会接收到更多的数据包,在多个数据包中仅生成一个 RTT 样本很可能会导致偏差。例如,更大的最小 RTT 估计。一般来说,吞吐量越高,偏差越大。减少偏差的另一种方法是,每个 ACK 帧携带多个时间戳(以及RFC 9002 [RFC9002 ]) 让发送者生成更多的 RTT 样本。但是,(1)开销很大,尤其是对于高带宽传输来说是不可接受的。另外,(2)数据包的数量可能远远超过一个 ACK 帧能够承载的时间戳的最大数量。由于接收器能够监控每个数据包的状态,每个数据包的单向延迟 (OWD) 可以根据每个数据包的出发时间戳(包含在数据包中)和到达时间戳轻松计算。在这种情况下,QUIC 应该采用基于 OWD 的 RTTmin 估计。基本原理是 OWD 的变化反映了 RTT 在近对称链路上的变化。基于 OWD 的 RTTmin 估计要求发送方在每个确认包中记录出发时间戳。同时,在接收端,应该在数据包到达时计算每个数据包的 OWD 样本,并且应该新添加计算最小 OWD 的函数。接收方然后向发送方生成一个 ACK 帧,其中报告达到最小 OWD 的数据包的 ACK 延迟和离开时间戳。ACK 延迟定义为从收到数据包到发送 ACK 帧之间发生的延迟。根据传入的 ACK 帧报告的信息和 ACK 到达时间戳,发送方可以生成 RTT 样本,然后相应地计算 RTTmin。ACK 延迟定义为从收到数据包到发送 ACK 帧之间发生的延迟。根据传入的 ACK 帧报告的信息和 ACK 到达时间戳,发送方可以生成 RTT 样本,然后相应地计算 RTTmin。ACK 延迟定义为从收到数据包到发送 ACK 帧之间发生的延迟。根据传入的 ACK 帧报告的信息和 ACK 到达时间戳,发送方可以生成 RTT 样本,然后相应地计算 RTTmin。
在本文档中,RTTmin 用于更新 ACK 强度。一般来说,RTTmin也可以被其他模块使用。例如,一些拥塞控制器依赖 RTTmin 来估计拥塞窗口 [Neal]。QUIC 丢失检测也使用 RTTmin 来拒绝难以置信的小 RTT 样本RFC 9002 [ RFC9002 ]。
4.3. 发送方操作
根据公式(4),QUIC中的运行时ACK强度由bw和RTTmin决定。通常,RTTmin 和 bw 在发送方计算。
在估计 RTTmin 之前,应根据一段时间内收集的 ACK 帧计算 RTT 样本。假设发送方在t_1时刻发送了一个包,在t_3时刻到达,在t_4时刻发送了ACK帧。可以在接收端计算 ACK 延迟。例如,接收方计算 ACK 延迟 delta_t = t_4 - t_3,并通过 ACK 帧将 ACK 延迟同步给发送方。也可以在发送方计算 ACK 延迟。例如,接收端直接将携带t_4和t_3的ACK帧同步给发送端,发送端计算ACK延迟delta_t = t_4 - t_3。
发送方因此根据delta_t、t_1和ACK帧的到达时间(t_2)计算RTT样本,即RTT_sample = t_2 - t_1 - delta_t。在接收器处测量 delta_t 可确保对更准确的 RTT 估计进行显式校正。RTT 样本应该使用[ RFC6298 ]中指定的指数加权移动平均 (EWMA) 进行平滑。然后发送方根据这些RTT样本在一段时间内计算RTTmin。
bw 估计可以通过与 BBR [Neal] 类似的方式获得。由于最小化 ACK 强度会导致过多的 ACK 延迟,因此 bw 的值可能是长时间内的平均值。然而,在 ACK 强度计算中引入的偏差是有限的。
在计算出 f_quic 后,发送方会定期将其同步到接收方,以通过发送新的 ACK-INTENSITY 帧来更新 ACK 帧的强度。
发送者应该定期生成一个 ACK-INTENSITY 帧。例如,当 f_quic 的变化超过某个阈值时,应发送 ACK-INTENSITY 帧以及时更新 ACK 强度。ACK-INTENSITY 帧的间隔也可以根据 RTTmin 和 bw 的更新窗口来设置。
4.4. 接收端操作
目前,QUIC 接收器仅报告 ACK 帧中最大确认数据包的 ACK 延迟,因此仅使用接收到的 ACK 帧中最大确认数据包生成 RTT 样本。为了在发送较少的 ACK 帧时获得更准确的 RTTmin 估计,QUIC 应该采用基于 OWD 的 RTTmin 估计。基于 OWD 的 RTTmin 估计要求 QUIC 接收器在两个 ACK 帧之间的间隔内过滤达到最小 OWD 的数据包的离开时间戳,并报告该数据包的 ACK 延迟。是否重新定义 ACK 延迟的含义,取决于 QUIC 连接的端点之间的协商。
在数据包到达时,接收器能够根据数据包离开时间戳和数据包到达时间戳之间的差异生成每个数据包的 OWD 样本。然后接收器通过比较每个数据包的 OWD 样本来计算最小 OWD。OWD 估计在这里不需要时钟同步,因为采用的是相对值。
之后,发送方根据达到最小 OWD 的数据包对应的 ACK 延迟和出发时间戳,计算该数据包的 RTT 作为最小 RTT 样本。最终,根据这些最小 RTT 样本计算最小 RTT。
ACK 延迟字段应该在 ACK 帧中携带。ACK 帧中携带的其他字段与RFC 9002 [ RFC9002 ]中定义的含义相同。
接收方一旦收到来自发送方的 ACK-INTENSITY 帧,就会采用新更新的 ACK 强度。
4.5. 生成 ACK
新提出的 ACK 机制应该在没有乱序交付时应用。当重新排序发生时,应该立即生成 ACK 帧。
4.6. QUIC 协议的修改
4.6.1. 传输参数:ack-intensity-support
需要增加一个名为 ack-intensity-support 的新字段,用于双方协商是否在 QUIC 连接中启动动态 ACK 强度功能。端点在握手期间发送此参数。只有在双方同意的情况下,才可以采用ACK强度刷新。
ack-intensity-support (0x XX):该参数有两个值(0或1),指定发送端点是否愿意采用ACK强度刷新。当该值设置为 1 时,表示发送端点要在连接过程中启动 ACK 强度刷新。当该值设置为 0 时,表示发送端点不支持该功能。
4.6.2. ACK-INTENSITY 帧
ACK-INTENSITY 帧如图 1所示。
一个 ACK-INTENSITY 帧包含以下字段:
序列号:一个可变长度整数,指示发送方分配给 ACK-INTENSITY 帧的序列号。
ACK Intensity:一个可变长度整数,指示发送方计算的更新后的 f_quic。
ACK-INTENSITY 帧是 ack-eliciting。但是,它们的丢失不需要重新传输。
发送方应在连接期间生成多个 ACK-INTENSITY 帧,以通知接收方在网络动态下 ACK 强度要求的变化。
4.6.3. 时间戳帧
与在 QUIC 公共数据包头中添加新字段的侵入方式不同,建议添加一个新帧来交换每个数据包的出发时间戳。
TIMESTAMP 帧如图 2所示。
TIMESTAMP 帧包含以下字段:
Departure Timestamp:一个整数,表示一个数据包的离开时间。
QUIC 应该在每个数据包中携带 TIMESTAMP 帧。
4.6.4. ACK延迟重定义
ACK 延迟字段在 ACK 帧中携带。目前,QUIC 接收器仅报告 ACK 帧中最大确认数据包的 ACK 延迟,因此仅使用接收到的 ACK 帧中最大确认数据包生成 RTT 样本。为了在发送较少的 ACK 帧时获得更准确的 RTTmin 估计,QUIC 应该采用基于 OWD 的 RTTmin 估计。基于 OWD 的 RTTmin 估计要求 QUIC 接收器在两个 ACK 帧之间的间隔内过滤达到最小 OWD 的数据包的离开时间戳,并报告该数据包的 ACK 延迟。是否重新定义 ACK 延迟的含义,取决于 QUIC 连接的端点之间的协商。
换句话说,QUIC 应该改变计算 ACK Delay 的方式,根据 OWD 最小的数据包的到达时间戳,而不是最大确认数据包的到达时间戳。
5.安全考虑
待定
6. IANA 考虑事项
应分配 ack-intensity-support 传输参数和 ACK-INTENSITY 帧的值。
7.参考文献
7.1。规范性参考
- [RFC1122]
- 布雷登,R.,埃德。, "Internet 主机要求 - 通信层" , STD 3 , RFC 1122 , DOI 10.17487/RFC1122 ,, < https://www.rfc-editor.org/info/rfc1122 > .
- [RFC2119]
- Bradner, S.,“在 RFC 中使用以指示需求级别的关键词”,BCP 14,RFC 2119,DOI 10.17487/RFC2119,, < https://www.rfc-editor.org/info/rfc2119 > .
- [RFC3449]
- Balakrishnan, H.、Padmanabhan, V.、Fairhurst, G.和M. Sooriyabandara,“网络路径不对称的 TCP 性能影响”,BCP 69,RFC 3449,DOI 10.17487/RFC3449,, < https://www.rfc-editor.org/info/rfc3449 > .
- [RFC4341]
- Floyd, S.和E. Kohler,“数据报拥塞控制协议 (DCCP) 拥塞控制 ID 2 的配置文件:类似 TCP 的拥塞控制”,RFC 4341,DOI 10.17487/RFC4341,, < https://www.rfc-editor.org/info/rfc4341 > .
- [RFC5681]
- Allman, M.、Paxson, V.和E. Blanton,“TCP 拥塞控制”,RFC 5681,DOI 10.17487/RFC5681,, < https://www.rfc-editor.org/info/rfc5681 > .
- [RFC5690]
- Floyd, S.、Arcia, A.、Ros, D.和J. Iyengar,“向 TCP 添加确认拥塞控制”,RFC 5690,DOI 10.17487/RFC5690,, < https://www.rfc-editor.org/info/rfc5690 > .
- [RFC6298]
- Paxson, V.、Allman, M.、Chu, J.和M. Sargent,“计算 TCP 的重传计时器”,RFC 6298,DOI 10.17487/RFC6298,, < https://www.rfc-editor.org/info/rfc6298 > .
- [RFC9000]
- 艾扬格,J.,Ed。和M.汤姆森,埃德。,“QUIC:基于 UDP 的多路复用和安全传输”,RFC 9000,DOI 10.17487/RFC9000,, < https://www.rfc-editor.org/info/rfc9000 > .
- [RFC9002]
- 艾扬格,J.,Ed。和I. Swett, Ed。, "QUIC 丢失检测和拥塞控制" , RFC 9002 , DOI 10.17487/RFC9002 ,, < https://www.rfc-editor.org/info/rfc9002 > .
7.2. 参考资料
- [ACK-拉]
- 戈麦斯,C.,埃德。和J. Crowcroft,Ed。, "TCP ACK 拉取" ,工作进行中, Internet-Draft, draft-gomez-tcpm-ack-pull-01 ,, < https://datatracker.ietf.org/doc/html/draft-gomez-tcpm-ack-pull-01 > .
- [AOD]
- Li, T.、Zheng, K.和K. Xu,“传输控制按需确认”,IEEE Internet Computing 25(2):109-115,.
- [艾扬格-ACK]
- 艾扬格,J.,Ed。和I. Swett, Ed。, "QUIC 中确认延迟的发送者控制" ,正在进行的工作, Internet-Draft, draft-iyengar-quic-delayed-ack-02 ,, < https://datatracker.ietf.org/doc/html/draft-iyengar-quic-delayed-ack-02 > .
- [尼尔]
- Cardwell, N. , Cheng, Y. , Gunn, CS , Yeganeh, SH和V. Jacobson,“BBR:基于拥塞的拥塞控制”,ACM QUEUE 14(5):20-53,.
- [QUIC-卫星通信]
- 库恩,N.,Ed。,费尔赫斯特,G.,Ed。,边界,J.,Ed。和E. Stephan,Ed。, "SATCOM 的 QUIC" ,正在进行的工作, Internet-Draft, draft-kuhn-quic-4-sat-06 ,, < https://datatracker.ietf.org/doc/html/draft-kuhn-quic-4-sat-06 > .
- [快速缩放]
- 费尔赫斯特,G.,Ed。,Custura,A.,Ed。,和T.琼斯,埃德。, "更改默认 QUIC ACK 策略" ,正在进行的工作, Internet-Draft, draft-fairhurst-quic-ack-scaling-03 ,, < https://datatracker.ietf.org/doc/html/draft-fairhurst-quic-ack-scaling-03 > .
- [萨拉]
- Landstrom, S.和L. Larzon,“降低 tcp 确认频率”,ACM SIGCOMM CCR 37(3):5-16,.