十五大原理之零三--TCP/IP的三次握手和四次斷開原理

重要的標誌位含義:

ACK:表示確認。只有當ACK標誌位爲1時,TCP報文的確認字段纔有效。

SYN:表示同步,在連接建立時用來同步序列號。當SYN=1而ACK=0時,表明這是一個連接請求報文。若對方同意建立連接時,則在響應報文中,應使SYN=1,ACK=1.因此,同步比特SYN置爲1,就表明這是一個連接請求報文或連接接受響應報文。

FIN:用於釋放一個連接。當FIN位爲1時,表明此報文段的發送端數據已發送完畢,並要求釋放連接。

一、TCP/IP的三次握手

第一次握手:首先發送方主機向接收方主機發起一個建立連接的同步(SYN)請求SYN(X),進入SYN_SENT狀態,等待接收方主機確認。

第二次握手:接收方在收到這個請求後,如果同意建立連接,則發送確認ACK,確認序列號爲收到的序列號加1,並且報文中的SYN也要置1,即向發送方主機回覆一個同步/確認(SYN/ACK)應答報文,並進入SYN_RECVD狀態。

第三次握手:發送方主機收到此應答報文後,再向接收方發送一個確認(ACK)報文,然後發送方和接收方均進入ESTABLISHED狀態,完成三次握手,至此,TCP連接建立成功,發送方和接收方就可以開始傳輸數據了。

TCP建立連接的三次握手過程如圖所示:

wKioL1ZsXA3RUi6QAADWfx8UG3I930.jpg




二、TCP/IP的四次斷開

當應用進程結束數據傳送後,就要釋放已建立的連接,TCP連接是雙向的,每個方向都必須單獨進行關閉,首先進行關閉的一方執行主動關閉,而另一方則執行被動關閉。

1、當客戶端的數據傳輸完後,可主動發送出FIN置1的報文給服務端(客戶端主動關閉),以關閉客戶端至服務端方向的數據傳送,並等待服務端的ACK確認應答,同時進入FIN_WAIT1狀態。

2、服務端收到FIN置1的報文後,進入被動關閉,回覆一個ACK確認報文,並進入CLOSE_WAIT狀態;客戶端收到該ACK確認報文後,進入FIN_WAIT2狀態。

3、至此完成了TCP連接的半關閉,即完成了客戶端至服務端方向的數據發送。此時,客戶端雖然不能發送數據,但仍然能接受服務端發給客戶端的數據,即服務端至客戶端方向的連接還未關閉。

4、服務端發送一個FIN置1的報文給客戶端,關閉服務端至客戶端方向的數據傳送,並等待客戶端的ACK確認應答,同時進入LAST_ACK狀態,客戶端收到FIN置1的報文後,回覆ACK確認報文,並進入TIME_WAIT狀態,經過2倍報文最大生存時間(MSL)後,TCP刪除原來建立的鏈接記錄,返回到初始的CLOSED狀態。服務端收到ACK確認報文後,進入CLOSED狀態,完成鏈接的雙向關閉。

TCP/IP四次斷開過程如圖:

wKioL1ZsWGvAgKEfAAEUAiv_oqo885.jpg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章