1. 程式人生 > 其它 >7.29筆記(TCP和UDP)

7.29筆記(TCP和UDP)

TCP和UDP協議

  • TCP:即傳輸控制協議,是一種面向連線的,可靠的,基於位元組流的傳輸層的通訊協議

  • UDP:即使用者資料報協議,是一種面向報文的傳輸層的協議

    OSI七層模型與TCP/IP五層模型:

    1. 應用層:為計算機使用者提供介面和各種網路服務
    2. 表示層:提供對應用層的資料的編碼和轉換
    3. 會話層:負責管理各層之間的會話
    4. 傳輸層:為上層協議提供可靠透明的資料傳輸的服務
    5. 網路層:負責把地址傳送給目標傳輸層
    6. 資料鏈路層:把位元組合成位元組,再把位元組組合成幀,使用資料鏈路層來訪問介質
    7. 物理層:通過物理介質傳輸位元流

TCP和UDP的區別:

  1. TCP是面向連線的;UDP是面向無連線的,即傳輸前不需要建立連線

  2. TCP提供的是可靠的服務,TCP可以達到不重複,不亂序,不丟失,不重複的傳輸效果;UDP會盡最大努力交付,不能保證可靠交付

  3. TCP是面向位元組流;UDP是面向報文的,UDP沒有擁塞控制

  4. TCP的首部開銷20個位元組;UDP首部開銷小,佔了8個位元組

  5. TCP需要三次握手;UDP則不需要,所以說UDP的實時性要比TCP要強,因為UDP不需要握手,因此就不易受到攻擊,安全性要比TCP要好。

  6. 由於使用者在傳輸檔案時追求的是準確可靠的傳輸,所以TCP適用於檔案傳輸等準確傳輸;

    在視訊通話或者語音通話時,使用者不會太在意準確性,更多的追求的時實時性,減少網路不佳所帶來的不利影響,因此UDP大多適用於視訊通話等音訊傳輸

三次握手和四次握手

  • 三次握手:TCP進行建立連線

    過程:

    1. 第一次握手:客戶端給服務端傳送一個SYN,服務端就知道了客戶端有傳送能力,服務端的接受能力也正常。
    2. 第二次握手:服務端收到了SYN後,會回覆SYN+ACK給客戶端,客戶端就知道了服務端的接收能力和傳送能力正常。
    3. 第三次握手:客戶端收到SYN+ACK後,會迴應一個ACK報文給服務端端。服務端就知道了客戶端的接收能力正常。之後建立連線

    作用:

    1. 確認雙方的接受和傳送能力
    2. 指定初始化的序列號,為可靠性傳輸做準備
  • 四次握手:TCP斷開連線、

    1. 客戶端向服務端傳送斷開連線的請求,並進入等待狀態
    2. 服務端回覆客戶端收到斷開連線的請求,並進入等待關閉狀態
    3. 隔了一段時間後,服務端向客戶端傳送請求,表示可以斷開連線,保持等待關閉狀態
    4. 客戶端回覆服務端收到了確認的請求,然後客戶端經過兩個報文壽命後,客戶端CLOSE;當服務端收到了客戶端的確認之後立即進入CLOSE。

TCP的粘包和拆包

TCP是流的形式進行資料傳輸,傳輸的最小單位是一個報文段

粘包:

客戶端發出的兩個資料包首尾相連了,服務端就不知道兩個資料包都是在哪開始在哪結束的了。

拆包:

就是把一條完整的訊息拆分成兩個資料包,伺服器無法處理這種邏輯

產生粘包和拆包的原因:

TCP是以流的方式進行資料傳輸,傳輸的最小單位是一個報文段,連線層每此傳輸都有一個最大限制(1500位元),如果超過這個最大限制就會發生拆包的現象。

TCP為了提高效能,會把要傳送的資料先發送到緩衝區,等待緩衝區滿了,才一起傳送,所以當寫入程式大於這個緩衝區的大小,也會發生拆包。反之,如果寫入程式小於這個緩衝區,就會發生粘的現象

解決方案:

  • 使用帶訊息頭的協議,頭部儲存儲存開始的標誌和訊息的長度。在解析的時候就從這個頭部開始向後讀取該長度的內容即可
  • 設定定長訊息,服務端每次讀取定長內容都作為一個完整訊息
  • 設定訊息邊界,即從網路流中分離出訊息內容