PTO backoff
backoff 补偿
/ˈbækɒf/
PTO backoff 是QUIC(Quick UDP Internet Connections)协议中的一种机制,用于处理探测超时(Probe Timeout, PTO)重传策略
它逐步增加探测超时的等待时间,以避免网络拥塞并减少不必要的重传
什么是PTO Backoff
PTO backoff 是一种延时策略,用于在多个 PTO 事件发生后逐渐增加超时等待时间,以减少网络负载和拥塞风险
即,每次当数据包重传仍然未得到 ACK 确认时,QUIC 协议会延长下一次 PTO 计算的等待时间
PTO Backoff的工作原理
初始 PTO 计算:
初始 PTO 通常基于平滑后的 RTT(Round-Trip Time,往返时间)
第一次 PTO 触发:
当超过初始 PTO 时间仍未收到数据包的 ACK 确认,触发第一次重传
应用 PTO Backoff:
每次 PTO 后,若仍未收到 ACK 确认,下一次 PTO 值会增加。增加的方式通常是指数增长。
例如,PTO backoff 因子可能是 2,那么第二次 PTO 等待时间将是初始 PTO 的两倍,第三次为初始 PTO 的四倍,依此类推。
假设 backoff_factor = 2, 且初始 PTO 为 100ms
那么:
第一次PTO:100ms
第二次PTO:100ms × 2 = 200ms
第三次PTO:200ms × 2 = 400ms
减少网络拥塞:
通过逐步增加超时时间,PTO backoff 避免了在拥塞的网络中过于频繁的重传请求,从而减轻网络负载。
PTO Backoff的优点
防止网络拥塞:
逐步增加超时等待时间,减少过频的重传,防止因重传过多而加剧网络拥塞
提高重传效率:
通过合理的延迟策略,重传可以在网络状况有所恢复时进行,提高重传成功率
动态适应网络:
根据实际的网络反馈,动态调整PTO等待时间,有助于在不同网络状况下保持良好的传输性能
示例
假设初始 PTO 为 100ms,backoff 因子为 2
以下是一次重传过程的模拟:
发送了包X,并启动初始PTO 100ms
经过 100ms 仍未收到包 X 的 ACK,触发第一重传
设置下一次 PTO 为 200ms
经过 200ms 仍未收到 ACK,触发第二次重传
设置下一次 PTO 为 400ms
经过 400ms 仍未收到 ACK,触发第三次重传
设置下一次 PTO 为 800ms
依此类推,直到网络恢复或所有重传尝试结束
总结
通过动态增加探测超时的等待时间,减少了在网络状况不佳时过于频繁的重传请求,防止网络进一步拥塞
通过合理的延迟策略,PTO backoff 提升了重传效率,并动态适应了不同的网络环境,从而确保数据传输的稳定性和可靠性
PTO 是跨多个编号空间的吗?
探测超时(Probe Timeout, PTO)机制的设计和应用确实是跨越多个编号空间的。
编号空间
QUIC引入编号空间(Packet Number Spaces)的概念,以支持不同类型的包和它们各自的状态管理。
初始编号空间(Initial Packet Number Space):用于初始连接握手的包
0-RTT编号空间(0-RTT Packet Number Space):用于在连接握手完成前发送的数据包
握手编号空间(Handshake Packet Number Space):用于连接握手完成前的后续包
1-RTT编号空间(1-RTT Packet Number Space):用于连接握手完成后的正常数据传输
PTO跨编号空间的工作原理
在计算PTO时,QUIC需要跨多个编号空间来确定最佳的探测超时值。
具体步骤如下:
初始化和计算独立PTO:
对每个编号空间独立计算初始PTO。每个编号空间有自己的RTT估计和相关的变量。
选择最小PTO:
最终的PTO值是所有编号空间中最小的那个。这样可以确保最早探测到潜在丢包并进行重传。
例如,如果在初始编号空间的PTO是300ms,握手编号空间的PTO是200ms,那么,最终使用的PTO值是200ms。
跨编号空间的探测包:
当PTO触发时,可能需要在不同的编号空间内发送探测包。探测包可以是用于确认连接状态的控制信息,也可以是需要重传的数据包。
动态调整PTO:
根据接收到的ACK确认情况和网络状况,动态调整各个编号空间的PTO值。这有助于在不断变化的网络条件下维持传输稳定性和有效性。
示例
假设存在三个编号空间:
初始编号空间(Initial)、握手编号空间(Handshake)、1-RTT编号空间(1-RTT)
每个编号空间的初始PTO计算如下:
最终,跨编号空间的PTO值为
触发探测超时的操作:
在 200ms 后,如果握手编号空间尚未收到 ACK 确认,就会在此编号空间内发送探测包(如握手信息的重传)
如果在接下来的探测包发送后,仍未确认其它编号空间的数据包,可以逐步触发这些编号空间的重传
优点
确保可靠性:通过跨越多个编号空间的PTO机制,可以更早地探测到连接中的任何问题(如数据包丢失),并及时进行重传。
降低延迟:PTO计算采用最小值策略,使得在最短时间内就能发现问题,并采取修复措施。
动态调整:根据实际网络状况,动态调整各个编号空间的PTO值,有助于优化网络性能。
总结
探测超时(PTO)在QUIC协议中确实是跨多个编号空间进行管理和计算的。
通过在多个编号空间内计算独立的PTO值并选择最小的一个进行实际操作,QUIC能够更加灵敏和高效地处理潜在的丢包和延迟问题。
这有助于提高数据传输的可靠性和效率,尤其是在不同类型数据包和不同网络条件下。
PTO是跨编号空间的,为啥每个编号空间还要单独计算PTO
不同的编号空间在处理和传输不同类型的数据包时,往返时延(RTT)和丢包情况可能各有不同。
QUIC协议中的每个编号空间(如Initial、Handshake、1-RTT等)都有其独特的用途和重要性:
Initial编号空间:用于初始连接握手
Handshake编号空间:用于交换握手数据,完成密钥协商
1-RTT编号空间:用于传输正式数据(连接握手完成后的常规数据传输)
每个编号空间中的数据包类型、大小、传输频率和期望的RTT可能都有所不同,因此需要独立管理和监测其状况。
不同编号空间的数据包在网络传输中的RTT可能不同,比如:
握手包(Handshake Packets)通常需要经过更多的处理步骤,因此其RTT可能会略高
初始包(Initial Packets)可能较少受网络拥塞的影响,因为它们通常是在连接初始化时发送的
由于这种差异,独立计算各编号空间的PTO值能使QUIC更精细地反映实时网络状况,并基于精确的信息做出决策。
丢包检测和处理的精确性
单独计算每个编号空间的PTO可以使丢包检测和处理更加精确:
如果一个特定编号空间的PTO较短,说明这个编号空间中的数据更容易丢包,需要更迅速的重传。
独立计算的PTO值帮助快速发现网络瓶颈或传输异常,对应采取措施以减少整体传输延迟。
灵活的重传策略
独立计算PTO还支持更灵活的重传策略:
在某一个编号空间中探测到丢包,可以对该编号空间进行更快的重传,而不影响其他编号空间的数据传输。
这个独立性允许QUIC在网络状况异常时,能够专注于最急需修复的问题,不浪费资源在相对稳定的编号空间。
应用
假设存在三个编号空间(Initial、Handshake、1-RTT),每个编号空间的都有各自的PTO
然后,跨编号空间的PTO选择最小值
当触发PTO时
如果Initial编号空间中的包超时未被确认,需要重传Initial编号空间的包,同时调增PTO值
其他编号空间如没有超时,不需要立即重传,保持当前PTO,直到实际触发
总结
尽管QUIC协议对PTO进行跨编号空间管理,但为了确保每个编号空间的独立性和灵敏度,每个编号空间内仍需单独计算PTO值。
这种策略提供了更精细和精准的丢包检测和重传管理,使得QUIC在不同传输阶段能有效适应网络变化,提高传输的可靠性和效率。