TCP協(xié)議(Transmission Control Protocol,傳輸控制協(xié)議)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層協(xié)議。
TCP協(xié)議不僅確保數(shù)據(jù)的完整性,還設(shè)計(jì)了一套完整的連接管理機(jī)制:
? 三次握手(建立連接);
? 四次揮手(斷開連接)。
其中,TCP協(xié)議四次揮手是TCP連接斷開時(shí)的關(guān)鍵步驟,確保雙方都能正確釋放源,避免數(shù)據(jù)丟失或連接異常終止。
TCP是全雙工通信,意味著數(shù)據(jù)可以同時(shí)在兩個(gè)方向傳輸。因此,連接的斷開不僅需要客戶端通知服務(wù)器自己不再發(fā)送數(shù)據(jù),還需要服務(wù)器通知客戶端自己也不再發(fā)送數(shù)據(jù)。這就導(dǎo)致了四次揮手的過(guò)程,而不是簡(jiǎn)單的三次握手。
客戶端發(fā)送FIN(終止請(qǐng)求):客戶端發(fā)送一個(gè)FIN(Finish)報(bào)文,表示自己不再發(fā)送數(shù)據(jù),進(jìn)入FIN-WAIT-1狀態(tài)。此時(shí),客戶端仍然可以接收數(shù)據(jù),但不會(huì)再主動(dòng)發(fā)送數(shù)據(jù)。
服務(wù)器回復(fù)ACK(確認(rèn)):服務(wù)器收到FIN后,發(fā)送一個(gè)ACK(Acknowledgment)報(bào)文,確認(rèn)收到客戶端的終止請(qǐng)求,進(jìn)入CLOSE-WAIT狀態(tài)。此時(shí),服務(wù)器仍然可以繼續(xù)發(fā)送數(shù)據(jù)。
服務(wù)器發(fā)送FIN(終止請(qǐng)求):服務(wù)器在完成數(shù)據(jù)傳輸后,發(fā)送FIN報(bào)文,表示自己也不再發(fā)送數(shù)據(jù),進(jìn)入LAST-ACK狀態(tài)。
客戶端回復(fù)ACK(確認(rèn)):客戶端收到服務(wù)器的FIN 后,發(fā)送ACK報(bào)文,確認(rèn)收到服務(wù)器的終止請(qǐng)求,進(jìn)入TIME-WAIT狀態(tài)。此時(shí),客戶端會(huì)等待一段時(shí)間(通常是2MSL,即最大報(bào)文生存時(shí)間的兩倍),確保服務(wù)器收到ACK 后才徹底關(guān)閉連接。
? TIME-WAIT狀態(tài)的存在是為了確保最后一個(gè)ACK能夠被服務(wù)器正確接收,防止舊的TCP報(bào)文影響新的連接。通常,TIME-WAIT狀態(tài)會(huì)持續(xù)2MSL(最大報(bào)文生存時(shí)間),以確保所有可能的延遲數(shù)據(jù)包都被清除。
? TIME-WAIT還可以防止已失效的連接請(qǐng)求報(bào)文段影響新的連接。如果客戶端在發(fā)送完最后一個(gè)ACK后立即釋放連接,那么可能會(huì)導(dǎo)致服務(wù)器的FIN報(bào)文丟失,進(jìn)而影響新的連接建立。
下圖為完整流程的展示
簡(jiǎn)單的來(lái)講,基于TCP穩(wěn)定的通信,在連接斷開時(shí)不僅要終止數(shù)據(jù)的發(fā)送,還要確保對(duì)方的數(shù)據(jù)已經(jīng)完全接收。同時(shí)tcp是全雙工通信,所以每個(gè)通道都需要單獨(dú)關(guān)閉,這導(dǎo)致請(qǐng)求回復(fù)的機(jī)制需要重復(fù)兩遍,也就是4次是這個(gè)確認(rèn)機(jī)制的最小步驟。
總的來(lái)說(shuō),三次握手是建立可靠連接,而四次揮手則是為了保證數(shù)據(jù)傳輸?shù)耐暾?/strong>性。但是在實(shí)際的應(yīng)用中如高并發(fā)服務(wù)器環(huán)境中:
? TIME-WAIT狀態(tài)可能會(huì)導(dǎo)致大量端口占用,影響服務(wù)器性能。為了解決這個(gè)問(wèn)題,許多系統(tǒng)會(huì)采用TCP連接復(fù)用或縮短TIME-WAIT時(shí)間 的方式來(lái)優(yōu)化連接釋放過(guò)程。
? 某些系統(tǒng)在socket選項(xiàng)中也提供了SO_REUSEADDR選項(xiàng),允許新的連接在TIME-WAIT狀態(tài)下復(fù)用舊的端口,從而提高服務(wù)器的并發(fā)能力。
今天的分享就到這里啦,EBYTE每一天都致力于更好的助力物聯(lián)化、智能化、自動(dòng)化的發(fā)展,提升資源利用率,更多以太網(wǎng)模組產(chǎn)品和無(wú)線通信技術(shù)資料,感興趣的小伙伴可以登錄我們的億佰特官網(wǎng)和企業(yè)公眾號(hào)(微信號(hào):cdebyte)進(jìn)行了解,也可以直接撥打400電話咨詢技術(shù)專員!
相關(guān)閱讀:
1、TCP粘包怎么產(chǎn)生的以及TCP粘包問(wèn)題解決方案
2、什么是TCP協(xié)議粘包以及如何解決TCP粘包問(wèn)題
7 X 24 銷售服務(wù)熱線
4000-330-990深圳辦事處柯經(jīng)理:18218726658 無(wú)錫辦事處劉經(jīng)理:13558641933
成都總部銷售經(jīng)理:
秦 科(無(wú)線模塊):18884314654 馮子恒(無(wú)線模塊):18828049434
蔡友銀(無(wú)線模塊):13882211021 葛宇龍(通信設(shè)備):19138800613
胡兵(外貿(mào)銷售經(jīng)理):18584911141、 sales06@ebyte.com
業(yè)務(wù)郵箱:support@cdebyte.com 全國(guó)銷售投訴電話:19934352316
地址:四川省成都市高新西區(qū)西區(qū)大道199號(hào)B5棟(前臺(tái)座機(jī):028-61543675)
?? 成都億佰特電子科技有限公司【版權(quán)所有】 蜀ICP備13019384號(hào)