天天看點

TCP 協定圖解

記得上大學的時候講 tcp/ip 協定的時候,對協定有很地都不能明白,後來讀了Linux核心源碼後才有了更深一層的認識。個人覺得理論方面的講解還是太抽象,要想了解的更深刻還是得看源碼才行。

  三次握手的目的是連接配接伺服器指定端口,建立TCP連接配接,并同步連接配接雙方的序列号和确認号并交換 TCP 視窗大小資訊.在socket程式設計中,用戶端執行connect()時。将觸發三次握手。

TCP 協定圖解

  TCP四次揮手需要發送四個包。用戶端或伺服器均可主動發起揮手動作,在socket程式設計中,任何一方執行close()操作即可産生揮手操作。

  

TCP 協定圖解

  滑動視窗的工作機制如下圖所示:

  

TCP 協定圖解

  首先是第一次發送資料這個時候的視窗大小是根據鍊路帶寬的大小來決定的。我們假設這個時候視窗的大小是3。這個時候接受方收到資料以後會對資料進行确認告訴發送方我下次希望手到的是資料是多少。這裡我們看到接收方發送的ACK=3。這個時候發送方收到這個資料以後就知道我第一次發送的3個資料對方隻收到了2個。就知道第3個資料對方沒有收到。下次在發送的時候就從第3個資料開始發。這個時候視窗大小就變成了2 。

  

TCP 協定圖解

  這個時候發送方發送2個資料。

  

TCP 協定圖解

  看到接收方發送的ACK是5就表示他下一次希望收到的資料是5,發送方就知道我剛才發送的2個資料對方收了這個時候開始發送第5個資料。

  這就是滑動視窗的工作機制,當鍊路變好了或者變差了這個視窗還會發生變話,并不是第一次協商好了以後就永遠不變了。

繼續閱讀