快重傳與快恢復


快重傳算法首先要求接收方每收到一個失序的報文段后就立即發出重復確認(為的是使發送方及早知道有報文段沒有到達對方)而不要等待自己發送數據時才進行捎帶確認。

快重傳示意圖如下:

 

如上圖所示,接收方收到了 M1 和 M2 后都分別發出了確認。現假定接收方沒有收到 M3 但接着收到了 M4。顯然,接收方不能確認 M4,因為 M4 是收到的失序報文段(按照順序的 M3 還沒有收到)。

根據之前介紹的 TCP 可靠傳輸原理,接收方可以什么都不做,也可以在適當時機發送一次對 M2 的確認。但按照快重傳算法的規定,接收方應及時發送對 M2 的重復確認,這樣做可以讓發送方及早知道報文段 M3 沒有到達接收方。因此,接下來,發送方發送 M5 和 M6 后,接收方收到后,也還是要再次發出對 M2 的重復確認。

快重傳算法規定,發送方只要一連收到三個重復確認就應當立即重傳對方尚未收到的報文段 M3,而不必繼續等待為 M3 設置的重傳計時器到期。

與快重傳配合使用的還有快恢復算法,其過程有以下兩個要點:

  1. 當發送方連續收到三個重復確認時,就執行“乘法減小”算法,把慢開始門限ssthresh 減半。這是為了預防網絡發生擁塞。請注意,接下去不執行慢開始算法。
  2. 由於發送方現在認為網絡很可能沒有發生擁塞(如果網絡發生了嚴重的擁塞,就不會一連有好幾個報文段連續到達接收方,也就不會導致接收方連續發送重復確認),因此與慢開始不同之處是現在不執行慢開始算法(即擁塞窗口 cwnd 現在不設置為 1),而是把 cwnd 值設置為慢開始門限 ssthresh 減半后的數值,然后開始執行擁塞避免算法(“加法增大”),使擁塞窗口緩慢地線性增大。

如下圖所示:注意圖上關鍵點,從收到 3 個重復的確認,執行快重傳算法。

 

上圖給出了快重傳和快恢復的示意圖,並標明了“TCP Reno版本”,這是目前使用得很廣泛的版本。

圖中還畫出了已經廢棄不用的虛線部分(TCP Tahoe 版本)。請注意它們的區別就是:新的 TCP Reno 版本在快重傳之后采用快恢復算法而不是采用慢開始算法。

 

該文僅為自己學習記錄,轉載自:

高級 SRE 工程師https://zhuanlan.zhihu.com/p/261096328


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM