TCP協議三次握手和四次揮手的過程

1、名詞解釋

1) TCP(Transmission Control Protocol)傳輸控制協議
TCP是主機對主機層傳輸控制協議,爲提供可靠的連接服務,採用三次握手來確認建立一個連接。
採用四次揮手來進行協議的終止。
2) 位碼
TCP標誌位,有以下6種標示:

標誌位 英文 含義
SYN synchronouse 建立連接
ACK acknowledgement 確認標誌
PSH push 傳送標誌
FIN finish 結束標誌
RST reset 重置標誌
URG urgent 緊急標誌

3) Sequence number 順序號碼
4) Acknowledgement 確認號碼

5) 連接狀態

狀態 介紹
LISTENING 提供某種服務,偵聽遠方TCP端口的連接請求,當提供的服務沒有被連接時,處於LISTENING狀態,端口是開放的,等待被連接。
SYN_SENT (客戶端狀態) 客戶端調用connect,發送一個SYN請求建立一個連接,在發送連接請求後等待匹配的連接請求,此時狀態爲SYN_SENT。
SYN_RCVD (服務端狀態) 在收到和發送一個連接請求後,等待對方對連接請求的確認,當服務器收到客戶端發送的同步信號時,將標誌位ACK和SYN置1發送給客戶端,此時服務器端處於SYN_RCVD狀態,如果連接成功了就變爲ESTABLISHED,正常情況下SYN_RCVD狀態非常短暫。
ESTABLISHED ESTABLISHED狀態是表示兩臺機器正在傳輸數據。
FIN-WAIT-1 等待TCP連接中斷請求的確認,主動關閉端應用程序調用close,TCP發出FIN請求主動關閉連接,之後進入FIN_WAIT1狀態。
FIN-WAIT-2 1、主動關閉端接到FIN ack後,便進入FIN-WAIT-2,這是在關閉連接時,客戶端和服務器兩次揮手之後的半關閉狀態,在這個狀態下,客戶端應用程序還有接受數據的能力,但是已經無法發送數據;2、另一種情況是主動關閉端收到了服務端的FIN請求
CLOSE-WAIT 等待從本地用戶發來的連接中斷請求 ,被動關閉端TCP接到FIN後,就發出ACK以迴應FIN請求(它的接收也作爲文件結束符傳遞給上層應用程序),並進入CLOSE_WAIT
CLOSING 等待遠程TCP對連接中斷的確認,處於此種狀態比較少見
LAST-ACK 等待原來的發向遠程TCP的連接中斷請求的確認,被動關閉端一段時間後,接收到文件結束符的應用程序將調用CLOSE關閉連接,TCP也發送一個 FIN,等待對方的ACK.進入LAST-ACK。
TIME-WAIT 在主動關閉端接收到FIN後,TCP就發送ACK包,並進入TIME-WAIT狀態,等待足夠的時間以確保遠程TCP接收到連接中斷請求的確認,很大程度上保證了雙方都可以正常結束。
CLOSED 被動關閉端在接受到ACK包後,就進入了closed的狀態,連接結束,沒有任何連接狀態。

2、三次握手解釋

在這裏插入圖片描述
三次握手的圖解如上圖,每一條箭頭代表着一次握手,那麼具體是什麼意思呢?
第一次握手: Client端發送位碼爲SYN=1,隨機產生seq number=J的數據包到服務器,Server端收到數據包後,由SYN=1判斷出 Client端要求連接;此時Client端處於SYN_SENT的狀態。
第二次握手: Server端收到請求後要向Client端發送確認連接的信息,於是,Server端向Client端發送一個ACK=1,SYN=1,ack number=J+1(即Client端的seq number +1),隨機生成的seq number=K,此時服務端處於SYN_RCVD;
第三次握手:
Client端收到後檢查兩點 :
1、ack number 是否正確(是否等於J+1);
2、位碼ACK是否等於1。
若以上兩點都正確,Client端會再次發送ack num=K+1(第二次機握手中 Server端發送的seq number + 1),位碼ACK=1,
Server端收到後確認ack number值是否正確,ACK是否爲1 ,若均正確則連接建立成功。
此時雙方處於ESTABLISHED的狀態。

3、四次揮手

在這裏插入圖片描述
四次揮手的示意圖如上圖,每一條箭頭代表着一次揮手。
第一次揮手: Client端發送位碼爲FIN=1,隨機產生seq number=J的數據包到服務器,Server端收到數據包後,由FIN=1判斷出 Client端要求斷開連接;此時Client端處於FIN-WAIT-1的狀態。
第二次揮手: Server端收到請求後要向Client端發送確認斷開連接的信息,於是,Server端向Client端發送一個ACK=1,ack number=J+1(即Client端的seq number +1),此時服務端處於CLOSE_WAIT的狀態,Client端收到這個信號後,由FIN-WAIT-1變成FIN-WAIT-2的狀態,此時Client端可以接受Server端的數據但是不能向Server端傳輸數據。
第三次揮手: Server端主動向Client端發送一個位碼爲FIN=1,隨機產生seq number=K 的數據包到服務器,Client端收到數據包後,由FIN=1判斷出Server端要斷開連接,此時Server端處於LAST-ACK的狀態。
第四次揮手: Client端接受到Server端的請求後,要向Server端發送確認端口連接的信息,於是,Client端向Server端發送了一個ACK=1,ack num=K+1(即Server端的seq number +1),發送後Client端處於TIME-WAIT的狀態,等待2MSL後變成CLOSED,而Server端收到Client端的最後一個ACK後便會變成CLOSED

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