1 TLP(Tail Loss Probe)
尾部探测算法
当发送端连续收到3个重复的ACK时,发送端会开始快重传:不等重传定时器超时,立刻进行重传。但是在下面三种情况下将导致即使需要立刻快重传但是因为没有收到3次ACK而无法快重传:
- 拥塞窗口很小,比如是2
- 发送出去的报文大部分丢失,接收端无法响应3次ACK
- ACK大部分丢失,接收端没有收到3次ACK
那么TLP就是解决这种问题的。
其实对于交互类应用,比如游戏和web服务等,能够快速重传而不是需要等待重传定时器超时再重传对于降低延迟是很重要的。
2 基本策略
TLP算法会在TCP还是Open状态的时候,设置一个Probe TimeOut (PTO)。
当链路中有未被确认的数据包,同时在PTO时间内未收到任何ACK,则会触发PTO
超时处理机制。
TLP会选择传输序号最大的一个数据包作为tail loss probe包,这个序号最大的包可能是
一个可以发送的新的数据包,也可能是一个重传包。
TLP通过这样一个tail loss probe包,如果能够收到相应的ACK,则会触发FR机制,而不是RTO机制。
2.1 触发超时机制的常见场景
这些case还是用大神们的原文描述比较准确:)
a. Drop tail at the end of transactions.
b. Mid-transaction loss of an entire window of data or ACKs.
c. Insufficient number of duplicate ACKs to trigger fast recovery at sender.
-- 基本被Eearly Retransmit机制解决了
d. An unexpectedly long round-trip time(RTT), such that the ACKs arrive after
the RTO timer expires.
-- F-RTO机制通过检测spurious retransmission,能够尽量的undo RTO造成的影响
Early Retransmit技术可参考这篇wiki
F-RTO技术可参考这篇wiki
Google Web servers上面,将近70%的重传是RTO超时重传,只有30%是Fast Recovery重传。
同时还有数据表明,96%的RTO超时重传是在没有收到任何dupack的情况下发生的。
没有到任何dupack就意味着FR和ER机制都是无法生效的。
参考
下面这篇文章结合linux源码和RFC详细讲解了TLP
TCP Tail Loss Probe(TLP)