tcp協議的連線是全雙工連線,乙個tcp連線存在雙向的讀寫通道。
簡單說來是 「先關讀,後關寫」,一共需要四個階段。以客戶機發起關閉連線為例:
1.伺服器讀通道關閉
2.客戶機寫信道關閉
3.客戶機讀通道關閉
4.伺服器寫信道關閉
關閉行為是在發起方資料傳送完畢之後,給對方發出乙個fin(finish)資料段。直到接收到對方傳送的fin,且對方收到了接收確認ack之後,雙方的資料通訊完全結束,過程中每次接收都需要返回確認資料段ack。
詳細過程:
第一階段客戶機傳送完資料之後,向伺服器傳送乙個fin資料段,序列號為i;
1.伺服器收到fin(i)後,返回確認段ack,序列號為i+1,關閉伺服器讀通道;
2.客戶機收到ack(i+1)後,關閉客戶機寫信道;
(此時,客戶機仍能通過讀通道讀取伺服器的資料,伺服器仍能通過寫信道寫資料)
第二階段伺服器傳送完資料之後,向客戶機傳送乙個fin資料段,序列號為j;
3.客戶機收到fin(j)後,返回確認段ack,序列號為j+1,關閉客戶機讀通道;
4.伺服器收到ack(j+1)後,關閉伺服器寫信道。
這是標準的tcp關閉兩個階段,伺服器和客戶機都可以發起關閉,完全對稱。
fin標識是通過傳送最後一塊資料時設定的,標準的例子中,伺服器還在傳送資料,所以要等到傳送完的時候,設定fin(此時可稱為tcp連線處於半關閉狀態,因為資料仍可從被動關閉一方向主動關閉方傳送)。如果在伺服器收到fin(i)時,已經沒有資料需要傳送,可以在返回ack(i+1)的時候就設定fin(j)標識,這樣就相當於可以合併第二步和第三步。
TCP連線關閉過程筆記
前言 tcp協議的連線是全雙工連線,乙個tcp連線存在雙向的讀寫通道。簡單說來是 先關讀,後關寫 一共需要四個階段。以客戶機發起關閉連線為例 1.伺服器讀通道關閉 2.客戶機寫信道關閉 3.客戶機讀通道關閉 4.伺服器寫信道關閉 關閉行為是在發起方資料傳送完畢之後,給對方發出乙個fin finish...
TCP連線關閉總結
由於涉及面太廣,只作簡單整理,有興趣的可參考 unix networking programming volum 1,section 5.7,5.12,5.14,5.15,6.6 以及7.5 so linger選項。以乙個簡單的echo伺服器為例,客戶端從標準輸入讀入字元,傳送給伺服器,伺服器收到後...
TCP連線與關閉過程
在 tcp ip 協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線,如圖 1所示。1 第一次握手 建立連線時,客戶端a傳送 syn包 syn j 到伺服器 b,並進入 syn send 狀態,等待伺服器 b確認。2 第二次握手 伺服器b收到 syn包,必須確認客戶a的 syn ack ...