TCP的3次握手和4次揮手

2021-08-02 22:30:48 字數 2192 閱讀 9169

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

host2的tcp伺服器程序優先建立傳輸控制塊tcb,準備接受客戶程序的連線請求,然後將自己的狀態有colsed改為listen(收聽)狀態,等待客戶的連線請求;host1的tcp客戶程序也是建立傳輸控制塊tcb,然後向b發出連線請求報文段,這是首部中的同部位syn=1,這是host1的tcp客戶程序進入syn_sent(同步已傳送)狀態。

host2收到連線請求報文段後,如同意連線,則向host1傳送確認。在確認報文中把syn位和ack位都置1,這時host2的tcp伺服器程序進入syn_rcvd(同步收到)狀態。

host1收到host2的確認後,還要向host2給出確認。確認報文段的ack置1,這時,tcp連線已經建立,host1進入established(已建立連線)狀態。 當host2收到host1的確認後,也進入 established狀態。

host1的應用程序向其tcp傳送連線釋放報文段,並停止傳送資料,主動關閉tcp連線,這時host1進入fin_wait_1(終止等待1)狀態,等待b的確認。

host2收到連線釋放報文段後即發出確認,然後host2就進入close_wait(關閉等待)狀態,tcp伺服器程序這時通知高層應用程序,因此host1到host2這個方向的連線就釋放了,這時的tcp連線處於半關閉狀態,即host1已經沒有資料要傳送了,但是host2若傳送資料,host1任然要接受,也就是說,從host2到host1這個方向的連線並未關閉,這個狀態還要持續一些時間;當host1收到來自host2的確認後,就進入fin_wait_2(終止等待2)狀態,等待host2發出的連線釋放報文段。

若host2已經沒有要向host1傳送的資料,其應用程序就通知tco釋放連線,這時host2發出的連線為fin=1,這時host2就進入了last_ack(最後確認)狀態,等待a的確認。

host1在收到host2的連線釋放報文段後,必須對此發出確認,在報文段中把ack置1,然後進入time_wait(時間等待)狀態。現在tcp連線環沒有釋放掉,必須經過時間等待計時器設定的時間2msl(最長報文段壽命)後,host1才能進入到closed狀態,當host1撤銷相應的傳輸控制塊tcb後,就結束這次的tcp連線。

先假設兩次握手可以,當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,就可以使本鏈結持續的時間內所產生的所有報文段都從網路中消失。這樣就可以使下乙個新的連線中不會出現舊的連線請求報文段。

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

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

TCP 3次握手和4次揮手

3次握手 3次握手指的是tcp 建立連線 階段 1.client service syn sequence number a 2.client service syn ack sequence number b acknowledge number a 1 3.client service ack ...

詳解TCP的3次握手和4次揮手

每當建立乙個tcp ip連線的時候都要經歷3次握手,這是為了保證建立乙個可靠的連線。上圖中的三次揮手說的是,客戶端向伺服器發請求,伺服器接收請求,伺服器接收請求之後傳送乙個連線標誌,客戶端接收連線標誌之後也向伺服器傳送乙個連線標誌,至此連線完成。用打 模擬的話就是 小明撥打小紅的 小紅按下通話鍵並說...