2021-05-12 14:32:11
解讀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
相關文章