快速理解TCP/IP三次握手與四次揮手

TCP/IP三次握手

TCP創建鏈接爲何是三次握手,而不是兩次或四次?
TCP,名爲傳輸控制協議,是一種可靠的傳輸層協議,IP協議號爲6。
順便說一句,原則上任何數據傳輸都沒法確保絕對可靠,三次握手只是確保可靠的基本須要。編程

對應爲客戶端與服務器之間的通訊:
TCP/IP三次握手
因而有了如下對話:
我:1+1等於幾?
她:2,2+2等於幾?
我:4服務器

首先兩我的約定協議
1.感受網絡狀況不對的時候,任何一方均可以發起詢問
2.任何狀況下,若發起詢問後5秒還沒收到回覆,則認爲網絡不通
3.網絡不通的狀況下等1min路由器以後再發起詢問網絡

對於我而言,發起 「1+1等於幾」的詢問後socket

  1. 若5s內沒有收到回覆,則認爲網絡不通
  2. 若收到回覆,則我確認①我能聽到她的消息 ②她能聽到個人消息,而後回覆她的問題的答案

對於她而言,當感受網絡狀況不對的時候spa

  1. 若沒有收到個人詢問,則她發起詢問
  2. 若收到「1+1等於幾」,則她確認 ①她能夠聽到個人消息,而後回覆個人問題的答案和她的問題「2,2+2等於幾」
  3. 若5s內沒有收到個人回覆「4」,則她確認 ②我聽不見她的消息
  4. 若5s內收到了個人回覆「4」,則她確認 ②我能夠聽見她的消息

這樣,若是上面的對話得以完成,就證實雙方均可以確認本身能夠聽到對方的聲音,對方也能夠聽到本身的聲音!blog

這個解釋足夠簡單了吧!接下來咱們看四次揮手。路由

TCP/IP四次揮手

三次握手耳熟能詳,四次揮手估計就..所謂四次揮手(Four-Way Wavehand)即終止TCP鏈接,就是指斷開一個TCP鏈接時,須要客戶端和服務端總共發送4個包以確認鏈接的斷開。在socket編程中,這一過程由客戶端或服務端任一方執行close來觸發,整個流程以下圖所示:
TCP/IP四次揮手開發

服務端在LISTEN狀態下,收到創建鏈接請求的SYN報文後,把ACK和SYN放在一個報文裏發送給客戶端。而關閉鏈接時,當收到對方的FIN報文時,僅僅表示對方再也不發送數據了可是還能接收數據,己方也未必所有數據都發送給對方了,因此己方能夠當即close,也能夠發送一些數據給對方後,再發送FIN報文給對方來表示贊成如今關閉鏈接,所以,己方ACK和FIN通常都會分開發送。

簡單點說,當被動方收到主動方的FIN報文通知時,它僅僅表示主動方沒有數據再發送給被動方了。

但未必被動方全部的數據都完整的發送給了主動方,因此被動方不會立刻關閉SOCKET,它可能還須要發送一些數據給主動方後,

再發送FIN報文給主動方,告訴主動方贊成關閉鏈接,因此這裏的ACK報文和FIN報文多數狀況下都是分開發送的。

相關文章
相關標籤/搜索