圖文並茂解釋TCP/IP 3次握手4次斷開
阿新 • • 發佈:2022-12-02
三次握手總結
三次握手是 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端傳送標誌位是FIN的報文段,請求關閉連線,同時Client端進入
LAST_ACK
狀態。 -
第四次揮手 : Client端收到Server端傳送的FIN報文段,向Server端傳送標誌位是ACK的報文段,然後Client端進入
TIME_WAIT
狀態。Server端收到Client端的ACK報文段以後,就關閉連線。此時,Client端等待2MSL的時間後依然沒有收到回覆,則證明Server端已正常關閉,那好,Client端也可以關閉連線了。