TCP狀態(tài)轉(zhuǎn)換分析https://www.bilibili.com/video/BV1iJ411S7UA?p=44&spm_id_from=pageDriver&vd_source=d239c7cf48aa4f74eccfa736c3122e65
TCP狀態(tài)轉(zhuǎn)換圖?
粗實(shí)線:主動(dòng)端
虛線:? ? 被動(dòng)端
細(xì)實(shí)線:內(nèi)核操作
?狀態(tài)分析
- CLOSED:表示初始狀態(tài)。
- LISTEN:該狀態(tài)表示服務(wù)器端的某個(gè)SOCKET處于監(jiān)聽(tīng)狀態(tài),可以接受連接。
- SYN_SENT:這個(gè)狀態(tài)與SYN_RCVD遙相呼應(yīng),當(dāng)客戶端SOCKET執(zhí)行CONNECT連接時(shí),它首先發(fā)送SYN報(bào)文,隨即進(jìn)入到了SYN_SENT狀態(tài),并等待服務(wù)端的發(fā)送三次握手中的第2個(gè)報(bào)文。SYN_SENT狀態(tài)表示客戶端已發(fā)送SYN報(bào)文。
- SYN_RCVD: 該狀態(tài)表示接收到SYN報(bào)文,在正常情況下,這個(gè)狀態(tài)是服務(wù)器端的SOCKET在建立TCP連接時(shí)的三次握手會(huì)話過(guò)程中的一個(gè)中間狀態(tài),很短暫。此種狀態(tài)時(shí),當(dāng)收到客戶端的ACK報(bào)文后,會(huì)進(jìn)入到ESTABLISHED狀態(tài)。
- ESTABLISHED:表示連接已經(jīng)建立。
- FIN_WAIT_1: ?FIN_WAIT_1和FIN_WAIT_2狀態(tài)的真正含義都是表示等待對(duì)方的FIN報(bào)文。區(qū)別是:FIN_WAIT_1狀態(tài)是當(dāng)socket在ESTABLISHED狀態(tài)時(shí),想主動(dòng)關(guān)閉連接,向?qū)Ψ桨l(fā)送了FIN報(bào)文,此時(shí)該socket進(jìn)入到FIN_WAIT_1狀態(tài)。FIN_WAIT_2狀態(tài)是當(dāng)對(duì)方回應(yīng)ACK后,該socket進(jìn)入到FIN_WAIT_2狀態(tài),正常情況下,對(duì)方應(yīng)馬上回應(yīng)ACK報(bào)文,所以FIN_WAIT_1狀態(tài)一般較難見(jiàn)到,而FIN_WAIT_2狀態(tài)可用netstat看到。
- FIN_WAIT_2:主動(dòng)關(guān)閉鏈接的一方,發(fā)出FIN收到ACK以后進(jìn)入該狀態(tài)。稱之為半連接或半關(guān)閉狀態(tài)。該狀態(tài)下的socket只能接收數(shù)據(jù),不能發(fā)。
- TIME_WAIT: 表示收到了對(duì)方的FIN報(bào)文,并發(fā)送出了ACK報(bào)文,等2MSL后即可回到CLOSED可用狀態(tài)。如果FIN_WAIT_1狀態(tài)下,收到對(duì)方同時(shí)帶 FIN標(biāo)志和ACK標(biāo)志的報(bào)文時(shí),可以直接進(jìn)入到TIME_WAIT狀態(tài),而無(wú)須經(jīng)過(guò)FIN_WAIT_2狀態(tài)。
- CLOSING: 這種狀態(tài)較特殊,屬于一種較罕見(jiàn)的狀態(tài)。正常情況下,當(dāng)你發(fā)送FIN報(bào)文后,按理來(lái)說(shuō)是應(yīng)該先收到(或同時(shí)收到)對(duì)方的 ACK報(bào)文,再收到對(duì)方的FIN報(bào)文。但是CLOSING狀態(tài)表示你發(fā)送FIN報(bào)文后,并沒(méi)有收到對(duì)方的ACK報(bào)文,反而卻也收到了對(duì)方的FIN報(bào)文。什么情況下會(huì)出現(xiàn)此種情況呢?如果雙方幾乎在同時(shí)close一個(gè)SOCKET的話,那么就出現(xiàn)了雙方同時(shí)發(fā)送FIN報(bào)文的情況,也即會(huì)出現(xiàn)CLOSING狀態(tài),表示雙方都正在關(guān)閉SOCKET連接。
- CLOSE_WAIT: 此種狀態(tài)表示在等待關(guān)閉。當(dāng)對(duì)方關(guān)閉一個(gè)SOCKET后發(fā)送FIN報(bào)文給自己,系統(tǒng)會(huì)回應(yīng)一個(gè)ACK報(bào)文給對(duì)方,此時(shí)則進(jìn)入到CLOSE_WAIT狀態(tài)。接下來(lái)呢,察看是否還有數(shù)據(jù)發(fā)送給對(duì)方,如果沒(méi)有可以 close這個(gè)SOCKET,發(fā)送FIN報(bào)文給對(duì)方,即關(guān)閉連接。所以在CLOSE_WAIT狀態(tài)下,需要關(guān)閉連接。
- LAST_ACK: 該狀態(tài)是被動(dòng)關(guān)閉一方在發(fā)送FIN報(bào)文后,最后等待對(duì)方的ACK報(bào)文。當(dāng)收到ACK報(bào)文后,即可以進(jìn)入到CLOSED可用狀態(tài)。
實(shí)驗(yàn)效果?
netstat -apn | grep clinet
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-429199.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-429199.html
到了這里,關(guān)于TCP協(xié)議二:TCP狀態(tài)轉(zhuǎn)換(重要)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!