tcp協議三次握手 四次揮手

2021-08-14 15:07:27 字數 2055 閱讀 4583

起初,伺服器和客戶端都為closed狀態。在通訊開始前,雙方都得建立各自的傳輸控制塊(tcb)。

伺服器建立完tcb後遍進入listen狀態,此時準備接收客戶端發來的連線請求。

第一次握手

客戶端向服務端傳送連線請求報文段。該報文段的頭部中syn=1,ack=0,seq=x。請求傳送後,客戶端便進入syn-sent狀態。

第二次握手

服務端收到連線請求報文段後,如果同意連線,則會傳送乙個應答:syn=1,ack=1,seq=y,ack=x+1。

該應答傳送完成後便進入syn-rcvd狀態。

第三次握手

當客戶端收到連線同意的應答後,還要向服務端傳送乙個確認報文段,表示:服務端發來的連線同意應答已經成功收到。

該報文段的頭部為:ack=1,seq=x+1,ack=y+1。

客戶端發完這個報文段後便進入established狀態,服務端收到這個應答後也進入established狀態,此時連線的建立完成!

為什麼連線建立需要三次握手,而不是兩次握手?

防止失效的連線請求報文段被服務端接收,從而產生錯誤。

若建立連線只需兩次握手,客戶端並沒有太大的變化,仍然需要獲得服務端的應答後才進入established狀態,而服務端在收到連線請求後就進入established狀態。此時如果網路擁塞,客戶端傳送的連線請求遲遲到不了服務端,客戶端便超時重發請求,如果服務端正確接收並確認應答,雙方便開始通訊,通訊結束後釋放連線。此時,如果那個失效的連線請求抵達了服務端,由於只有兩次握手,服務端收到請求就會進入established狀態,等待傳送資料或主動傳送資料。但此時的客戶端早已進入closed狀態,服務端將會一直等待下去,這樣浪費服務端連線資源。

我們知道,tcp連線是雙向的,因此在四次揮手中,前兩次揮手用於斷開乙個方向的連線,後兩次揮手用於斷開另一方向的連線。

第一次揮手

若a認為資料傳送完成,則它需要向b傳送連線釋放請求。該請求只有報文頭,頭中攜帶的主要引數為:

fin=1,seq=u。此時,a將進入fin-wait-1狀態。

第二次揮手

b收到連線釋放請求後,會通知相應的應用程式,告訴它a向b這個方向的連線已經釋放。此時b進入close-wait狀態,並向a傳送連線釋放的應答,其報文頭包含:

ack=1,seq=v,ack=u+1。

a收到該應答,進入fin-wait-2狀態,等待b傳送連線釋放請求。

第二次揮手完成後,a到b方向的連線已經釋放,b不會再接收資料,a也不會再傳送資料。但b到a方向的連線仍然存在,b可以繼續向a傳送資料。

第三次揮手

當b向a發完所有資料後,向a傳送連線釋放請求,請求頭:fin=1,ack=1,seq=w,ack=u+1。b便進入last-ack狀態。

第四次揮手

a收到釋放請求後,向b傳送確認應答,此時a進入time-wait狀態。該狀態會持續2msl時間,若該時間段內沒有b的重發請求的話,就進入closed狀態,撤銷tcb。當b收到確認應答後,也便進入closed狀態,撤銷tcb。

為什麼a要先進入time-wait狀態,等待2msl時間後才進入closed狀態?

為了保證b能收到a的確認應答。

若a發完確認應答後直接進入closed狀態,那麼如果該應答丟失,b等待超時後就會重新傳送連線釋放請求,但此時a已經關閉了,不會作出任何響應,因此b永遠無法正常關閉。

TCP協議三次握手四次揮手

1.什麼是tcp協議 tcp協議是作用在傳輸層的傳輸控制協議 tcp 提供一種面向連線的 可靠的位元組流服務 在乙個 tcp 連線中,僅有兩方進行彼此通訊。廣播和多播不能用於 tcp tcp 使用校驗和,確認和重傳機制來保證可靠傳輸 tcp 給資料分節進行排序,並使用累積確認保證資料的順序不變和非重...

TCP協議三次握手四次揮手

tcp有哪些過程?a.建立連線 b.資料傳輸 c.終止連線 tcp三次握手和四次揮手的過程?syn,ack是什麼?syn 請求建立連線 含有同步序列號的標誌位的資料,tcp建立連線時,將這個 位 置1 ack 針對syn的確認應答 fin是什麼?fin 傳送端完成傳送任務 位 當tcp完成資料傳輸需...

TCP協議三次握手,四次揮手

乙個tcp連線的建立是通過三次握手來實現的 假如伺服器b和客戶機a通訊。當a要和b通訊時,首先a先向b傳送乙個syn標記的包,seq x為這個包的序列號 x一般為1 以此為這個包進行乙個標識,a告訴b請求建立連線。注意 乙個syn包就是僅syn標記設為1的tcp包,只有當b受都a發來的syn包,才可...