TCP的連線與終止

2021-07-12 07:40:16 字數 1900 閱讀 6439

(一、)三次握手:

(1)伺服器必須準備好接受外來的連線。這通常通過呼叫socket、bind和listen這三個函式來完成,我們稱之為被動開啟。

(2)客戶端通過呼叫connect發起主動開啟。這導致客戶tcp傳送乙個syn(同步)位元組,它告訴伺服器客戶將在(待建立)連線傳送的資料的初始序列號。通常syn分節不攜帶資料,其所在的ip資料報只含有乙個ip首部、乙個tcp首部及可能有的tcp選項。

(3)伺服器必須確認(ack)客戶syn,同時自己也得傳送乙個syn 分節,它含有伺服器將在同一連線中傳送的資料的初始序列號。伺服器在單個分節中傳送syn和對客戶syn的ack確認。

(4)客戶必須確認伺服器的syn。

(二.)tcp連線終止:

tcp建立乙個連線需3個分節,終止乙個連線則需要4個分節。

(1)某個應用程序首先呼叫close,我們稱該端執行主動關閉。該端的tcp於是傳送乙個fin分節,表示資料傳送完畢。

(2)接收到這個fin的對端執行被動關閉。這個fin由tcp確認。它的接收也作為乙個檔案的結束符傳遞給接收端應用程序(放在已排隊等侯該應用程序接收的任何其他資料之後),因為fin的接收意味著接收端應用程序在相應連線上再無額外的資料可接收。

(3)一段時間後,接收到這個檔案結束符的應用程序將呼叫close關閉它的套接字。這導致的tcp也傳送乙個fin。

(4)接收這個最終fin的原傳送端tcp(即執行主動關閉的那一端)確認這個fin。

很多人會問,為什麼建鏈結要3次握手,斷鏈結需要4次揮手?

對於建鏈結的3次握手,主要是要初始化sequence number 的初始值。通訊的雙方要互相通知對方自己的初始化的sequence number(縮寫為isn:inital sequence number)——所以叫syn,全稱synchronize sequence numbers。也就上圖中的 x 和 y。這個號要作為以後的資料通訊的序號,以保證應用層接收到的資料不會因為網路上的傳輸的問題而亂序(tcp會用這個序號來拼接資料)。

對於4次揮手,其實你仔細看是2次,因為tcp是全雙工的,所以,傳送方和接收方都需要fin和ack。只不過,有一方是被動的,所以看上去就成了所謂的4次揮手。如果兩邊同時斷連線,那就會就進入到closing狀態,然後到達time_wait狀態。

(三.)tcp狀態轉換圖:

time_wait狀態存在的兩個理由:

(1)可靠的實現tcp全雙工連線的終止

(2)允許老的重複分節在網路中消逝

1)time_wait確保有足夠的時間讓對端收到了ack,如果被動關閉的那方沒有收到ack,就會觸發被動端重發fin,一來一去正好2個msl,2)有足夠的時間讓這個連線不會跟後面的連線混在一起(你要知道,有些自做主張的路由器會快取ip資料報,如果連線被重用了,那麼這些延遲收到的包就有可能會跟新連線混在一起)。

TCP的連線與終止

t c p將使用者資料打包構成報文段 它傳送資料後啟動乙個定時器 另一端對收到的資料進行確認,對失序的資料重新排序,丟棄重複資料 t c p提供端到端的流量控制,並計算和驗證乙個強制性的端到端檢驗和。導致兩個進入established狀態的變遷對應開啟乙個連線,而兩個導致從established狀態...

TCP的連線與終止

tcp的連線與終止 1.tcp報頭 t c p將使用者資料打包構成報文段 它傳送資料後啟動乙個定時器 另一端對收到的資料進行確認,對失序的資料重新排序,丟棄重複資料 t c p提供端到端的流量控制,並計算和驗證乙個強制性的端到端檢驗和。2.tcp連線的建立與終止 3.tcp的狀態變遷 導致兩個進入e...

TCP連線建立與終止

目錄 tcptcp連線建立 三次握手 tcp連線終止 四次揮手 tcp的狀態變遷圖 tcp是乙個全雙工的 面向連線的 可靠地傳輸協議,所以無論哪一方向另一方傳送資料之前,都需要先在兩者之間建立乙個連線 基於全雙工通訊所以存在tcp的半關閉狀態,也就是說斷開連線必須是雙方都關閉,否則就說這種狀態為半關...