建立乙個連線需要三次握手,而終止乙個連線需要四次揮手。這是由tcp的半關閉造成的。既然乙個tcp連線是全雙工(資料能在兩個方向上同時傳遞),因此每個方向必須單獨的進行關閉。現在我們介紹tcp的四次揮手釋放連線的過程,整體示意圖如下所示:
1. 某個應用程式首先呼叫close,我們稱這一端執行主動關閉。這一端的tcp於是傳送乙個fin m分節,表示資料傳送完畢;
2. 另一端接收到fin m分節之後,執行被動關閉,對這個fin m進行確認(發回乙個ack m+1)。他的接收也作為檔案結束符傳遞給接收端應用程序,因為fin的接收意味著應用程式在相應的連線上再也接收不到額外的資料;
3. 一段時間之後,接收到這個檔案結束符的應用程序呼叫close關閉他的套介面,這導致他的tcp也傳送乙個fin;
4. 接收到這個fin的元傳送端tcp(即執行主動關閉的那一端)對他進行確認。
這樣每個方向上都有乙個fin和ack,所以一共需要四個分節。我們使用限定詞「一般」是因為有時候步驟1的fin隨資料一起傳送;另外,執行被動關閉那一端的tcp在步驟2與3發出的ack與fin也可以合併成乙個分節。
tcp關閉時,每一端都要傳送乙個fin。這種情況除了在應用程序呼叫close時會發生,還會在程序終止時發生。程序終止包括自願(呼叫exit或從main函式返回)、不自願(程序收到乙個終止本程序的訊號)的情況,程序終止時所有開啟的tcp連線上都會發出乙個fin。
上圖中是客戶端執行主動關閉,而不管是客戶還是伺服器都可以執行主動關閉。通常情況下是客戶執行主動關閉,但某些協議如http則是伺服器執行主動關閉。
TCP的四次揮手(TCP的連線釋放)
通訊的雙方都可以啟動釋放連線,即客戶或者伺服器哪一方都可以啟動釋放連線假設客戶的應用程序主動啟動釋放連線,客戶的應用程序先向其tcp發出釋放連線報文段,並停止傳送資料,主動關閉tcp連線 第一步 客戶給伺服器傳送報文 客戶把連線釋放報文段的首部的fin 1,其序號seq u,等待b的確認第二步 伺服...
TCP釋放連線的四次揮手過程
tcp斷開連線的過程 tcp四次揮手。資料傳輸結束後,通訊的雙方都可釋放連線。現在a和b都處於established狀態。a的應用程序先向tcp發出連線釋放報文段,主動關閉tcp連線。a把連線釋放報文段的首部的終止控制位fin置為1,序號seq u,它等於前面已傳送過的資料的最後乙個位元組的序號加1...
TCP的連線釋放 四報文握手(四次揮手)
首先也先了解幾個概念 終止位fin finis,意為 完 終 用來釋放乙個連線。當fin 1時,表明此報文段的傳送方的資料已經傳送完畢,並要求釋放傳輸連線。時間msl maximum segment lifetime 最長報文段壽命,rfc793建議為2分鐘。但對於現在的網路msl 2分鐘可能太大,...