天天看點

【轉】TCPIP協定中的三次握手和四次揮手

TCP_IP通信主要包含以下三個步驟(/階段):

        一、建立連接配接階段 —— 三次握手

        二、資料傳輸階段

        三、關閉連接配接階段(/釋放連接配接) —— 四次揮手

第一階段:建立連接配接  (如下圖)

【轉】TCPIP協定中的三次握手和四次揮手

①  用戶端向服務端發送連接配接請求封包 →  (SYN=1,seq = client_isn)

②  服務端接受用戶端的連接配接請求并回複ACK封包及給此次連接配接配置設定資源。 →  (SYN=1,seq = client_isn, ack = client_isn + 1)

③  用戶端接受來自服務端的ACK封包後,回複ACK封包給服務端并配置設定資源。 →  (SYN=0,seq = server_isn, ack = server_isn + 1)  // 圖有誤

第三階段:斷開連接配接  (如下圖)

【轉】TCPIP協定中的三次握手和四次揮手

【注】 TCP連接配接的斷開可以是服務端,也可以是用戶端。

     下面以用戶端斷開TCP連接配接為例說明。

①  用戶端向服務端發送斷開TCP連接配接的請求,即發送FIN封包。【這一步表明用戶端沒有資料要發送給服務端了】

②  服務端接受用戶端的FIN封包後,由于可能還有資料未發送完成,是以先發送ACK封包。【這一步表明服務端已收到用戶端的關閉連接配接請求,但服務端可能還有資料需要發送,讓用戶端等待消息】  —— 此時用戶端進入FIN_WAIT狀态,等待服務端的FIN封包。

③  當服務端的資料發送完畢,就向用戶端FIN封包。【這一步表明服務端資料發送完畢,準備好關閉連接配接了】

④  用戶端接受到服務端的FIN封包後,但仍不确定服務端是否清楚要關閉。是以接着發送ACK封包,直至服務端接收到為止。【這一步用戶端發送完ACK封包後就進入TIME_WAIT狀态】

    服務端接受到用戶端的ACK封包後,就斷開連接配接。用戶端等待2MSL依然沒有收到回複則說明服務端已正常關閉,此時用戶端也關閉連接配接。

OVER~TCP連接配接就正常關閉了。

整個TCP連接配接建立至斷開的過程中,

用戶端的狀态變化

建立連接配接階段:

        發送SYN                                  → SYN_SEND

        接收SYN+ACK & 發送ACK        →  ESTABLISHED

斷開連接配接階段:

        向服務端發送FIN                       → FIN_WAIT_1

        接收服務端ACK                         → FIN_WAIT_2

        接收服務端FIN & 發送ACK         → TIME_WAIT

        等待2MLS                                 → CLOSED

服務端的狀态變化

建立連接配接階段:

        監聽套接字                                           →  LISTEN

        接收到用戶端SYN & 發送SYN+ACK       →  SYN_RCVD

        接收用戶端ACK                                    →  ESTABLISHED

斷開連接配接階段:

        接收FIN & 發送ACK              → CLOSE_WAIT

        發送FIN封包                         → LAST_ACK

        接收用戶端ACK                    → CLOSED

參考:

TCP協定中的三次握手和四次揮手(圖解)

在此表示感謝。