當(dāng)終止協(xié)議的時候,tcp進(jìn)行了4次握手,那這4次握手有是怎么回事呢?
由于Tcp連接是進(jìn)行全雙工工作的,因此每個方向都必須單獨(dú)進(jìn)行關(guān)閉,這個原則是當(dāng)一方完成他的數(shù)據(jù)發(fā)送的時候就發(fā)送一個FIN來終止這個方向的連接,收到這個FIN意味著這個方向上沒有數(shù)據(jù)的流動,一個TCP連接在收到這個FIN之后還能發(fā)送消息,首先執(zhí)行關(guān)閉的一方進(jìn)行主動的關(guān)閉,而另一方進(jìn)行被動的關(guān)閉 。
1:TCP發(fā)送一個FIN,用來關(guān)閉客戶到服務(wù)端的連接 。
2:服務(wù)端收到這個FIN,他發(fā)回一個ACK,確認(rèn)收到序號為收到序號+1,和SYN一樣,一個FIN將占用一個序號 。
3:服務(wù)端發(fā)送一個FIN到客戶端,服務(wù)端關(guān)閉客戶端的連接 。
4:客戶端發(fā)送ACK報文確認(rèn),并將確認(rèn)的序號+1,這樣關(guān)閉完成 。
那么為什么是4次揮手呢?
可能有人會有疑問,tcp我握手的時候?yàn)楹蜛CK和SYN是一起發(fā)送 。揮手的時候?yàn)槭裁词欠珠_的時候發(fā)送呢,原因是TCP的全雙工模式,接收到FIN意味著沒有數(shù)據(jù)發(fā)送過來了,但是還可以繼續(xù)發(fā)送數(shù)據(jù) 。
3次握手過程的狀態(tài):
listener:這個很好理解,就是服務(wù)端的某個socket處于監(jiān)聽狀態(tài),可以接收連接了 。
syn_send:當(dāng)某個socket執(zhí)行connect的時候,首先發(fā)送SYN報文,因此也進(jìn)入了SYN_SEND狀態(tài),并等待服務(wù)端發(fā)送過來的報文,syn_send表示客戶端已發(fā)送SYN報文 。
syn_rcvd:這個狀態(tài)與SYN_SEND狀態(tài)差不多,表示接收了SYN報文,這個狀態(tài)是服務(wù)器端的socket在建立tcp連接是的三次握手中的一個中間狀態(tài),很短暫,當(dāng)客戶端收到ACK報文的時候,表示連接確立,進(jìn)入established狀態(tài) 。
4次揮手的狀態(tài):
FIN_WAIT_1: 這個狀態(tài)要好好解釋一下,其實(shí)FIN_WAIT_1和FIN_WAIT_2狀態(tài)的真正含義都是表示等待對方的FIN報文 。而這兩種狀態(tài)的區(qū)別是:FIN_WAIT_1狀態(tài)實(shí)際上是當(dāng)SOCKET在ESTABLISHED狀態(tài)時,它想主動關(guān)閉連接,向?qū)Ψ桨l(fā)送了FIN報文,此時該SOCKET即進(jìn)入到FIN_WAIT_1狀態(tài) 。而當(dāng)對方回應(yīng)ACK報文后,則進(jìn)入到FIN_WAIT_2狀態(tài),當(dāng)然在實(shí)際的正常情況下,無論對方何種情況下,都應(yīng)該馬上回應(yīng)ACK報文,所以FIN_WAIT_1狀態(tài)一般是比較難見到的,而FIN_WAIT_2狀態(tài)還有時常常可以用netstat看到 。(主動方)
FIN_WAIT_2:上面已經(jīng)詳細(xì)解釋了這種狀態(tài),實(shí)際上FIN_WAIT_2狀態(tài)下的SOCKET,表示半連接,也即有一方要求close連接,但另外還告訴對方,我暫時還有點(diǎn)數(shù)據(jù)需要傳送給你(ACK信息),稍后再關(guān)閉連接 。(主動方)
TIME_WAIT: 表示收到了對方的FIN報文,并發(fā)送出了ACK報文,就等2MSL后即可回到CLOSED可用狀態(tài)了 。如果FIN_WAIT_1狀態(tài)下,收到了對方同時帶FIN標(biāo)志和ACK標(biāo)志的報文時,可以直接進(jìn)入到TIME_WAIT狀態(tài),而無須經(jīng)過FIN_WAIT_2狀態(tài) 。(主動方)
CLOSING(比較少見): 這種狀態(tài)比較特殊,實(shí)際情況中應(yīng)該是很少見,屬于一種比較罕見的例外狀態(tài) 。正常情況下,當(dāng)你發(fā)送FIN報文后,按理來說是應(yīng)該先收到(或同時收到)對方的ACK報文,再收到對方的FIN報文 。但是CLOSING狀態(tài)表示你發(fā)送FIN報文后,并沒有收到對方的ACK報文,反而卻也收到了對方的FIN報文 。什么情況下會出現(xiàn)此種情況呢?其實(shí)細(xì)想一下,也不難得出結(jié)論:那就是如果雙方幾乎在同時close一個SOCKET的話,那么就出現(xiàn)了雙方同時發(fā)送FIN報文的情況,也即會出現(xiàn)CLOSING狀態(tài),表示雙方都正在關(guān)閉SOCKET連接 。
CLOSE_WAIT: 這種狀態(tài)的含義其實(shí)是表示在等待關(guān)閉 。怎么理解呢?當(dāng)對方close一個SOCKET后發(fā)送FIN報文給自己,你系統(tǒng)毫無疑問地會回應(yīng)一個ACK報文給對方,此時則進(jìn)入到CLOSE_WAIT狀態(tài) 。接下來呢,實(shí)際上你真正需要考慮的事情是察看你是否還有數(shù)據(jù)發(fā)送給對方,如果沒有的話,那么你也就可以close這個
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時就醫(yī)或請專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助:- 想做個網(wǎng)站 怎樣做一個網(wǎng)站平臺
- 龍蝦批發(fā)價格網(wǎng)站_馬王堆龍蝦今日價格表
- 三步教免費(fèi)搭建個人網(wǎng)站 wap自助建站怎么設(shè)置
- seo關(guān)鍵詞優(yōu)化軟件,網(wǎng)站關(guān)鍵詞優(yōu)化軟件
- 網(wǎng)上哪個網(wǎng)站藥店靠譜?
- 鏈家二手房 - 找房買房上什么網(wǎng)站好
- 值得推薦的6個免費(fèi)網(wǎng)站 免費(fèi)的設(shè)計素材網(wǎng)站哪個好
- 拼多多800漏洞一秒提現(xiàn)可信嗎 拼多多800bug提現(xiàn)技巧
- 迪奧是哪個國家的牌子_迪奧官網(wǎng)中國官方網(wǎng)站
- 情侶網(wǎng)名可愛超萌高甜萌系一對情侶網(wǎng)名 情侶網(wǎng)站
