TCP連接的建立和釋放分別通過(guò)“三次握手”和“四次揮手”來(lái)完成。
三次握手過(guò)程
TCP三次握手是建立可靠網(wǎng)絡(luò)連接的關(guān)鍵過(guò)程,它用于確保通信雙方能夠正常發(fā)送和接收數(shù)據(jù),并提供可靠的數(shù)據(jù)傳輸機(jī)制。三次握手的主要目標(biāo)包括:
? 同步雙方的序列號(hào)
? 確認(rèn)雙方的接收和發(fā)送能力
? 防止因?yàn)檫^(guò)期報(bào)文導(dǎo)致的誤連接

1
第一次握手
? 客戶端發(fā)送一個(gè)SYN(同步)請(qǐng)求報(bào)文,表示希望建立連接,并附帶初始序列號(hào)(Sequence Number)。< 客戶端撥通服務(wù)器的電話,說(shuō)“喂?聽得到嗎?”>? 客戶端進(jìn)入 SYN_SENT 狀態(tài),等待服務(wù)器的響應(yīng)。
2
第二次握手
? 服務(wù)器收到請(qǐng)求后,回復(fù)一個(gè)SYN+ACK(同步+確認(rèn))報(bào)文。< “聽得到!你那邊OK嗎?”>? ACK字段確認(rèn)客戶端的序列號(hào),同時(shí)服務(wù)器生成自己的初始序列號(hào)。
? 服務(wù)器進(jìn)入 SYN_RCVD 狀態(tài),等待客戶端的確認(rèn)。
3
第三次握手
? 客戶端收到服務(wù)器的確認(rèn)后,再發(fā)送一個(gè)ACK(確認(rèn))報(bào)文,確認(rèn)服務(wù)器的響應(yīng)。<客戶端確認(rèn):“沒(méi)問(wèn)題,開始聊吧!”>? 客戶端進(jìn)入 ESTABLISHED 狀態(tài),服務(wù)器也進(jìn)入 ESTABLISHED 狀態(tài),連接正式建立。下面是TCP頭部的一個(gè)簡(jiǎn)單介紹:上述流程中提到:

序列號(hào):
定義:序列號(hào)標(biāo)識(shí)數(shù)據(jù)流中每個(gè)字節(jié)的唯一編號(hào),用于確保數(shù)據(jù)的有序傳輸。
初始值:在連接建立時(shí),序列號(hào)由發(fā)送方隨機(jī)生成。
變化規(guī)則:每發(fā)送一個(gè)數(shù)據(jù)段,序列號(hào)會(huì)增加該數(shù)據(jù)段的字節(jié)數(shù)。例如,發(fā)送100字節(jié)的數(shù)據(jù)后,序列號(hào)會(huì)增加100。
作用:解決網(wǎng)絡(luò)中數(shù)據(jù)包亂序問(wèn)題,確保接收方能夠按照正確順序重組數(shù)據(jù)。
確認(rèn)號(hào):
定義:確認(rèn)號(hào)表示接收方期望收到的下一個(gè)數(shù)據(jù)包的序列號(hào)。
變化規(guī)則:確認(rèn)號(hào)等于接收到的序列號(hào)加上數(shù)據(jù)段的長(zhǎng)度。如果接收到的是SYN或FIN報(bào)文,則確認(rèn)號(hào)加1。
作用:通知發(fā)送方哪些數(shù)據(jù)已經(jīng)被成功接收,解決丟包問(wèn)題。
確認(rèn)號(hào)和序列號(hào)機(jī)制是確保TCP數(shù)據(jù)傳輸數(shù)據(jù)可靠性的關(guān)鍵機(jī)制。
為什么要三次握手?
簡(jiǎn)單來(lái)講,三次握手是保證通信穩(wěn)定正確的最小開銷。
可以有一個(gè)很簡(jiǎn)單的對(duì)話例子:
? A — B:你聽得到我嗎?
? B — A:我聽得到,你能聽到我嗎?
? A — B:我也能聽到,我們可以開始正式交流了。
三次握手通過(guò)同步序列號(hào),確認(rèn)機(jī)制等等,確保了TCP連接的穩(wěn)定性和可靠性。
四次揮手過(guò)程
TCP的四次揮手是用于終止TCP連接的過(guò)程,確保雙方都能可靠地關(guān)閉連接。

1
第一次揮手
客戶端發(fā)送一個(gè)帶有FIN(Finish)標(biāo)志的報(bào)文段,表示客戶端不再發(fā)送數(shù)據(jù),但仍然可以接收數(shù)據(jù)。此時(shí)客戶端進(jìn)入FIN_WAIT_1狀態(tài)。< 客戶端說(shuō):“我講完了,先掛了”>
2
第二次揮手
服務(wù)器收到客戶端的FIN報(bào)文后,發(fā)送一個(gè)ACK(Acknowledgment)報(bào)文作為確認(rèn),確認(rèn)序號(hào)為收到的序號(hào)加1。此時(shí)服務(wù)器進(jìn)入CLOSE_WAIT狀態(tài),客戶端收到ACK后進(jìn)入FIN_WAIT_2狀態(tài)。< 服務(wù)器回應(yīng):“收到,我還在處理消息。”>
3
第三次揮手
服務(wù)器在完成數(shù)據(jù)發(fā)送后,向客戶端發(fā)送一個(gè)FIN報(bào)文,表示服務(wù)器也不再發(fā)送數(shù)據(jù)。此時(shí)服務(wù)器進(jìn)入LAST_ACK狀態(tài),等待客戶端的確認(rèn)。< 服務(wù)器處理完數(shù)據(jù)后說(shuō):“我也講完了。”>
4
第四次揮手
客戶端收到服務(wù)器的FIN報(bào)文后,發(fā)送一個(gè)ACK報(bào)文作為確認(rèn),確認(rèn)序號(hào)為收到的序號(hào)加1。此時(shí)客戶端進(jìn)入TIME_WAIT狀態(tài),等待2MSL(最大報(bào)文段生存時(shí)間)后進(jìn)入CLOSED狀態(tài)。服務(wù)器收到ACK后,立即進(jìn)入CLOSED狀態(tài)。< 客戶端確認(rèn):“好的,再見(jiàn)!”>
注:如果服務(wù)器沒(méi)有收到客戶端的ACK,會(huì)在2MSL后重傳FIN,客戶端在TIME_WAIT狀態(tài)可以重新發(fā)送ACK。2MSL的時(shí)間足以讓網(wǎng)絡(luò)中所有舊的重復(fù)報(bào)文段消失,防止它們干擾新的連接。
為什么需要四次揮手?
全雙工通信:TCP是全雙工的,每個(gè)方向都需要單獨(dú)關(guān)閉??蛻舳税l(fā)送FIN表示不再發(fā)送數(shù)據(jù),但服務(wù)器可能仍有數(shù)據(jù)要發(fā)送,因此需要服務(wù)器也發(fā)送FIN來(lái)確認(rèn)關(guān)閉。
可靠關(guān)閉:通過(guò)四次揮手,確保雙方都能確認(rèn)對(duì)方的關(guān)閉意圖,避免數(shù)據(jù)丟失或不完整。
億佰特串口服務(wù)器推薦

億佰特串口服務(wù)器產(chǎn)品涵蓋單串口服務(wù)器、多串口服務(wù)器、Wi-Fi串口服務(wù)器以及串口服務(wù)器模組等,可提供串口轉(zhuǎn)網(wǎng)絡(luò)功能,能夠?qū)⒋跀?shù)據(jù)轉(zhuǎn)換成TCP/IP協(xié)議數(shù)據(jù),實(shí)現(xiàn)串口與網(wǎng)絡(luò)的雙向透明傳輸。被廣泛應(yīng)用于考勤系統(tǒng)、機(jī)房監(jiān)控、電力監(jiān)控等場(chǎng)景。
-
數(shù)據(jù)傳輸
+關(guān)注
關(guān)注
9文章
1991瀏覽量
65434 -
TCP
+關(guān)注
關(guān)注
8文章
1395瀏覽量
80120 -
報(bào)文
+關(guān)注
關(guān)注
0文章
39瀏覽量
4132
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
講一講的TCP三次握手和四次揮手

TCP三次握手的過(guò)程描述
TCP/IP協(xié)議工作過(guò)程的三次握手和四次揮手
TCP三次握手過(guò)程及四次揮手過(guò)程說(shuō)明
TCP三次握手和四次揮手以及11種狀態(tài)資料下載

TCP三次握手和四次揮手過(guò)程中的異常情況
如何使用WireShark進(jìn)行TCP三次握手
TCP建立連接概述及三次握手、四次揮手的流程

用戀愛(ài)的方式解釋TCP的三次握手和四次揮手

評(píng)論