-
問題背景
- TCP協議的包頭中有源端口號和目標端口號,本質是為了標識某機器上的一個進程。
- 問題
- 一個進程可能需要有多條協議的數據通信,需要有別的標識字段來分辨不同協議的數據
- 服務器可能需要對不同類型的客戶端的請求,響應不同的數據
- TCP協議包中的二進制數據的長度未知
- 目前了解到的主要有兩種方法
- 結束符
- 定長數據
- 自定義包頭中含有一個字段,在發送該包前記錄報文段的長度
- 目前了解到的主要有兩種方法
-
解決方案
- 較常用:TCP報文段預留一片區域,作為自定義的數據頭,即方案3
- 這是工業界較為常用的一種手段
- 自定義數據頭中填充協議號、版本號、用戶ID等信息(開發人員自行選擇)
- 通常有一個字段用以標識傳輸的協議數據的字節數(即長度)
- 實際傳輸的協議的二進制數據是TCP報文段減去自定義數據頭的剩余數據
- 使用
Base64
編碼再進行傳輸, \0作為結束符- 缺點:消耗帶寬,因為base64編碼之后占用的大小平均多了30%左右
- 較常用:TCP報文段預留一片區域,作為自定義的數據頭,即方案3
-
延申
- UDP協議也可以使用該方案,可以在自定義的包頭中加入字段作為檢驗和
-
參考資料