TCP三次握手是建立可靠網(wǎng)絡(luò)連接的關(guān)鍵過程,TCP三次握手用于確保通信雙方能夠正常發(fā)送和接收數(shù)據(jù),并提供可靠的數(shù)據(jù)傳輸機(jī)制。三次握手的主要目標(biāo)包括:
? 同步雙方的序列號。
? 確認(rèn)雙方的接收和發(fā)送能力
? 防止因?yàn)檫^期報(bào)文導(dǎo)致的誤連接
? 客戶端發(fā)送一個(gè)SYN(同步)請求報(bào)文,表示希望建立連接,并附帶初始序列號(Sequence Number)。
? 客戶端進(jìn)入SYN_SENT 狀態(tài),等待服務(wù)器的響應(yīng)。
? 服務(wù)器收到請求后,回復(fù)一個(gè)SYN+ACK(同步+確認(rèn))報(bào)文。
? ACK字段確認(rèn)客戶端的序列號,同時(shí)服務(wù)器生成自己的初始序列號。
? 服務(wù)器進(jìn)入SYN_RCVD 狀態(tài),等待客戶端的確認(rèn)。
? 客戶端收到服務(wù)器的確認(rèn)后,再發(fā)送一個(gè)ACK(確認(rèn))報(bào)文,確認(rèn)服務(wù)器的響應(yīng)。
? 客戶端進(jìn)入ESTABLISHED 狀態(tài),服務(wù)器也進(jìn)入 ESTABLISHED 狀態(tài),連接正式建立。
下面是tcp頭部的一個(gè)簡單介紹
上述流程中提到。
定義:序列號標(biāo)識數(shù)據(jù)流中每個(gè)字節(jié)的唯一編號,用于確保數(shù)據(jù)的有序傳輸。
初始值:在連接建立時(shí),序列號由發(fā)送方隨機(jī)生成。
變化規(guī)則:每發(fā)送一個(gè)數(shù)據(jù)段,序列號會增加該數(shù)據(jù)段的字節(jié)數(shù)。例如,發(fā)送100字節(jié)的數(shù)據(jù)后,序列號會增加100。
作用:解決網(wǎng)絡(luò)中數(shù)據(jù)包亂序問題,確保接收方能夠按照正確順序重組數(shù)據(jù)。
定義:確認(rèn)號表示接收方期望收到的下一個(gè)數(shù)據(jù)包的序列號。
變化規(guī)則:確認(rèn)號等于接收到的序列號加上數(shù)據(jù)段的長度。如果接收到的是SYN或FIN報(bào)文,則確認(rèn)號加1。
作用:通知發(fā)送方哪些數(shù)據(jù)已經(jīng)被成功接收,解決丟包問題。
確認(rèn)號和序列號機(jī)制是確保tcp數(shù)據(jù)傳輸數(shù)據(jù)可靠性的關(guān)鍵機(jī)制。
簡單來講,三次握手是保證通信穩(wěn)定正確的最小開銷。
可以有一個(gè)很簡單的對話例子
? A - B:你聽的到我嗎?
? B – A:我聽得到,你聽的到我嗎?
? A – B:我也聽的到,我們可以開始正式交流了
所以總的來說,三次握手通過同步序列號,確認(rèn)機(jī)制等等,確保了tcp連接的穩(wěn)定性和可靠性
今天的分享就到這里啦,EBYTE每一天都致力于更好的助力物聯(lián)化、智能化、自動(dòng)化的發(fā)展,提升資源利用率,更多以太網(wǎng)模組產(chǎn)品和無線通信技術(shù)資料,感興趣的小伙伴可以登錄我們的億佰特官網(wǎng)和企業(yè)公眾號(微信號:cdebyte)進(jìn)行了解,也可以直接撥打400電話咨詢技術(shù)專員!
相關(guān)閱讀:
1、TCP粘包怎么產(chǎn)生的以及TCP粘包問題解決方案
2、什么是TCP協(xié)議粘包以及如何解決TCP粘包問題