TCP的3次握手與4次揮手

2021-08-02 19:46:24 字數 1330 閱讀 3732

三次握手建立連線:如上圖(黑框)所示,在最初兩端的tcp程序都處於closed狀態。host1主動開啟連線,而host2被動開啟連線

四次揮手取消連線:如上圖中藍色框的所示,在資料傳輸完畢後,host1和host2都處於established狀態,每個伺服器都能發出釋放鏈結的訊號,我們在這以host1釋放連線為例

先假設兩次握手可以,當host1向host2傳送syn請求,host2收到請求後,傳送ack和syn給host1,此時兩次握手結束,現在是host1成功連線到host2,但是host2連到host1的時候,並沒有得到ack訊號,所以,當host2給host1傳送資料的時候,就可能出現host1接受到資料了但是,host2並不知道,host2可能就會不停的按照超時重傳來處理,這樣就會是網路效率降低。

因為一些網路原因,已經失效的連線請求報文段(上一次的連線請求),而host1並沒有像host2發出連線請求,但是host2確收到了乙個連線請求,host2就會進入乙個收發資料的狀態(基於兩次握手),造成資源的浪費,

這時因為服務端的listen狀態下的socket當收到報文的建立連線請求後,它可以吧ack和syn(ack起應答作用,syn起同步作用)放在乙個報文中來傳送。但關閉連線的時候,當收到對方的fin報文通知時,它僅僅表示對方沒有資料傳送給你了;但未必你所有的資料都傳送給對方了,所以你可能未必會馬上關閉socket,也即你可能還需要傳送一些資料給對方後,在傳送fin報文給對方來標識你同意現在可以關閉連線了,所以他這裡的ack報文和fin報文多數情況下都是分開傳送的。

為了保證host1傳送的最後乙個ack報文段能夠到達host2。這個ack報文段有可能對視,因而使處在last_ack狀態的host2收不到對已傳送的fin+ack報文段的確認。host2就會超時重傳這個fin+ack報文段,而host1就能在2msl時間內收到這個重傳的fin+ack報文段。接著host1重傳一次確認,重新啟動2msl計時器。最後,host1和host2都正常進入懂啊closed狀態。如果host1在time_wait狀態不等待一段時間,而是在傳送完ack報文段後立即釋放連線,那麼久無法收到host2重傳的fin+ack報文段,因而也不會再傳送一次確認報文段。這樣,host2就無法按照正常步驟進入closed狀態。

在兩次握手中出現的「已失效的連線請求報文段」出現在本鏈結中,host1在傳送完最後乙個ack報文段後,在經過時間2msl,就可以使本鏈結持續的時間內所產生的所有報文段都從網路中消失。這樣就可以使下乙個新的連線中不會出現舊的連線請求報文段。

TCP3次握手與4次揮手

3次握手過程狀態 listen 這個也是非常容易理解的乙個狀態,表示伺服器端的某個socket處於監聽狀態,可以接受連線了。syn sent 當客戶端socket執行connect連線時,它首先傳送syn報文,因此也隨即它會進入到了syn sent狀態,並等待服務端的傳送三次握手中的第2個報文。sy...

TCP的3次握手和4次揮手

三次握手建立連線 如上圖 黑框 所示,在最初兩端的tcp程序都處於closed狀態。host1主動開啟連線,而host2被動開啟連線。host2的tcp伺服器程序優先建立傳輸控制塊tcb,準備接受客戶程序的連線請求,然後將自己的狀態有colsed改為listen 收聽 狀態,等待客戶的連線請求 ho...

TCP協議3次握手和4次揮手

一 tcp通訊過程 tcp是tcp ip體系中面對連線的傳輸層協議,採用多種機制來確保資料的可靠性。其中為了確保tcp成功連線和斷開,tcp採用了一種三次握手和四次揮手的機制。過程如下所示 三次握手成功後,成功建立連線,然後開始傳輸資料資訊,最後斷開連線。這是tcp傳輸的步驟!二 tcp三次握手 t...