1 TLP(Tail Loss Probe)
尾部探測(cè)算法
當(dāng)發(fā)送端連續(xù)收到3個(gè)重復(fù)的ACK時(shí),發(fā)送端會(huì)開始快重傳:不等重傳定時(shí)器超時(shí),立刻進(jìn)行重傳。但是在下面三種情況下將導(dǎo)致即使需要立刻快重傳但是因?yàn)闆]有收到3次ACK而無法快重傳:
- 擁塞窗口很小,比如是2
- 發(fā)送出去的報(bào)文大部分丟失,接收端無法響應(yīng)3次ACK
- ACK大部分丟失,接收端沒有收到3次ACK
那么TLP就是解決這種問題的。
其實(shí)對(duì)于交互類應(yīng)用,比如游戲和web服務(wù)等,能夠快速重傳而不是需要等待重傳定時(shí)器超時(shí)再重傳對(duì)于降低延遲是很重要的。
2 基本策略
TLP算法會(huì)在TCP還是Open狀態(tài)的時(shí)候,設(shè)置一個(gè)Probe TimeOut (PTO)。
當(dāng)鏈路中有未被確認(rèn)的數(shù)據(jù)包,同時(shí)在PTO時(shí)間內(nèi)未收到任何ACK,則會(huì)觸發(fā)PTO
超時(shí)處理機(jī)制。
TLP會(huì)選擇傳輸序號(hào)最大的一個(gè)數(shù)據(jù)包作為tail loss probe包,這個(gè)序號(hào)最大的包可能是
一個(gè)可以發(fā)送的新的數(shù)據(jù)包,也可能是一個(gè)重傳包。
TLP通過這樣一個(gè)tail loss probe包,如果能夠收到相應(yīng)的ACK,則會(huì)觸發(fā)FR機(jī)制,而不是RTO機(jī)制。
2.1 觸發(fā)超時(shí)機(jī)制的常見場(chǎng)景
這些case還是用大神們的原文描述比較準(zhǔn)確:)
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機(jī)制解決了
d. An unexpectedly long round-trip time(RTT), such that the ACKs arrive after
the RTO timer expires.
-- F-RTO機(jī)制通過檢測(cè)spurious retransmission,能夠盡量的undo RTO造成的影響
Early Retransmit技術(shù)可參考這篇wiki
F-RTO技術(shù)可參考這篇wiki
Google Web servers上面,將近70%的重傳是RTO超時(shí)重傳,只有30%是Fast Recovery重傳。
同時(shí)還有數(shù)據(jù)表明,96%的RTO超時(shí)重傳是在沒有收到任何dupack的情況下發(fā)生的。
沒有到任何dupack就意味著FR和ER機(jī)制都是無法生效的。
參考
下面這篇文章結(jié)合linux源碼和RFC詳細(xì)講解了TLP
TCP Tail Loss Probe(TLP)