1. 程式人生 > >TCP控制擁塞的四種演算法:慢開始,擁塞避免,快重傳,快恢復

TCP控制擁塞的四種演算法:慢開始,擁塞避免,快重傳,快恢復

我們在開始假定:

1:資料是單方向傳遞,另一個視窗只發送確認.
2:接收方的快取足夠大,因此傳送方的大小的大小由網路的擁塞程度來決定.

一:慢開始演算法和擁塞避免演算法

傳送方會維持一個擁塞視窗,剛開始的擁塞視窗和傳送視窗相等,一般開始均設定1,然後我們每收到一個確認,就讓擁塞視窗大小變為原來的兩倍,接著傳送分組也是原來的兩倍,以此類推,當視窗值等於16(慢開始門限),然後我們開始採用”加法增大”的策略,即不在以2倍的方式增加,而是轉變為每次加1的方式.直到網路擁塞.我們開始採用”擁塞避免”演算法:讓新的慢開始門限值變為發生擁塞時候的值的一半,將擁塞視窗置為1,然後讓它再次重複,這時一瞬間會將網路中的資料量大量降低.

二:快重傳和快恢復演算法
快重傳可以提高網路的吞吐量而快恢復演算法相當於擁塞避免演算法的後半恢復部分的優化.
假設以下情況:如果在傳送方設定的超時定時器到時間還沒有收到確認,那麼有一種可能是網路發生堵塞,這種情況下,tcp會將擁塞視窗置為一,新的門限值變為發生阻塞時的一半並且開始執行慢開始演算法.當我們使用快重傳的時候,要求接收方接收到一個失序的報文段後就立即發出 重複確認,(目的是讓對方早知道有報文段沒有到達)

假設傳送方傳送了M1–M4四個分組,接收方收到了M1和M2,以及M4,這些分組.
現在接收方不能確認M4,因為M3沒有收到,此時接收方可以什麼都不幹,也可以傳送對M2的確認,但是快重傳演算法要求這樣做:
接收方應該及時傳送對M2的重複確認,這樣可以讓傳送方知道M3並沒有被傳過來,傳送方還會試著傳送M5,M6,接收方收到之後,我們會繼續傳送對M2的確認,這樣一共發了好幾個對M2的確認,按照規定,只要傳送方收到三個重複確認,就立即重傳對方未收到的報文段M3.這樣可以避免阻塞,並且提高我們網路的吞吐量.

快恢復演算法與快重傳演算法配合使用

  • 當傳送方收到三個連續確認時,就執行”乘法減小”演算法,把”慢開始門限”減半,注意接下來不會執行慢開始演算法.
  • 由於此時沒有傳送網路阻塞(要是發生阻塞的話就不會連續收到4個確認),因此此時不執行慢開始演算法,並不會將擁塞視窗的值置為1,而是將它置為慢開始門限的一半.然後再實行擁塞避免演算法,每次收到確認之後+1.