tcp四次揮手。
資料傳輸結束後,通訊的雙方都可釋放連線。現在a和b都處於established狀態。a的應用程式先向tcp發出連線釋放報文段,主動關閉tcp連線。a把連線釋放報文段的首部fin置為1,序號seq=u,它等於前面已傳送過的資料的最後乙個位元組的序號加1。這時a進入fin-wait-1狀態,等待b的確認。
b收到連線釋放報文段後即發出確認,確認號是ack=u+1,而這個報文段自己的序號是v,等於b前面已傳送過的資料的最後乙個位元組的序號加1。然後b就進入close-wait狀態。tcp伺服器程序這時通知高層應用程序,因為從a到b這個方向的連線釋放了,這時的tcp連線處於半關閉狀態,即a已經沒有資料要傳送了,但b若傳送資料,a仍要接受。也就是說,從b到a這個方向的連線並未關閉。這個狀態可以會持續一些時間。
a收到b的確認後,就進入fin-wait-2狀態,等待b發出的連線釋放報文段。
若b已經沒有要向a傳送的資料,其應用程序就通知tcp釋放連線。這時b發出的連線釋放報文段必須使用fin=1。現假定b的序號為w(在半關閉狀態b可能又傳送了一些資料)。b還必須重複上次已傳送過的確認號ack=u+1。這是b就進入last-ack狀態,等待a的確認。
在a收到b的連線釋放報文段後,必須對此發出確認。在確認報文段中把ack置為1,確認號ack=w+1,而自己的序號是seq=u+1(前面的fin報文消耗了1個序號)。然後進入time-wait狀態。請注意,現在tcp連線還沒釋放掉。必須再經過2msl後,a才進入到closed狀態。msl叫最長報文段壽命,一般為2分鐘。
當b收到a發出的確認,就進入closed狀態。由此可見b結束tcp連線的時間要比a早一些。等到2msl結束後a也進入closed狀態,至此完成了tcp四次揮手斷開連線全過程。
TCP斷開連線四次揮手詳解
首先來一張最經典的四次揮手示意圖 四次揮手即終止tcp連線,就是指斷開乙個tcp連線時,需要客戶端和服務端總共傳送4個包以確認連線的斷開。在socket程式設計中,這一過程由客戶端或服務端任一方執行close socket來觸發。由於tcp連線是全雙工的,因此,每個方向都必須要單獨進行關閉,這一原則...
tcp斷開連線四次揮手
tcp斷開連線是經歷了四次揮手的過程 1 客戶端主動斷開連線向服務端傳送 請求標誌位 fin 連線序號 seq 2 服務端收到請求後向客戶端傳送 確認請求標誌位 ack 確認連線序號 ack 3 服務端還會向客戶端傳送 請求標誌位 fin 連線序號 seq 4 客戶端在收到服務端資料後想服務端傳送 ...
TCP斷開連線的四次揮手
之前學習了tcp建立連線的三次握手,現在來學習一下tcp斷開連線的四次揮手。簡單描述一下tcp斷開連線的原理。下面是我自己的理解圖。這裡是比較官方的圖。重點說一下各個狀態把 msl就是maximum segment lifetime 最大分節生命期 這是乙個ip資料報能在網際網路上生存的最長時間,超...