快速重傳與快速恢復演算法

2021-06-27 06:30:33 字數 1070 閱讀 3808

擁塞避免演算法的修改建議1 9 9 0年提出 [jacobson 1990b]。

在介紹修改之前,我們認識到在收到乙個失序的報文段時, tcp立即需要產生乙個ack(乙個重複的ack)。這個重複的ack不應該被遲延。該重複的ack的目的在於讓對方知道收到乙個失序的報文段,並告訴對方自己希望收到的序號。

由於我們不知道乙個重複的ack是由乙個丟失的報文段引起的,還是由於僅僅出現了幾個報文段的重新排序,因此我們等待少量重複的ack到來。假如這只是一些報文段的重新排序,則在重新排序的報文段被處理並產生乙個新的ack之前,只可能產生1 ~ 2個重複的ack。

如果一連串收到3個或3個以上的重複ack,就非常可能是乙個報文段丟失了。於是我們就重傳丟失的資料報文段,而無需等待超時定時器溢位。這就是快速重傳演算法。接下來執行的不是慢啟動演算法而是擁塞避免演算法。這就是快速恢復演算法。

在下圖中可以看到在收到3個重複的ack之後沒有執行慢啟動。相反,傳送方進行重傳,接著在收到重傳的ack以前,傳送了3個新的資料的報文段(報文段67, 69和7 1)。

在這種情況下沒有執行慢啟動的原因是由於收到重複的ack不僅僅告訴我們乙個分組丟失了。

由於接收方只有在收到另乙個報文段時才會產生重複的ack,而該報文段已經離開了網路並進入了接收方的快取。也就是說,在收發兩端之間仍然有流動的資料,而我們不想執行慢啟動來突然減少資料流。

這個演算法通常按如下過程進行實現:

1) 當收到第3個重複的ack時,將ssthresh設定為當前擁塞視窗cwnd的一半。重傳丟失的報文段。設定cwnd為ssthresh加上3倍的報文段大小。

2) 每次收到另乙個重複的ack時,cwnd增加1個報文段大小並傳送 1個分組(如果新的cwnd允許傳送)。

3) 當下乙個確認新資料的ack到達時,設定cwnd為ssthresh(在第1步中設定的值)。這個

ack應該是在進行重傳後的乙個往返時間內對步驟 1中重傳的確認。另外,這個ack也應該是對丟失的分組和收到的第1個重複的ack之間的所有中間報文段的確認。這一步採用的是擁塞避免,因為當分組丟失時我們將當前的速率減半。

快速恢復與快速重傳演算法

擁塞避免演算法的修改建議1 9 9 0年提出 jacobson 1990b 在介紹修改之前,我們認識到在收到乙個失序的報文段時,tcp立即需要產生乙個ack 乙個重複的ack 這個重複的ack不應該被遲延。該重複的ack的目的在於讓對方知道收到乙個失序的報文段,並告訴對方自己希望收到的序號。由於我們...

TCP快速恢復演算法PRR

prr演算法 proportional rate reduction 決定在丟包恢復 loss recovery 期間,對應於每個ack報文,可傳送的報文數量。目的是 1 快速平穩的從loss中恢復 2 恢復之後擁塞視窗收斂與ssthresh。主要是為了解決linux核心之前採用的恢復演算法rate...

TCP IP詳解 快速重傳與快速恢復

快速重傳演算法在之前的文章中有介紹,如果收到乙個out of order的報文段時,tcp需要立刻產生乙個ack,這個ack不應該被延時,目的在於讓對方知道收到乙個失序的報文,並告訴對方自己希望收到的報文seq,我們不知道這個重複的ack的原因,因為還是會等待少量的重複ack到來,如果連續收到3個或...