擁塞避免演算法的修改建議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 IP詳解 快速重傳與快速恢復
快速重傳演算法在之前的文章中有介紹,如果收到乙個out of order的報文段時,tcp需要立刻產生乙個ack,這個ack不應該被延時,目的在於讓對方知道收到乙個失序的報文,並告訴對方自己希望收到的報文seq,我們不知道這個重複的ack的原因,因為還是會等待少量的重複ack到來,如果連續收到3個或...
TCP快速重傳和快速恢復
當tcp傳送乙個分組時會設定乙個定時器,如果在規定的實際間隔內沒有收到ack分組,那麼則重新傳輸該分組,但是 如果tcp收到三個連續的ack分組,此時不管是否過超時間隔則重傳該分組,具體步驟如下 1.將慢啟動閾值ssthresh設為擁塞視窗 cwnd 可理解為傳送資料報大小 的一半 2.對於連續三個...