TCP协议三步挥手与四步挥手
關于TCP協議
TCP(Transmission Control Protocol, 傳輸控制協議)是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。與之對應的是UDP(User Datagram Protocol ,用戶數據報協議),是不可靠的傳輸層協議。
可以想象兩人用對講機交談。
A:我準備好了你準備好了嗎,收到請回答。 B:收到收到,我也準備好了,收到請回答。 A:收到收到
?
?
客戶端發送 SYN報文給服務器端,序列號是n,進入 SYN_SEND 狀態。
服務器端收到 SYN 報文,回應一個ACK(序列號是n+1)同時發一個 SYN (序列號是m),進入 SYN_RECV 狀態。
客戶端收到服務器端的 SYN 報文,回應一個 ACK(序列號是m+1)報文,進入 Established 狀態。
四步揮手
?
?
客戶端發送一個 FIN ,告訴服務器想關閉連接。
服務器收到這個 FIN ,發回一個 ACK。
服務器通知應用程序關閉網絡連接,應用程序關閉后通知服務器。服務器發送一個 FIN 給客戶端 。
客戶端發回 ACK 報文確認。
為什么揮手要四步
這是因為服務端的 LISTEN 狀態下的 SOCKET 當收到客戶端建立連接請求的SYN 報文后,它可以把 ACK 和 SYN ( ACK 起應答作用,而 SYN 起同步作用)放在一個報文里來發送。但關閉連接時,當服務器收到客戶端的 FIN 報文通知時,服務器只能發一個回應報文ACK:“哦,我知道了”,然后通知應用程序。應用程序完成全部數據發送并確定可以終止了,服務器才能發送FIN告訴客戶端可以真正斷開連接了。所以這一步ACK報文和FIN報文需要分開發送,因此多了一個步驟。
TCP報文格式
?
?
-
ACK : TCP協議規定,只有ACK=1時有效,也規定連接建立后所有發送的報文的ACK必須為1。
-
SYN(SYNchronization) : 在連接建立時用來同步序號。當SYN=1而ACK=0時,表明這是一個連接請求報文。對方若同意建立連接,則應在響應報文中使SYN=1和ACK=1. 因此, SYN置1就表示這是一個連接請求或連接接受報文。
-
轉載于:https://www.cnblogs.com/yaokai729/p/11300064.html
總結
以上是生活随笔為你收集整理的TCP协议三步挥手与四步挥手的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【10.4】线程同步--Lock、RLo
- 下一篇: Http请求Response Code含