文本協議與二進制協議的選擇

進行網絡通訊時,咱們常常糾結於到底使用什麼樣的協議傳輸數據,下面我談談應該怎麼選擇一種合理的協議格式。安全

網絡協議

標準定義是這樣的:網絡

爲計算機網絡中進行數據交換而創建的規則、標準或約定的集合。ide

網絡協議至少包括三要素:ui

語法:語法是用戶數據與控制信息的結構與格式,以及數據出現的順序。加密

語義:解釋控制信息每一個部分的意義。它規定了須要發出何種控制信息,以及完成的動做與作出什麼樣的響應。spa

時序:時序是對事件發生順序的詳細說明。計算機網絡

人們形象地把這三個要素描述爲:語義表示要作什麼,語法表示要怎麼作,時序表示作的順序。設計

通俗地說,協議就是通訊雙方可以理解的一種數據格式。調試

在進行網絡開發中,文本協議和二進制協議是咱們最經常使用的兩種。每每要根據這兩種協議的特色進行選擇,那麼咱們先來看下這兩種協議分別具備什麼特色。事件

文本協議

文本協議通常是由一串ACSII字符組成的數據,這些字符包括數字,大小寫字母、百分號,還有回車(\r),換行(\n)以及空格等等。

文本協議設計的目的就是方便人們理解,讀懂。因此,協議中一般會加入一些特殊字符用於分隔,好比以下數據:

!set chl 003#

其中,以!標識命令的開始,#標識命令結束,空格用來分隔命令字段,雖然咱們不知道這條命令具體幹什麼,但經過字面咱們大體知道多是設置(set)某一個參數(chl)值爲003,這樣在咱們進行調試的時候,能夠快速準確地看到當時發生了什麼,更好地解決問題。

但爲了便於解析,文本協議不得不添加一些冗餘的字符用於分隔命令,下降了其傳輸的效率;並且只適於傳輸文本,很難嵌入其餘數據,好比一張圖片。

二進制協議

二進制協議就是一串字節流,一般包括消息頭(header)和消息體(body),消息頭的長度固定,而且消息頭包括了消息體的長度。這樣就可以從數據流中解析出一個完整的二機制數據。以下是一個典型的二進制協議:

其中,Guide用於標識協議起始,Length是消息體Data的長度,爲了數據完整性,還會加上相應的校驗 (DataCRC,HeaderCRC);Data中又分爲命令字(CMD),和命令內容。命令字是雙方協議文檔中規定好的,好比0x01表明登 錄,0x02表明登出等,通常數據字段的長度也是固定的。又由於長度的固定,因此少了冗餘數據,傳輸效率較高。

總結

綜上,咱們大體總結文本協議和二進制協議的優缺點:

文本協議,直觀、描述性強,容易理解,便於調試,缺點就是冗餘數據較多,不適宜傳輸二進制文件(好比:圖片等),解析複雜(須要進行字符串比較);

二進制協議,沒有冗餘字段,傳輸高效,方便解析(固定長度,而且能夠直接比較字節),缺點就是定義的比較死,哪一個位置有哪些東西,是什麼意義是定義死的,場景單一。

因此,

1. 若是想要高效傳輸,好比物聯網中收集傳感器數據,使用二進制協議

2. 若是想要便於調試,好比使用telnet就能當客戶端用,可以使用文本協議

3. 若是命令較少,好比即時通信軟件,可使用文本協議

4. 二進制數據的難理解性,天然加密,對數據安全有必定要求的可使用二進制協議

等等。

總的來講,這是一個平衡的過程,要看具體項目的須要。

相關文章
相關標籤/搜索