三次握手所謂的“三次握手”即對每次發送的數據量是怎樣跟蹤進行協商使的發送和接收同步,根據所接收到的數據量而確定的數據確認數及數據發送、接收完畢後何時撤消聯繫,並建立虛連接。 一、七字真言解讀三次握手 二、為什麼需要三次握手? 主機建立連接為什麼需要三次握手?為了防止已經是失效連接突然又重新回到了服務 ...
三次握手所謂的“三次握手”即對每次發送的數據量是怎樣跟蹤進行協商使的發送和接收同步,根據所接收到的數據量而確定的數據確認數及數據發送、接收完畢後何時撤消聯繫,並建立虛連接。
一、七字真言解讀三次握手
二、為什麼需要三次握手?
主機建立連接為什麼需要三次握手?為了防止已經是失效連接突然又重新回到了服務端而產生的錯誤。“比如一個客戶端發出一個連接請求報文雖然沒有丟失,但是由於一些原因在在某個網路節點中長時間滯留,以至於在斷開連接後才到達服務端。這本身就是一個已經失效的報文。但是伺服器誤以為是客戶端的又一個新的請求。假設沒有三次握手那麼只要服務端發出確認鏈接就建立了。由於客戶端也沒有給服務端發請求,因此也不回覆服務端的確認。但是服務端確認為新的連接開始了,等待客戶端發數據。這樣就容易造成服務端的資源的浪費。採用三次握手可以防止這種情況發生。
三、圖解三次握手、四次揮手
- 三次握手
第一次握手:客戶端申請連接(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連接是全雙工的,因此每個方向都必須單獨的斷開連接客戶端申請斷開連接,只是不再發送數據,還能接收數據。需要等待服務端將數據發送完畢後,等待服務端申請斷開連接。