TCP協議-報文段數據中的自定義包頭


  • 問題背景

    • TCP協議的包頭中有源端口號和目標端口號,本質是為了標識某機器上的一個進程。
    • 問題
      • 一個進程可能需要有多條協議的數據通信,需要有別的標識字段來分辨不同協議的數據
      • 服務器可能需要對不同類型的客戶端的請求,響應不同的數據
      • TCP協議包中的二進制數據的長度未知
        • 目前了解到的主要有兩種方法
          1. 結束符
          2. 定長數據
          3. 自定義包頭中含有一個字段,在發送該包前記錄報文段的長度
  • 解決方案

    • 較常用:TCP報文段預留一片區域,作為自定義的數據頭,即方案3
      • 這是工業界較為常用的一種手段
      • 自定義數據頭中填充協議號、版本號、用戶ID等信息(開發人員自行選擇)
      • 通常有一個字段用以標識傳輸的協議數據的字節數(即長度)
      • 實際傳輸的協議的二進制數據是TCP報文段減去自定義數據頭的剩余數據
    • 使用Base64編碼再進行傳輸, \0作為結束符
      • 缺點:消耗帶寬,因為base64編碼之后占用的大小平均多了30%左右
  • 延申

    • UDP協議也可以使用該方案,可以在自定義的包頭中加入字段作為檢驗和
  • 參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM