TCP的三次握手與四次分手

2022-07-13 06:03:10 字數 2333 閱讀 2343

tcp的位置

tcp工作在網路osi的七層模型中的第四層——transport層,ip在第三層——network層,arp在第二層——data link層;

在第二層上的資料,我們把它叫frame,在第三層上的資料叫packet,第四層的資料叫segment。

資料從應用層發下來,會在每一層都會加上頭部資訊,進行封裝,然後再傳送到資料接收端。這個基本的流程你需要知道,就是每個資料都會經過資料的封裝和解封裝的過程。 在osi七層模型中,每一層的作用和對應的協議如下:

3次握手

第一次握手:主機a傳送位碼為syn=1,隨機產生seq number=x的資料報到伺服器,客戶端進入syn_send狀態,等待伺服器的確認;主機b由syn=1知道,a要求建立聯機;

第二次握手:主機b收到請求後要確認聯機資訊,向a傳送ack number(主機a的seq+1),syn=1,ack=1,隨機產生seq=y的包,此時伺服器進入syn_recv狀態;

第三次握手:主機a收到後檢查ack number是否正確,即第一次傳送的seq number+1,以及位碼ack是否為1,若正確,主機a會再傳送ack number(主機b的seq+1),ack=1,主機b收到後確認seq值與ack=1則連線建立成功。客戶端和伺服器端都進入established

態,完成tcp三次握手。

tcp位碼,有6種標示:syn(synchronous建立聯機) ack(acknowledgement 確認) psh(push傳送) fin(finish結束) rst(reset重置) urg(urgent緊急)

sequence number(順序號碼) acknowledge number(確認號碼)

4次揮手

第一次揮手:主機1(可以使客戶端,也可以是伺服器端),設定sequence numberacknowledgment number,向主機2傳送乙個fin報文段;此時,主機1進入fin_wait_1狀態;這表示主機1沒有資料要傳送給主機2了;

第二次揮手:主機2收到了主機1傳送的fin報文段,向主機1回乙個ack報文段,acknowledgment numbersequence number加1;主機1進入fin_wait_2狀態;主機2告訴主機1,我也沒有資料要傳送了,可以進行關閉連線了;

第三次揮手:主機2向主機1傳送fin報文段,請求關閉連線,同時主機2進入close_wait狀態;

第四次揮手:主機1收到主機2傳送的fin報文段,向主機2傳送ack報文段,然後主機1進入time_wait狀態;主機2收到主機1的ack報文段以後,就關閉連線;此時,主機1等待2msl後依然沒有收到回覆,則證明server端已正常關閉,那好,主機1也可以關閉連線了。

問題

1.為什麼time_wait狀態需要經過2msl(最大報文段生存時間)才能返回到close狀態?

雖然按道理,四個報文都傳送完畢,我們可以直接進入close狀態了,但是我們必須假象網路是不可靠的,有可以最後乙個ack丟失。所以time_wait狀態就是用來重發可能丟失的ack報文。

2.client傳送完最後乙個ack之後,進入time_wait狀態,但是他怎麼知道server有沒有收到這個ack呢?莫非sever也要等待一段時間,如果收到了這個ack就close,如果沒有收到就再發乙個fin給client?這麼說server最後也有乙個time_wait哦?求解答!

因為網路原因,主動關閉的一方傳送的這個ack包很可能延遲,從而觸發被動連線一方重傳fin包。極端情況下,這一去一回,就是兩倍的msl時長。如果主動關閉的一方跳過time_wait直接進入closed,或者在time_wait停留的時長不足兩倍的msl,那麼當被動

關閉的一方早先發出的延遲包到達後,就可能出現類似下面的問題:1.舊的tcp連線已經不存在了,系統此時只能返回rst包2.新的tcp連線被建立起來了,延遲包可能干擾新的連線,這就是為什麼time_wait需要等待2msl時長的原因。

果凍想:

TCP三次握手與四次分手

ack 此標誌表示應答域有效,就是說前面所說的tcp應答號將會包含在tcp資料報中 有兩個取值 0和1,為1的時候表示應答域有效,反之為0 syn 表示同步序號,用來建立連線。syn標誌位和ack標誌位搭配使用,當連線請求的時候,syn 1,ack 0 連線被響應的時候,syn 1,ack 1 這個...

TCP三次握手與四次分手

三次握手 解釋 客戶端a和伺服器b剛開始處於closed狀態,兩者之間沒有任何聯絡,a主動開啟,b被動開啟由 closed進入listen狀態,這是a傳送乙個syn 1的標誌位的資料報,並且資料的序列為seq x,a也由closed進入syn sent狀態,b接收到a的請求,也主動 傳送syn 1的...

tcp三次握手與四次分手

三次握手a主機請求b主機 a主機 先發 syn 1 seq a 給b主機 a主機進入syn sent狀態 b主機收到後傳送 syn 1 ack 1 seq b ack a 1 給a主機 b主機此時伺服器進入syn recv狀態 a主機收到後傳送ack 1 seq a 1 ack b 1 給b主機 客...