當終止協議的時候,tcp進行了4次握手,那這4次握手有是怎么回事呢?
由于Tcp連接是進行全雙工工作的,因此每個方向都必須單獨進行關閉,這個原則是當一方完成他的數據發送的時候就發送一個FIN來終止這個方向的連接,收到這個FIN意味著這個方向上沒有數據的流動,一個TCP連接在收到這個FIN之后還能發送消息,首先執行關閉的一方進行主動的關閉,而另一方進行被動的關閉 。1:TCP發送一個FIN,用來關閉客戶到服務端的連接 。2:服務端收到這個FIN,他發回一個ACK,確認收到序號為收到序號+1,和SYN一樣,一個FIN將占用一個序號 。3:服務端發送一個FIN到客戶端,服務端關閉客戶端的連接 。4:客戶端發送ACK報文確認,并將確認的序號+1,這樣關閉完成 。
那么為什么是4次揮手呢?可能有人會有疑問,tcp我握手的時候為何ACK和SYN是一起發送 。揮手的時候為什么是分開的時候發送呢,原因是TCP的全雙工模式,接收到FIN意味著沒有數據發送過來了,但是還可以繼承發送數據 。
3次握手過程的狀態:listener:這個很好理解,就是服務端的某個socket處于監聽狀態,可以接收連接了 。
syn_send:當某個socket執行connect的時候,首先發送SYN報文,因此也進入了SYN_SEND狀態,并等待服務端發送過來的報文,syn_send表示客戶端已發送SYN報文 。syn_rcvd:這個狀態與SYN_SEND狀態差不多,表示接收了SYN報文,這個狀態是服務器端的socket在建立tcp連接是的三次握手中的一個中間狀態,很短暫,當客戶端收到ACK報文的時候,表示連接確立,進入established狀態 。
【可信網站驗證 可信身份認證系統】4次揮手的狀態:FIN_WAIT_1: 這個狀態要好好解釋一下,其實FIN_WAIT_1和FIN_WAIT_2狀態的真正含義都是表示等待對方的FIN報文 。而這兩種狀態的區別是:FIN_WAIT_1狀態實際上是當SOCKET在ESTABLISHED狀態時,它想主動關閉連接,向對方發送了FIN報文,此時該SOCKET即進入到FIN_WAIT_1狀態 。而當對方回應ACK報文后,則進入到FIN_WAIT_2狀態,當然在實際的正常情況下,無論對方何種情況下,都應該立刻回應ACK報文,所以FIN_WAIT_1狀態一般是比較難見到的,而FIN_WAIT_2狀態還有時經常可以用netstat看到 。(主動方)
FIN_WAIT_2:上面已經具體解釋了這種狀態,實際上FIN_WAIT_2狀態下的SOCKET,表示半連接,也即有一方要求close連接,但另外還告訴對方,我暫時還有點數據需要傳送給你(ACK信息),稍后再關閉連接 。(主動方)
TIME_WAIT: 表示收到了對方的FIN報文,并發送出了ACK報文,就等2MSL后即可回到CLOSED可用狀態了 。假如FIN_WAIT_1狀態下,收到了對方同時帶FIN標志和ACK標志的報文時,可以直接進入到TIME_WAIT狀態,而無須經過FIN_WAIT_2狀態 。(主動方)
CLOSING(比較少見): 這種狀態比較特別,實際情況中應該是很少見,屬于一種比較罕見的例外狀態 。正常情況下,當你發送FIN報文后,按理來說是應該先收到(或同時收到)對方的ACK報文,再收到對方的FIN報文 。但是CLOSING狀態表示你發送FIN報文后,并沒有收到對方的ACK報文,反而卻也收到了對方的FIN報文 。什么情況下會出現此種情況呢?其實細想一下,也不難得出結論:那就是假如雙方幾乎在同時close一個SOCKET的話,那么就出現了雙方同時發送FIN報文的情況,也即會出現CLOSING狀態,表示雙方都正在關閉SOCKET連接 。
CLOSE_WAIT: 這種狀態的含義其實是表示在等待關閉 。怎么理解呢?當對方close一個SOCKET后發送FIN報文給自己,你系統毫無疑問地會回應一個ACK報文給對方,此時則進入到CLOSE_WAIT狀態 。接下來呢,實際上你真正需要考慮的事情是察看你是否還有數據發送給對方,假如沒有的話,那么你也就可以close這個SOCKET,發送FIN報文給對方,也即關閉連接 。所以你在CLOSE_WAIT狀態下,需要完成的事情是等待你去關閉連接 。(被動方)
- 想做個網站 怎樣做一個網站平臺
- 便宜的補水儀可信嗎
- 最好的網上購物網站:網上購物哪個平臺比較好?
- 櫻花動漫進不去,哪個網站可以免費看動漫?
- 在線免費觀看a:A站/B站大批電影被下架,還有什么好用的免費影視網站么?
- 頂級HIV約會網站 外國同性戀網站
- 買家電哪個網站好:要買電器,網上哪里最好?
- 買家電哪個網站好:為什么買家電都選京東和蘇寧,選天貓的比前兩者少很多?
- youtube官網為什么打不開,為什么國內沒有像YouTube一樣一家獨大的視頻網站?
- 虛擬短信,快速使用虛擬短信驗證碼接收平臺接收驗證碼方法?
