首頁 > 軟體

解讀TCP三次握手

2020-06-16 17:07:05

三次握手所謂的“三次握手”即對每次傳送的資料量是怎樣跟蹤進行協商使的傳送和接收同步,根據所接收到的資料量而確定的資料確認數及資料傳送、接收完畢後何時撤消聯絡,並建立虛連線。

一、七字真言解讀三次握手

二、為什麼需要三次握手?

主機建立連線為什麼需要三次握手?為了防止已經是失效連線突然又重新回到了伺服器端而產生的錯誤。“比如一個用戶端發出一個連線請求報文雖然沒有丟失,但是由於一些原因在在某個網路節點中長時間滯留,以至於在斷開連線後才到達伺服器端。這本身就是一個已經失效的報文。但是伺服器誤以為是用戶端的又一個新的請求。假設沒有三次握手那麼只要伺服器端發出確認連結就建立了。由於用戶端也沒有給伺服器端發請求,因此也不回復伺服器端的確認。但是伺服器端確認為新的連線開始了,等待用戶端發資料。這樣就容易造成伺服器端的資源的浪費。採用三次握手可以防止這種情況發生。

三、圖解三次握手、四次揮手

  • 三次握手
    第一次握手:用戶端申請連線(SYN=1),傳送seq=j的封包
    第二次握手:伺服器端申請連線(SYN=1),確認收到用戶端的申請(ACK=1).;伺服器期望下次收到J+1封包(ack=j+1),傳送seq=k的封包
    第三次握手:用戶端確認收到請求(SYN=1),傳送伺服器期望的封包(j+1).完成連線

  • 四次揮手
    第一次揮手:用戶端請求斷開連線(FIN=1),傳送序號為j的資料(seq=u)
    第二次揮手:確認收到請求(ACK=1),我期望收到u+1d的封包(ack=u+1),傳送序號為k的資料(seq=k)
    第三次揮手:伺服器申請斷開連線(FIN=1),確認收到你之前的請求(ACK=1);期望收到u+1的資料(ack=u+1),傳送序號為v的資料
    第四次揮手:確認收到請求(ACK=1),傳送序號為u+1的資料(seq=u+1)。斷開連線

四、為什麼握手三次,揮手四次?

  • 三次握手
    因為要保證通道的可靠,就需要雙方溝通並且達成一致。而要解決這個檔案3次是最小值。所以三次握手並不是真對TCP來說的,而是為了保證通道的可靠。
    個人理解:三次握手並不準確,準確的說是雙方各一次握手,各確認一次。中間第二次是握手與確認合併在一起

  • 為什麼揮手比握手多一次
    因為tcp連線是全雙工的,因此每個方向都必須單獨的斷開連線用戶端申請斷開連線,只是不再傳送資料,還能接收資料。需要等待伺服器端將資料傳送完畢後,等待伺服器端申請斷開連線。

本文永久更新連結地址http://www.linuxidc.com/Linux/2017-09/146981.htm


IT145.com E-mail:sddin#qq.com