日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

tcp四次挥手,为什么是四次?

發布時間:2024/7/23 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 tcp四次挥手,为什么是四次? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??上一篇博客說了三次握手為什么是是三次(點這里),那么現在就介紹一下四次揮手。大家都知道TCP是全雙工的,再建立連接時的三次握手中的SYN和ACK一起發送,這里就會有疑問,為什么在四次揮手的時候沒有將SYN和ACK一起發送呢?帶著這個問題繼續向下看,答案就在其中。
??說到四次揮手,顧名思義,就是在關閉連接的時候雙方一共要操作四次,來看一下這四次都是怎么操作的:

??從圖中可以看出來,在四次揮手的時候雙方一共進入了六種狀態,這六種狀態就是理解四次揮手的關鍵所在,我們來看一下

四次揮手的狀態

  • FIN_WAIT_1:這個狀態和FIN_WAIT_2狀態都在再等待對方的回復,但是這兩種狀態是有區別的,FIN_WAIT_1就是主動方在ESTABLISHED狀態的時候,想要主動關閉連接,向對方發送FIN報文,這時候就進入了FIN_WAIT_1狀態。當他收到對方回復的ACK報文后,就進入了FIN_WAIT_2狀態。 但是在實際操作中是很難遇到FIN_WAIT_1狀態的,因為無論對方是什么情況都應該立刻回應ACK報文,但是FIN_WAIT_2狀態還是可以在主動方中用netstat看到的。

  • FIN_WAIT_2:上面已經對FIN_WAIT_2講解過了,當主動方進入FIN_WAIT_2時,就表示著半連接狀態,也就是主動方還有數據要發給對方,這個數據就是之后的ACK,所有他要等一會兒才關閉連接。

  • CLOSE_WAIT:這個狀態從表面也可以看出它的作用,就是等待關閉。當被動方接收到FIN時,會立刻回復一個ACK給對方,接下來就是進入CLOSE_WAIT狀態。在這個狀態中,被動方需要考慮自己還有沒有數據要發送給對方,如果有可以繼續發送,如果沒有了就可以關閉連接了,發送一個FIN給對方。 這個狀態其實也就是給自己一個緩沖的時間,讓自己處理完需要處理的事,然后去關閉連接。

  • TIME_WAIT:這個狀態就是一段時間后進行一些操作。當主動方收到了對方發來的FIN報文,并發出ACK報文,接下來就等2MSL就可以進入CLOSED狀態了。其實,如果主動方在FIN_WAIT_1狀態下,收到了對方的FIN+ACK標志的報文,就可以跳過FIN_WAIT_2狀態直接進入TIME_WAIT狀態了。

  • LAST_ACK:這個狀態從表面不難不理解他的意思,這個狀態就是被動方發送了FIN報文后,最后等待對方的ACK報文,收到ACK報文后就可以進入CLOSED狀態了。

  • CLOSED:上面提到了幾次這個狀態,相比也猜出來了,這個狀態表示的就是連接中斷,已經關閉。

  • ??在上面的TIME_WAIT狀態中有提到過2MSL,那么什么是2MSL呢?那么來詳細說一下TIME_WAIT狀態和里面的2MSL。

    為什么需要TIME_WAIT?

    ??TIME_WAIT在四次揮手中有著不可替代的位置,如果沒有TIME-WAIT,主動方就會直接進入CLOSED狀態,(假設主動方時客戶端,被動方時服務端)這時候如果立即重啟客戶端使用相同的端口,如果因為網絡中種種原因最后一次ACK丟失了,服務端就會重復FIN請求,這時這個FIN就會被重新啟動的客戶端接收到,或者新啟動的客戶端向服務端發起請求的時候,因為服務端正在等待最后一次ACK,因此新連接請求發送的SYN就會被服務端認為時請求碼錯誤,服務端就會回復RET重置連接。所以就需要主動方發送最后一次ACK之后進入TIME_WAIT狀態,等待2MSL(兩個報文最大生命周期),等待這段時間就是為了如果接收到了重發的FIN請求能夠進行最后一次ACK回復,讓在網絡中延遲的FIN/ACK數據都消失在網絡中,不會對后續連接造成影響

    那么為什么TIME_WAIT的時間是2MSL呢?

    ??MSL是TCP報文的最大生命周期,因為TIME_WAIT持續在2MSL就可以保證在兩個傳輸方向上的尚未接收到或者遲到的報文段已經消失,否則服務器立即重啟,可能會收到來自上一個進程遲到的數據,但是這種數據很可能是錯誤的,同時也是在理論上保證最后一個報文可靠到達,假設最后一個ACK丟失,那么服務器會再重發一個FIN,這是雖然客戶端的進程不在了,但是TCP連接還在,仍然可以重發LAST_ACK。

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的tcp四次挥手,为什么是四次?的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。