TCP 四次揮手是為了關(guān)閉鏈接,TCP 連接是全雙工的,因此每個(gè)方向都必須單獨(dú)關(guān)閉,雙方都可以主動(dòng)關(guān)閉鏈接,首先發(fā)起關(guān)閉的一方執(zhí)行主動(dòng)關(guān)閉,而另一方執(zhí)行被動(dòng)關(guān)閉,關(guān)閉之后主機(jī)的資源將被釋放。
四次揮手的過(guò)程如下:
第一次揮手:客戶端發(fā)送一個(gè) FIN=1,sep=u 的報(bào)文告訴服務(wù)器它打算關(guān)閉連接,不再發(fā)送數(shù)據(jù),但可以接收數(shù)據(jù),報(bào)文發(fā)出之后客戶端將連接的狀態(tài)變?yōu)?FIN_WAIT_1第二次揮手:服務(wù)端接收到客戶端的 FIN 報(bào)文之后,返回一個(gè) ACK=1,sep=v,ACKnum=u+1 的應(yīng)答報(bào)文,接著服務(wù)端進(jìn)入 CLOSE_WAIT 狀態(tài)??蛻舳私邮盏椒?wù)端的 ACK 應(yīng)答報(bào)文后進(jìn)入 FIN_WAIT_2 狀態(tài)第三次揮手:服務(wù)器處理完數(shù)據(jù)之后,向客戶端發(fā)送 FIN 報(bào)文,表明它不再發(fā)送數(shù)據(jù),接著服務(wù)端進(jìn)入 LAST_ACK 狀態(tài)。第四次揮手:客戶端接收到 FIN 報(bào)文后,向服務(wù)端發(fā)送 ACK 應(yīng)答報(bào)文,接著客戶端進(jìn)入 TIME_WAIT 狀態(tài),等待 2MSL 一段時(shí)間后客戶端自動(dòng)進(jìn)入 CLOSED 狀態(tài),服務(wù)器收到 ACK 應(yīng)答報(bào)文后進(jìn)入 CLOSED 狀態(tài)。
為什么揮手需要四次?
TCP 連接是全雙工的,雙方可以同時(shí)發(fā)送和接收數(shù)據(jù)。第一次客戶端發(fā)送 FIN 報(bào)文后只表示它不再發(fā)送數(shù)據(jù),但還是能接受數(shù)據(jù)。服務(wù)端接收到 FIN 報(bào)文,回一個(gè) ACK 應(yīng)答報(bào)文,這次服務(wù)端可以還有數(shù)據(jù)需要處理和發(fā)送,等它處理完成,發(fā)送一個(gè) FIN 報(bào)文表示不再發(fā)送數(shù)據(jù),客戶端再回一個(gè) ACK 應(yīng)答報(bào)文。由于服務(wù)端處理數(shù)據(jù)需要時(shí)間,因此服務(wù)端的 ACK 和 FIN 報(bào)文是發(fā)送的,所以需要四次揮手。
TCP 四次揮手可以變成三次揮手嗎?
如果被動(dòng)關(guān)閉方?jīng)]有數(shù)據(jù)需要發(fā)送,并且開(kāi)啟了TCP 延遲確認(rèn)機(jī)制,那么第二次和第三次揮手就會(huì)合并傳輸,四次揮手變成三次揮手。
為什么主動(dòng)關(guān)閉方需要等待 2MSL 后才關(guān)閉連接
MSL 是報(bào)文的最大生存時(shí)間,它是任何報(bào)文在網(wǎng)絡(luò)上存在的最大時(shí)間,超過(guò)這個(gè)時(shí)間報(bào)文將丟失。如果第四次揮手的 ACK 報(bào)文丟失,被動(dòng)關(guān)閉方將重發(fā) FIN 報(bào)文,主動(dòng)關(guān)閉方的 TIME_WAIT 時(shí)間為 2MSL 表示允許第四次揮手的 ACK 報(bào)文丟失一次
為什么主動(dòng)關(guān)閉方需要 TIME_WAIT 狀態(tài)
防止歷史連接中的數(shù)據(jù)被后續(xù)相同四元組連接錯(cuò)誤的接收:TIME_WAIT 設(shè)置成 2MSL 可以保證兩個(gè)方向上發(fā)送的數(shù)據(jù)都能被丟失。
確保被動(dòng)關(guān)閉方能正常關(guān)閉。
四元組指的是:目的地址、目的端口、源地址和源端口。通過(guò)四元組可以唯一確定一個(gè)連接。
-
服務(wù)器
+關(guān)注
關(guān)注
12文章
8701瀏覽量
84568 -
TCP
+關(guān)注
關(guān)注
8文章
1324瀏覽量
78759 -
端口
+關(guān)注
關(guān)注
4文章
916瀏覽量
31862
原文標(biāo)題:TCP 四次揮手過(guò)程分析
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論