電腦網路概述 傳輸層 三向交握和四次揮手

來源:互聯網
上載者:User

標籤:ext   bubuko   逾時   失效   請求   產生   list   時間   ali   

 三向交握

TCP協議中,主動發起請求的一端稱為『用戶端』,被動串連的一端稱為『服務端』。不管是用戶端還是服務端,TCP串連建立完後都能發送和接收資料。

起初,伺服器和用戶端都為CLOSED狀態。在通訊開始前,雙方都得建立各自的傳輸控制塊(TCB)。
伺服器建立完TCB後遍進入LISTEN狀態,此時準備接收用戶端發來的串連請求。

第一次握手
用戶端向服務端發送串連請求報文段。該報文段的頭部中SYN=1,ACK=0,seq=x。請求發送後,用戶端便進入SYN-SENT狀態。

PS1:SYN=1,ACK=0表示該報文段為串連請求報文。
PS2:x為本次TCP通訊的位元組流的初始序號。
TCP規定:SYN=1的報文段不能有資料部分,但要消耗掉一個序號。
第二次握手
服務端收到串連請求報文段後,如果同意串連,則會發送一個應答:SYN=1,ACK=1,seq=y,ack=x+1。
該應答發送完成後便進入SYN-RCVD狀態。

PS1:SYN=1,ACK=1表示該報文段為串連同意的應答報文。
PS2:seq=y表示服務端作為寄件者時,發送位元組流的初始序號。
PS3:ack=x+1表示服務端希望下一個資料報發送序號從x+1開始的位元組。
第三向交握
當用戶端收到串連同意的應答後,還要向服務端發送一個確認報文段,表示:服務端發來的串連同意應答已經成功收到。
該報文段的頭部為:ACK=1,seq=x+1,ack=y+1。
用戶端發完這個報文段後便進入ESTABLISHED狀態,服務端收到這個應答後也進入ESTABLISHED狀態,此時串連的建立完成!

為什麼串連建立需要三向交握,而不是兩次握手?
防止失效的串連請求報文段被服務端接收,從而產生錯誤。

PS:失效的串連請求:若用戶端向服務端發送的串連請求丟失,用戶端等待應答逾時後就會再次發送串連請求,此時,上一個串連請求就是『失效的』。

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

四次揮手

TCP串連的釋放一共需要四步,因此稱為『四次揮手』。
我們知道,TCP串連是雙向的,因此在四次揮手中,前兩次揮手用於斷開一個方向的串連,後兩次揮手用於斷開另一方向的串連。

第一次揮手
若A認為資料發送完成,則它需要向B發送串連釋放請求。該請求只有報文頭,頭中攜帶的主要參數為:
FIN=1,seq=u。此時,A將進入FIN-WAIT-1狀態。

PS1:FIN=1表示該報文段是一個串連釋放請求。
PS2:seq=u,u-1是A向B發送的最後一個位元組的序號。
第二次揮手
B收到串連釋放請求後,會通知相應的應用程式,告訴它A向B這個方向的串連已經釋放。此時B進入CLOSE-WAIT狀態,並向A發送串連釋放的應答,其報文頭包含:
ACK=1,seq=v,ack=u+1。

PS1:ACK=1:除TCP串連請求報文段以外,TCP通訊過程中所有資料報的ACK都為1,表示應答。
PS2:seq=v,v-1是B向A發送的最後一個位元組的序號。
PS3:ack=u+1表示希望收到從第u+1個位元組開始的報文段,並且已經成功接收了前u個位元組。
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永遠無法正常關閉。

電腦網路概述 傳輸層 三向交握和四次揮手

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.