1. 程式人生 > >趣談網路協議(八)TCP協議(下)

趣談網路協議(八)TCP協議(下)

如何實現一個靠譜的協議

(1)為了保證順序性,每一個包都有一個 ID。在建立連線的時候,會商定起始的ID是什麼,然後按照ID一個個傳送。為了保證不丟包,對於傳送的包都要進行應答,但是這個應答不是一個一個來的,而是會應答某個之前的ID,表示都收到了,這種模式稱為累計確認或者累計應答

(2)為了記錄所有傳送的包和接收的包,TCP也需要傳送端和接收端分別都有快取儲存這些記錄。傳送端的快取裡是按照包的ID一個個排列,根據處理的情況分成四個部分

  • 第一部分:傳送了並且已經確認的。這部分就交給你下屬的,並且也做完了的,應該劃掉的
  • 第二部分:傳送了並且尚未確認的。這部分是你交代下屬的,但是還沒做完的,需要等待做完的回覆之後,才能劃掉
  • 第三部分:沒有傳送,但是已經等待發送的。這部分是你沒有交代給下屬的,但是馬上就要交代的
  • 第四部分:沒有傳送,並且暫時還不會發送的。這部分是你還沒有交代給下屬,而且暫時還不會交代給下屬的

(3)區分第三部分和第四部分的原因是:流量控制

(4)滑動視窗:在TCP裡,接收端會給傳送端報一個視窗的大小,叫Advertised window。這個視窗的大小應該等於上面的第二部分加上第三部分,超過了這個視窗,接收端做不過來,就不能傳送了

(5)傳送端的資料結構
在這裡插入圖片描述

(6)對於接收端來講,它的快取裡記錄的內容要簡單一些

  • 第一部分:接受並且確認過的。它就是我領導交代我的,並且我做完的
  • 第二部分:還沒接收,但是馬上就能接收的
  • 第三部分:還沒接收,也沒法接收的。超過工作量的部分

(7)接收端對應的資料結構如下圖
在這裡插入圖片描述


流量控制

(1)在對於包的確認中,同時會攜帶一個視窗的大小,傳送端根據視窗大小,調整發送的資料大小
(2)傳送方會定時傳送視窗探測資料包,看是否有機會調整視窗大小。當接收方比較慢的時候,要防止低能視窗綜合徵。


擁塞控制

擁塞控制的問題,也是通過視窗的大小來控制的,前面的滑動視窗rwnd是怕傳送方把接收方快取塞滿,而擁塞視窗cwnd,是怕把網路塞滿