1. 程式人生 > 其它 >圖文並茂解釋TCP/IP 3次握手4次斷開

圖文並茂解釋TCP/IP 3次握手4次斷開

 

三次握手總結

三次握手是 TCP 連線的建立過程。在握手之前,主動開啟連線的客戶端結束 CLOSE 階段,被動開啟的伺服器也結束 CLOSE 階段,並進入 LISTEN 階段。隨後進入三次握手階段:

第一次握手: 首先客戶端向伺服器傳送一個 SYN 包,並等待伺服器確認,其中:

  • 標誌位為 SYN,表示請求建立連線;
  • 序號為 Seq = x(x 一般取隨機數);
  • 隨後客戶端進入 SYN-SENT 階段。

第二次握手: 伺服器接收到客戶端發來的 SYN 包後,對該包進行確認後結束 LISTEN 階段,並返回一段 TCP 報文,其中:

  • 標誌位為 SYN 和 ACK,表示確認客戶端的報文 Seq 序號有效,伺服器能正常接收客戶端傳送的資料,並同意建立新連線;
  • 序號為 Seq = y;
  • 確認號為 Ack = x + 1,表示收到客戶端的序號 Seq 並將其值加 1 作為自己確認號 Ack 的值,隨後伺服器端進入 SYN-RECV 階段。

第三次握手:客戶端接收到傳送的 SYN + ACK 包後,明確了從客戶端到伺服器的資料傳輸是正常的,從而結束 SYN-SENT 階段。並返回最後一段報文。其中:

  • 標誌位為 ACK,表示確認收到伺服器端同意連線的訊號;
  • 序號為 Seq = x + 1,表示收到伺服器端的確認號 Ack,並將其值作為自己的序號值;
  • 確認號為 Ack= y + 1,表示收到伺服器端序號 seq,並將其值加 1 作為自己的確認號 Ack 的值。
  • 隨後客戶端進入 ESTABLISHED。

當伺服器端收到來自客戶端確認收到伺服器資料的報文後,得知從伺服器到客戶端的資料傳輸是正常的,從而結束 SYN-RECV 階段,進入 ESTABLISHED 階段,從而完成三次握手。



四次揮手總結:

揮手請求可以是Client端,也可以是Server端發起的,我們假設是Client端發起:

  • 第一次揮手: Client端發起揮手請求,向Server端傳送標誌位是FIN報文段,設定序列號seq,此時,Client端進入FIN_WAIT_1狀態,這表示Client端沒有資料要傳送給Server端了。
  • 第二次揮手:Server端收到了Client端傳送的FIN報文段,向Client端返回一個標誌位是ACK的報文段,ack設為seq加1,Client端進入FIN_WAIT_2
    狀態,Server端告訴Client端,我確認並同意你的關閉請求。
  • 第三次揮手: Server端向Client端傳送標誌位是FIN的報文段,請求關閉連線,同時Client端進入LAST_ACK狀態。
  • 第四次揮手 : Client端收到Server端傳送的FIN報文段,向Server端傳送標誌位是ACK的報文段,然後Client端進入TIME_WAIT狀態。Server端收到Client端的ACK報文段以後,就關閉連線。此時,Client端等待2MSL的時間後依然沒有收到回覆,則證明Server端已正常關閉,那好,Client端也可以關閉連線了。