tcp当主动发出syn_一文读懂TCP四次挥手工作原理及面试常见问题汇总
簡(jiǎn)述
本文主要介紹TCP四次揮手的工作原理,以及在面試中常見的問題。
字段含義
seq序號(hào):Sequence Number,占32位,用來標(biāo)識(shí)從TCP源端向目的端發(fā)送的字節(jié)流,發(fā)起方發(fā)送數(shù)據(jù)時(shí)對(duì)此進(jìn)行對(duì)比。
ack序號(hào):Acknowledge Number,占32位,只有ACK標(biāo)志位為1時(shí),確認(rèn)序號(hào)字段才有效,ack=seq+1。
Flags標(biāo)志位:
URG:Urgent Pointer緊急指針有效;
ACK:確認(rèn)序號(hào)有效;
PSH:接收方應(yīng)該盡快將這個(gè)報(bào)文交給應(yīng)用層;
RST:重置連接;
SYN:發(fā)起一個(gè)新連接;
FIN:釋放一個(gè)連接;
注意:標(biāo)志位ACK和ack序號(hào)是不同的概念。確認(rèn)方ack=發(fā)起方Seq+1,兩端配對(duì)。
四次揮手
四次揮手及釋放或解除TCP連接,連接的釋放必須是一方主動(dòng)釋放,另一方被動(dòng)釋放。流程如下:
圖 1 四次揮手原理圖
1) 第一次揮手,客戶端發(fā)出連接釋放syn包(FIN=1,seq=u)到服務(wù)器端,并且停止再發(fā)送數(shù)據(jù),主動(dòng)關(guān)閉連接,進(jìn)入FIN-WAIT-1狀態(tài),等待服務(wù)器端確認(rèn)。
2) 第二次揮手,服務(wù)器端收到客戶端發(fā)送的連接釋放syn包后,即發(fā)出確認(rèn)syn包(ACK=1,seq=v,ack=u+1)到客戶端,進(jìn)入CLOSE-WAIT狀態(tài),此時(shí)TCP處于半關(guān)閉狀態(tài)。客戶端收到服務(wù)器端確認(rèn)后,進(jìn)入FIN-WAIT-2狀態(tài),等待服務(wù)器端發(fā)出的連接釋放syn包。
3) 第三次揮手,當(dāng)服務(wù)器端數(shù)據(jù)傳送完畢后,服務(wù)器端發(fā)送連接釋放syn包(FIN=1,ACK=1,seq=w,ack=u+1),服務(wù)器端計(jì)入LAST-ACK狀態(tài),等待客戶端最后確認(rèn)。
4) 第四次揮手,當(dāng)客戶端收到服務(wù)器端連接釋放syn包后,客戶端發(fā)出確認(rèn)syn包(ACK=1,seq=u+1,ack=w+1),客戶端進(jìn)入TIME-WAIT狀態(tài)。此時(shí)TCP未釋放,需要經(jīng)過時(shí)間等待計(jì)時(shí)器設(shè)置的時(shí)間2MSL后,客戶端才進(jìn)入CLOSED狀態(tài)。
5) 服務(wù)器端只要收到客戶端發(fā)出的確認(rèn),立即進(jìn)入CLOSED狀態(tài),由此完成四次揮手。
常見面試題
問題1:為什么"握手"是三次,"揮手"卻要四次?
TCP建立連接時(shí)之所以只需要"三次握手",是因?yàn)樵诘诙?#34;握手"過程中,服務(wù)器端發(fā)送給客戶端的TCP報(bào)文是以SYN與ACK作為標(biāo)志位的。SYN是請(qǐng)求連接標(biāo)志,表示服務(wù)器端同意建立連接;ACK是確認(rèn)報(bào)文,表示告訴客戶端,服務(wù)器端收到了它的請(qǐng)求報(bào)文。即SYN建立連接報(bào)文與ACK確認(rèn)接收?qǐng)?bào)文是在同一次"握手"當(dāng)中傳輸?shù)?#xff0c;所以"三次握手"不多也不少,正好讓雙方明確彼此信息互通。
TCP釋放連接時(shí)之所以需要"四次揮手",是因?yàn)镕IN釋放連接報(bào)文與ACK確認(rèn)接收?qǐng)?bào)文是分別由第二次和第三次"握手"傳輸?shù)摹a尫胚B接時(shí),被動(dòng)方服務(wù)器,突然收到主動(dòng)方客戶端釋放連接的請(qǐng)求時(shí)并不能立即釋放連接,因?yàn)檫€有必要的數(shù)據(jù)需要處理,所以服務(wù)器先返回ACK確認(rèn)收到報(bào)文,經(jīng)過CLOSE-WAIT階段準(zhǔn)備好釋放連接之后,才能返回FIN釋放連接報(bào)文。
問題2:為什么客戶端在TIME-WAIT階段要等待2MSL?
客戶端發(fā)出最后的ACK確認(rèn)報(bào)文時(shí),并不能確定服務(wù)器端能夠收到該段報(bào)文。所以客戶端在發(fā)送完ACK確認(rèn)報(bào)文之后,會(huì)設(shè)置一個(gè)時(shí)長(zhǎng)為2MSL的計(jì)時(shí)器。MSL指的是Maximum Segment Lifetime:一段TCP報(bào)文在傳輸過程中的最大生命周期。2MSL即是服務(wù)器端發(fā)出為FIN報(bào)文和客戶端發(fā)出的ACK確認(rèn)報(bào)文所能保持有效的最大時(shí)長(zhǎng)。服務(wù)器端在1MSL內(nèi)沒有收到客戶端發(fā)出的ACK確認(rèn)報(bào)文,就會(huì)再次向客戶端發(fā)出FIN報(bào)文;如果客戶端在2MSL內(nèi),再次收到了來自服務(wù)器端的FIN報(bào)文,說明服務(wù)器端由于各種原因沒有接收到客戶端發(fā)出的ACK確認(rèn)報(bào)文。客戶端再次向服務(wù)器端發(fā)出ACK確認(rèn)報(bào)文,計(jì)時(shí)器重置,重新開始2MSL的計(jì)時(shí);否則客戶端在2MSL內(nèi)沒有再次收到來自服務(wù)器端的FIN報(bào)文,說明服務(wù)器端正常接收了ACK確認(rèn)報(bào)文,客戶端可以進(jìn)入CLOSED階段,完成"四次揮手"。
所以,客戶端要經(jīng)歷時(shí)長(zhǎng)為2SML的TIME-WAIT階段;這也是為什么客戶端比服務(wù)器端晚進(jìn)入CLOSED階段的原因。
ok,以上就是TCP四次揮手工作原理及面試常見問題匯總,看完記得轉(zhuǎn)發(fā)、點(diǎn)贊和收藏。如果有錯(cuò)誤,歡迎批評(píng)指正,感謝。
(云渺書齋)
總結(jié)
以上是生活随笔為你收集整理的tcp当主动发出syn_一文读懂TCP四次挥手工作原理及面试常见问题汇总的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 仓库移动_移动式仓库、检修作业平台、储油
- 下一篇: pytorch保存模型pth_Pytor