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