<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          TCP 為什么是三次握手,而不是2次或4次?

          共 2107字,需瀏覽 5分鐘

           ·

          2022-04-12 05:07


          1

          三次握手

          2

          兩次握手(情況1)

          3

          兩次握手(情況2)


          OK,下面正經(jīng)地來回答下這個問題,要搞清楚這個問題,首先得了解TCP究竟是如何保證可靠傳輸?shù)摹?/span>


          PS:TCP協(xié)議中,主動發(fā)起請求的一端稱為『客戶端』,被動連接的一端稱為『服務端』。不管是客戶端還是服務端,TCP連接建立完后都能發(fā)送和接收數(shù)據(jù)。

          起初,服務器和客戶端都為CLOSED狀態(tài)。在通信開始前,雙方都得創(chuàng)建各自的傳輸控制塊(TCB)。服務器創(chuàng)建完TCB后便進入LISTEN狀態(tài),此時準備接收客戶端發(fā)來的連接請求。

          第一次握手

          客戶端向服務端發(fā)送連接請求報文段。該報文段的頭部中SYN=1,ACK=0,seq=x。請求發(fā)送后,客戶端便進入SYN-SENT狀態(tài)。
          • PS1:SYN=1,ACK=0表示該報文段為連接請求報文。
          • PS2:x 為本次 TCP 通信的字節(jié)流的初始序號。TCP 規(guī)定:SYN=1的報文段不能有數(shù)據(jù)部分,但要消耗掉一個序號。

          第二次握手

          服務端收到連接請求報文段后,如果同意連接,則會發(fā)送一個應答:SYN=1,ACK=1,seq=y,ack=x+1。該應答發(fā)送完成后便進入SYN-RCVD狀態(tài)。
          • PS1:SYN=1,ACK=1表示該報文段為連接同意的應答報文。
          • PS2:seq=y表示服務端作為發(fā)送者時,發(fā)送字節(jié)流的初始序號。
          • PS3:ack=x+1表示服務端希望下一個數(shù)據(jù)報發(fā)送序號從x+1開始的字節(jié)。

          第三次握手

          當客戶端收到連接同意的應答后,還要向服務端發(fā)送一個確認報文段,表示:服務端發(fā)來的連接同意應答已經(jīng)成功收到。
          該報文段的頭部為:ACK=1,seq=x+1,ack=y+1??蛻舳税l(fā)完這個報文段后便進入ESTABLISHED狀態(tài),服務端收到這個應答后也進入ESTABLISHED狀態(tài),此時連接的建立完成

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

          防止失效的連接請求報文段被服務端接收,從而產生錯誤。
          PS:失效的連接請求:若客戶端向服務端發(fā)送的連接請求丟失,客戶端等待應答超時后就會再次發(fā)送連接請求,此時,上一個連接請求就是『失效的』。
          若建立連接只需兩次握手,客戶端并沒有太大的變化,仍然需要獲得服務端的應答后才進入ESTABLISHED狀態(tài),而服務端在收到連接請求后就進入ESTABLISHED狀態(tài)。
          此時如果網(wǎng)絡擁塞,客戶端發(fā)送的連接請求遲遲到不了服務端,客戶端便超時重發(fā)請求,如果服務端正確接收并確認應答,雙方便開始通信,通信結束后釋放連接。
          此時,如果那個失效的連接請求抵達了服務端,由于只有兩次握手,服務端收到請求就會進入ESTABLISHED狀態(tài),等待發(fā)送數(shù)據(jù)或主動發(fā)送數(shù)據(jù)。但此時的客戶端早已進入CLOSED狀態(tài),服務端將會一直等待下去,這樣浪費服務端連接資源。

          TCP四次揮手

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

          第一次揮手

          若A認為數(shù)據(jù)發(fā)送完成,則它需要向B發(fā)送連接釋放請求。該請求只有報文頭,頭中攜帶的主要參數(shù)為:FIN=1,seq=u。此時,A將進入FIN-WAIT-1狀態(tài)。
          • PS1:FIN=1表示該報文段是一個連接釋放請求。
          • PS2:seq=u,u-1是A向B發(fā)送的最后一個字節(jié)的序號。

          第二次揮手

          B收到連接釋放請求后,會通知相應的應用程序,告訴它A向B這個方向的連接已經(jīng)釋放。此時 B 進入CLOSE-WAIT狀態(tài),并向A發(fā)送連接釋放的應答,其報文頭包含:ACK=1,seq=v,ack=u+1。
          • PS1:ACK=1:除TCP連接請求報文段以外,TCP通信過程中所有數(shù)據(jù)報的 ACK都為1,表示應答。
          • PS2:seq=v,v-1是B向A發(fā)送的最后一個字節(jié)的序號。
          • PS3:ack=u+1表示希望收到從第u+1個字節(jié)開始的報文段,并且已經(jīng)成功接收了前u個字節(jié)。
          A收到該應答,進入FIN-WAIT-2狀態(tài),等待B發(fā)送連接釋放請求。
          第二次揮手完成后,A到B方向的連接已經(jīng)釋放,B不會再接收數(shù)據(jù),A也不會再發(fā)送數(shù)據(jù)。但B到A方向的連接仍然存在,B可以繼續(xù)向 A發(fā)送數(shù)據(jù)。

          第三次揮手

          當B向A發(fā)完所有數(shù)據(jù)后,向A發(fā)送連接釋放請求,請求頭:FIN=1,ACK=1,seq=w,ack=u+1。B便進入LAST-ACK狀態(tài)。

          第四次揮手

          A收到釋放請求后,向B發(fā)送確認應答,此時A進入TIME-WAIT狀態(tài)。該狀態(tài)會持續(xù)2MSL時間,若該時間段內沒有B的重發(fā)請求的話,就進入 CLOSED狀態(tài),撤銷TCB。當B收到確認應答后,也便進入CLOSED狀態(tài),撤銷TCB。

          為什么A要先進入TIME-WAIT狀態(tài),等待2MSL時間后才進入CLOSED狀態(tài)

          為了保證B能收到A的確認應答。若A發(fā)完確認應答后直接進入CLOSED狀態(tài),那么如果該應答丟失,B等待超時后就會重新發(fā)送連接釋放請求,但此時A已經(jīng)關閉了,不會作出任何響應,因此B永遠無法正常關閉。
          原文鏈接:https://tinyurl.com/nrputn47

          Linux學習指南

          有收獲,點個在看?

          瀏覽 36
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  婷婷在线成人视频精品 | 青娱乐在线国产视频 | 天堂v视频永久在线播放平台 | 久久久久久亚洲AV无码蜜芽老妇 | 8090操逼网 |