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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

图解TCP四次握手断开连接

發(fā)布時間:2025/3/12 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图解TCP四次握手断开连接 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

建立連接非常重要,它是數(shù)據(jù)正確傳輸?shù)那疤?#xff1b;斷開連接同樣重要,它讓計算機釋放不再使用的資源。如果連接不能正常斷開,不僅會造成數(shù)據(jù)傳輸錯誤,還會導(dǎo)致套接字不能關(guān)閉,持續(xù)占用資源,如果并發(fā)量高,服務(wù)器壓力堪憂。

建立連接需要三次握手,斷開連接需要四次握手,可以形象的比喻為下面的對話:

  • [Shake 1] 套接字A:“任務(wù)處理完畢,我希望斷開連接。”
  • [Shake 2] 套接字B:“哦,是嗎?請稍等,我準(zhǔn)備一下。”
  • 等待片刻后……
  • [Shake 3] 套接字B:“我準(zhǔn)備好了,可以斷開連接了。”
  • [Shake 4] 套接字A:“好的,謝謝合作。”


下圖演示了客戶端主動斷開連接的場景:


建立連接后,客戶端和服務(wù)器都處于ESTABLISED狀態(tài)。這時,客戶端發(fā)起斷開連接的請求:
1) 客戶端調(diào)用 close() 函數(shù)后,向服務(wù)器發(fā)送 FIN 數(shù)據(jù)包,進入FIN_WAIT_1狀態(tài)。FIN 是 Finish 的縮寫,表示完成任務(wù)需要斷開連接。

2) 服務(wù)器收到數(shù)據(jù)包后,檢測到設(shè)置了 FIN 標(biāo)志位,知道要斷開連接,于是向客戶端發(fā)送“確認(rèn)包”,進入CLOSE_WAIT狀態(tài)。

注意:服務(wù)器收到請求后并不是立即斷開連接,而是先向客戶端發(fā)送“確認(rèn)包”,告訴它我知道了,我需要準(zhǔn)備一下才能斷開連接。

3) 客戶端收到“確認(rèn)包”后進入FIN_WAIT_2狀態(tài),等待服務(wù)器準(zhǔn)備完畢后再次發(fā)送數(shù)據(jù)包。

4) 等待片刻后,服務(wù)器準(zhǔn)備完畢,可以斷開連接,于是再主動向客戶端發(fā)送 FIN 包,告訴它我準(zhǔn)備好了,斷開連接吧。然后進入LAST_ACK狀態(tài)。

5) 客戶端收到服務(wù)器的 FIN 包后,再向服務(wù)器發(fā)送 ACK 包,告訴它你斷開連接吧。然后進入TIME_WAIT狀態(tài)。

6) 服務(wù)器收到客戶端的 ACK 包后,就斷開連接,關(guān)閉套接字,進入CLOSED狀態(tài)。

關(guān)于 TIME_WAIT 狀態(tài)的說明

客戶端最后一次發(fā)送 ACK包后進入 TIME_WAIT 狀態(tài),而不是直接進入 CLOSED 狀態(tài)關(guān)閉連接,這是為什么呢?

TCP 是面向連接的傳輸方式,必須保證數(shù)據(jù)能夠正確到達(dá)目標(biāo)機器,不能丟失或出錯,而網(wǎng)絡(luò)是不穩(wěn)定的,隨時可能會毀壞數(shù)據(jù),所以機器A每次向機器B發(fā)送數(shù)據(jù)包后,都要求機器B”確認(rèn)“,回傳ACK包,告訴機器A我收到了,這樣機器A才能知道數(shù)據(jù)傳送成功了。如果機器B沒有回傳ACK包,機器A會重新發(fā)送,直到機器B回傳ACK包。

客戶端最后一次向服務(wù)器回傳ACK包時,有可能會因為網(wǎng)絡(luò)問題導(dǎo)致服務(wù)器收不到,服務(wù)器會再次發(fā)送 FIN 包,如果這時客戶端完全關(guān)閉了連接,那么服務(wù)器無論如何也收不到ACK包了,所以客戶端需要等待片刻、確認(rèn)對方收到ACK包后才能進入CLOSED狀態(tài)。那么,要等待多久呢?

數(shù)據(jù)包在網(wǎng)絡(luò)中是有生存時間的,超過這個時間還未到達(dá)目標(biāo)主機就會被丟棄,并通知源主機。這稱為報文最大生存時間(MSL,Maximum Segment Lifetime)。TIME_WAIT 要等待 2MSL 才會進入 CLOSED 狀態(tài)。ACK 包到達(dá)服務(wù)器需要 MSL 時間,服務(wù)器重傳 FIN 包也需要 MSL 時間,2MSL 是數(shù)據(jù)包往返的最大時間,如果 2MSL 后還未收到服務(wù)器重傳的 FIN 包,就說明服務(wù)器已經(jīng)收到了 ACK 包。

總結(jié)

以上是生活随笔為你收集整理的图解TCP四次握手断开连接的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。