tcp斷開連線為什麼是4次揮手

2021-08-21 09:36:50 字數 1925 閱讀 2124

這是乙個系列故事,沒有讀過上篇的不妨看看《tcp建立連線為什麼是3次握手?》

面試官:說說tcp四次揮手的過程
酋長從宮中回來不久,國王就頒布了新的tcp協議法案,這次修正版的tcp協議執行的很好,舉國上下一片喜悅

經過上次的聊天後,司馬和上官成為了好朋友,今天,司馬又給上官發訊息了,但是這次,兩人建立連線後,同時給對方傳送了乙個報文「在嗎?」,導致過了一會,司馬和上官都收到對方的「在嗎?」如下圖:

在聊天完後,好學的司馬又去請教酋長去了,酋長說,tcp是允許你們同時給對方發訊息的,這種特性有乙個專業名字叫做「全雙工」,「哦,原來是這樣」,「司馬恍然大悟。原來tcp裡面的門道挺多」,下來得好好學習學習,司馬心中暗自說道

司馬又找好哥們上官聊天了,與往常一樣,建立連線,聊完天後,斷開連線。這次司馬特別有心,用了乙個小本子記錄下這次tcp斷開連線的過程。

① 剛開始,司馬發了乙個「連線釋放報文段」表示自己不再傳送聊天訊息了

② 然後上官接到這個「連線釋放報文段」後給司馬發出乙個「確認報文段」,表示自己收到了

這時候,司馬到上官方向的連線斷了,即:司馬沒有訊息給上官發了,但是上官到司馬這個方向的連線還沒有斷,所以上官還可以給司馬傳送訊息,他可能還有些話沒說完。如下圖:

③ 1>上官這時候如果沒有啥訊息給司馬發了,那他也會傳送乙個「連線釋放報文段」給司馬,表明他想斷開連線(上官到司馬方向的連線)

2>上官這時候如果還有訊息想給司馬發,那就按照往常一樣把訊息從他這邊發給司馬(因為從上官到司馬這個方向的連線還沒有斷),等到傳送完成後,然後再傳送」連線釋放報文段

④ 司馬收到這個報文後,也會給上官傳送乙個」確認報文段「以表明自己自己收到這個報文

⑤ 但是這個時候司馬還不能撒手不管,他還需等待一段時間才可以進入到「closed」(關閉)狀態,表明自己的這次連線已經關閉了。可以接受下次連線了。

⑥ 當上官收司馬的確認後,自己也進入「closed」狀態

完整的tcp四次揮手如下圖:

司馬下來看了看小本子,心中產生了乙個疑惑,為什麼我最後一次給上官傳送確認,我還需要等一段時間,我不想等這麼長時間,多麻煩。

他找酋長去訴苦去了,酋長說:「你等待這麼長時間是有非常有必要的,你想啊,咱們tcp是不是規定了發出去的「請求報文(可能是請求連線,也有可能是請求關閉)」需要得到對方的確認,如果超過一定時間得不到確認會進行超時重傳

如果說你給上官傳送的那個確認如果在中途丟失了,上官遲遲等不到你的確認,他肯定會執行超時重傳給你重新發乙個請求關閉連線的報文的,如果你不等待這麼長時間而直接進入關閉狀態,是不是就接收不到這個重傳的報文了?那上官是不是就收不到你的確認,進而上官就不能正常關閉了?如下圖:

所以說,你在等的這段時間,其實是要確保你的確認讓對方收到,如果對方超時重傳乙個連線釋放報文段,這個時候你還沒有關閉,那你就可以重新發乙個確認給他呀」

「哦,原來是這樣呀」,司馬心中的怨氣立馬就消失了。

從此計算機帝國走向了網際網路的時代

tcp斷開的4次揮手

由於tcp連 接是全雙工的,因此每個方向都必須單獨進行關閉。這原則是當一方完成它的資料傳送任務後就能傳送乙個fin來終止這個方向的連線。收到乙個 fin只意味著這一方向上沒有資料流動,乙個tcp連線在收到乙個fin後仍能傳送資料。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。1 tcp客 ...

tcp斷開連線四次揮手

tcp斷開連線是經歷了四次揮手的過程 1 客戶端主動斷開連線向服務端傳送 請求標誌位 fin 連線序號 seq 2 服務端收到請求後向客戶端傳送 確認請求標誌位 ack 確認連線序號 ack 3 服務端還會向客戶端傳送 請求標誌位 fin 連線序號 seq 4 客戶端在收到服務端資料後想服務端傳送 ...

TCP斷開連線的四次揮手

之前學習了tcp建立連線的三次握手,現在來學習一下tcp斷開連線的四次揮手。簡單描述一下tcp斷開連線的原理。下面是我自己的理解圖。這裡是比較官方的圖。重點說一下各個狀態把 msl就是maximum segment lifetime 最大分節生命期 這是乙個ip資料報能在網際網路上生存的最長時間,超...