前言
本篇文章來講解一下TCP的狀態(tài)轉(zhuǎn)換關(guān)系,學(xué)習(xí)這個狀態(tài)轉(zhuǎn)換關(guān)系對于我們深入了解網(wǎng)絡(luò)編程是非常有必要的。
一、TCP狀態(tài)轉(zhuǎn)換圖
二、TCP連接狀態(tài)轉(zhuǎn)換解析
客戶端狀態(tài)轉(zhuǎn)換:
1.CLOSED -> SYN-SENT:當(dāng)客戶端嘗試與服務(wù)器建立連接時,客戶端從CLOSED狀態(tài)轉(zhuǎn)換到SYN-SEND狀態(tài)。此時客戶端發(fā)送SYN(同步)包,表示請求建立連接,并等待服務(wù)器的確認(rèn)。
2.當(dāng)服務(wù)器確認(rèn)后,發(fā)送SYN(同步)包和ACK(確認(rèn)包)給客戶端,客戶端依然保持SYN-SEND狀態(tài),當(dāng)客戶端接收確認(rèn)后會發(fā)送ACK(確認(rèn)包)給服務(wù)器。
3.服務(wù)器接收到ACK(確認(rèn)包)后就可以進(jìn)行數(shù)據(jù)的通信了。此時客戶端和服務(wù)器都進(jìn)入了ESTABLISHED狀態(tài)。
服務(wù)器狀態(tài)轉(zhuǎn)換:
1.CLOSED -> LISTEN:當(dāng)服務(wù)器開始監(jiān)聽傳入的連接請求時,服務(wù)器從CLOSED狀態(tài)轉(zhuǎn)換到LISTEN狀態(tài)。此時服務(wù)器準(zhǔn)備接收客戶端的連接請求。
2.LISTEN -> SYN-RECEIVED:當(dāng)服務(wù)器接收到客戶端的連接請求后,服務(wù)器從LISTEN狀態(tài)轉(zhuǎn)換到SYN-RECEIVED狀態(tài)。服務(wù)器發(fā)送確認(rèn)(ACK)包給客戶端,并等待客戶端確認(rèn)。
3.SYN-RECEIVED -> ESTABLISHED:當(dāng)服務(wù)器收到客戶端的確認(rèn)(ACK)后,服務(wù)器從SYN-RECEIVED狀態(tài)轉(zhuǎn)換到ESTABLISHED狀態(tài)。此時連接已經(jīng)建立,雙方可以開始進(jìn)行數(shù)據(jù)傳輸。
三、TCP斷開狀態(tài)轉(zhuǎn)換解析
客戶端狀態(tài)轉(zhuǎn)換:
1.ESTABLISHED -> FIN-WAIT-1:當(dāng)客戶端決定終止連接時,客戶端從ESTABLISHED狀態(tài)轉(zhuǎn)換到FIN-WAIT-1狀態(tài)??蛻舳税l(fā)送FIN(終止)包,表示請求終止連接,并等待服務(wù)器的確認(rèn)。
2.FIN-WAIT-1 -> FIN-WAIT-2:當(dāng)客戶端收到服務(wù)器的確認(rèn)(ACK)后,客戶端從FIN-WAIT-1狀態(tài)轉(zhuǎn)換到FIN-WAIT-2狀態(tài)。此時客戶端等待服務(wù)器發(fā)送確認(rèn)終止連接的請求。
3.FIN-WAIT-2 -> TIME-WAIT:當(dāng)客戶端收到服務(wù)器的確認(rèn)終止連接的請求后,客戶端從FIN-WAIT-2狀態(tài)轉(zhuǎn)換到TIME-WAIT狀態(tài)。此時客戶端進(jìn)入等待狀態(tài),等待一段時間后才進(jìn)入CLOSED狀態(tài)。
4.TIME-WAIT -> CLOSED:經(jīng)過一段時間的等待后,客戶端從TIME-WAIT狀態(tài)轉(zhuǎn)換到CLOSED狀態(tài),表示連接徹底關(guān)閉。
服務(wù)器狀態(tài)轉(zhuǎn)換:
1.ESTABLISHED -> CLOSE-WAIT:當(dāng)服務(wù)器決定終止連接時,服務(wù)器從ESTABLISHED狀態(tài)轉(zhuǎn)換到CLOSE-WAIT狀態(tài)。服務(wù)器發(fā)送FIN(終止)包給客戶端,并等待客戶端確認(rèn)。
2.CLOSE-WAIT -> LAST-ACK:當(dāng)服務(wù)器收到客戶端的確認(rèn)(ACK)后,服務(wù)器從CLOSE-WAIT狀態(tài)轉(zhuǎn)換到LAST-ACK狀態(tài)。此時服務(wù)器等待客戶端發(fā)送確認(rèn)終止連接的請求。
3.LAST-ACK -> CLOSED:當(dāng)服務(wù)器收到客戶端的確認(rèn)終止連接的請求后,服務(wù)器從LAST-ACK狀態(tài)轉(zhuǎn)換到CLOSED狀態(tài)。表示連接徹底關(guān)閉。
四、為什么需要有2MLS時長
2MSL(Maximum Segment Lifetime)是指TCP連接在關(guān)閉時,需要等待2倍的報文段最大存活時間,即兩倍的報文最長生存時間來回收相關(guān)資源。這是TCP協(xié)議中設(shè)定的一個等待時間,用于確保連接雙方都收到彼此的終止請求。
2MSL的存在是為了處理網(wǎng)絡(luò)上可能存在的延遲、重傳和亂序等問題,以確保連接的可靠關(guān)閉。在TCP連接關(guān)閉過程中,雙方會交換終止連接的請求和確認(rèn),以保證數(shù)據(jù)傳輸?shù)耐暾院驼_性。2MSL的設(shè)定時間可以確保在該時間段內(nèi),網(wǎng)絡(luò)中所有與這個連接相關(guān)的報文段都能夠被丟棄。
具體原因如下:
1.確保徹底關(guān)閉連接:2MSL的存在可以確??蛻舳撕头?wù)器都能收到對方的終止請求和確認(rèn),避免由于網(wǎng)絡(luò)上的延遲或亂序等問題導(dǎo)致連接沒有完全關(guān)閉。在2MSL的時間內(nèi),任何已失效的報文段都會被丟棄,從而確保連接徹底關(guān)閉。
2.確保舊連接不與新連接沖突:在TCP連接關(guān)閉后的一段時間內(nèi),可能會出現(xiàn)與之前關(guān)閉的連接相關(guān)的延遲報文段。如果新的連接使用了之前關(guān)閉連接時所用的端口號,這些延遲報文段可能會被錯誤地接收和處理。通過等待2MSL的時間,確保了舊連接中的所有報文段都已過期,不會與新的連接發(fā)生混淆。
3.防止延遲報文段對新連接的影響:在TCP連接關(guān)閉后,可能會出現(xiàn)延遲到達(dá)的報文段,這些報文段可能是在連接關(guān)閉前的最后一瞬間被發(fā)送出去的。如果新的連接使用的端口號與這些延遲報文段的源端口號沖突,可能導(dǎo)致報文段被誤認(rèn)為是新連接的一部分而產(chǎn)生錯誤。2MSL的等待時間可以確保所有延遲報文段都被丟棄,不會對新的連接產(chǎn)生干擾。文章來源:http://www.zghlxwxcb.cn/news/detail-723234.html
總結(jié)
本篇文章就講解到這里,這部分的知識需要大家好好理解和消化。文章來源地址http://www.zghlxwxcb.cn/news/detail-723234.html
到了這里,關(guān)于Linux網(wǎng)絡(luò)編程(TCP狀態(tài)轉(zhuǎn)換關(guān)系)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!