自頂向下 | TCP擁塞控制

NO23412號菜狗發表於2020-11-28

我們知道分組交換機在做分組轉發也是需要時間的,所以在分組交換機中也有相應的快取,用於儲存到達的分組。很明顯分組交換機中的快取大小是有限的,那麼當網路中的分組過多時,分組交換機中的快取滿,就會導致分組丟失。

網路擁塞的代價:

  • 當分組到達速率接近鏈路容量時,分組經歷巨大的排隊時延。、
  • 傳送方必須執行重傳以補償因為快取溢位而丟失的分組。
  • 傳送方在遇到大時延時所進行的不必要重傳會引起路由器利用其鏈路頻寬來轉發不必要的分組副本。
  • 當一個分組沿一條路徑被丟失時,每個上游路由器用於轉發該分組而使用的傳輸容量最終被浪費掉了。

TCP提供了端到端擁塞控制,端系統通過對網路行為的觀察,判斷網路的擁塞。

端到端擁塞控制指網路層不能為運輸層擁塞控制提供顯式幫助,反之稱為網路輔助的擁塞控制。

如何限制傳送速率?

類似TCP流量控制,傳送方維護了一個變數,稱為擁塞視窗,通過控制LastByteSent - LastByteAcked <= min(cwnd, rwnd),即已傳送未被確認資料量小於擁塞視窗和接收視窗,來限制傳送速率。

忽略rwnd(接收視窗)的情況下,通過調節cwnd(擁塞視窗)的值,調整傳送方向連線傳送資料的速率。

如何感知網路擁塞?

我們將一個TCP傳送方的丟包事件定義為:要麼出現超時,要麼收到來自接收方的3個冗餘ACK。也就是說沒有丟包事件發生,則網路良好;出現丟包事件,則網路擁塞。

如何調節傳送速率?

TCP傳送方希望以儘量高的速率傳送而不會使網路擁塞。

  • 一個丟包事件意味著擁塞,因此當丟失 報文段時應當降低傳送速率。
  • 一個先前未確認報文段的確認到達時,能夠增加傳送方的速率。
  • 傳送方會試探擁塞開始出現的速率,並從該速率後退,繼續開始試探。

TCP擁塞控制演算法

TCP擁塞控制演算法包括三個部分:①慢啟動;②擁塞避免;③快速恢復。

慢啟動以一個低速率開始,進行指數增長,如果快要到擁塞發生的速率了(通過慢啟動閾值感知,即ssthresh變數),就進入擁塞避免,停止指數增長,轉為線性增長。

且TCP擁塞控制演算法對待超時和收到3個冗餘ACK的態度是不一樣的,雖然他們都標識著分組丟失,但是超時會比收到3個冗餘ACK意味著更大的網路擁塞,因此超時都會重新開始慢啟動,而收到3個冗餘ACK則會進入快速恢復。

在快速恢復中,會探測是不是輕度擁塞(不需要把速率打到低谷),因此每收到一個冗餘ACK會指數增加傳送速率,直到超時(重度擁塞,重新開始慢啟動)或收到新的ACK(輕度擁塞,擁塞解除了,進入擁塞避免線性增加傳送速率)。

整個擁塞控制用一句話總結就是:TCP傳送方希望以儘量高的速率傳送而不會使網路擁塞。因此傳送方的傳送速率會隨著時間呈現鋸齒狀。


作者:李素晴
連結:https://juejin.cn/post/6888258656341606408
來源:掘金
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

相關文章