網路協議 二進位制與文字

2021-08-18 08:45:38 字數 1521 閱讀 8367

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

標準定義是這樣的:

為計算機網路中進行資料交換而建立的規則、標準或約定的集合。

網路協議至少包括三要素:

語法:語法是使用者資料與控制資訊的結構與格式,以及資料出現的順序。

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

時序:時序是對事件發生順序的詳細說明。

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

通俗地說,協議就是通訊雙方能夠理解的一種資料格式。

在進行網路開發中,文字協議和二進位制協議是我們最常用的兩種。往往要根據這兩種協議的特點進行選擇,那麼我們先來看下這兩種協議分別具有什麼特點。

文字協議一般是由一串acsii字元組成的資料,這些字元包括數字,大小寫字母、百分號,還有回車(\r),換行(\n)以及空格等等。

文字協議設計的目的就是方便人們理解,讀懂。所以,協議中通常會加入一些特殊字元用於分隔,比如如下資料:

!set chl 003#

其中,以!標識命令的開始,#標識命令結束,空格用來分隔命令字段,雖然我們不知道這條命令具體幹什麼,但通過字面我們大致知道可能是設定(set)某乙個引數(chl)值為003,這樣在我們進行除錯的時候,可以快速準確地看到當時發生了什麼,更好地解決問題。

但為了便於解析,文字協議不得不新增一些冗餘的字元用於分隔命令,降低了其傳輸的效率;而且只適於傳輸文字,很難嵌入其他資料,比如一張。

二進位制協議就是一串位元組流,通常包括訊息頭(header)和訊息體(body),訊息頭的長度固定,並且訊息頭包括了訊息體的長度。這樣就能夠從資料流中解析出乙個完整的二進位制資料。如下是乙個典型的二進位制協議:

其中,guide用於標識協議起始,length是訊息體data的長度,為了資料完整性,還會加上相應的校驗(datacrc,headercrc);data中又分為命令字(cmd),和命令內容。命令字是雙方協議文件中規定好的,比如0x01代表登入,0x02代表登出等,一般資料字段的長度也是固定的。又因為長度的固定,所以少了冗餘資料,傳輸效率較高。

綜上,我們大致總結文字協議和二進位制協議的優缺點:

文字協議,直觀、描述性強,容易理解,便於除錯,缺點就是冗餘資料較多,不適宜傳輸二進位制檔案(比如:等),解析複雜(需要進行字串比較);

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

所以,如果想要高效傳輸,比如物聯網中收集感測器資料,使用二進位制協議

如果想要便於除錯,比如使用telnet就能當客戶端用,可使用文字協議

如果命令較少,比如即時通訊軟體,可以使用文字協議

二進位制資料的難理解性,自然加密,對資料安全有一定要求的可以使用二進位制協議

等等。總的來說,這是乙個平衡的過程,要看具體專案的需要。

文字協議與二進位制協議的選擇

進行網路通訊時,我們經常糾結於到底使用什麼樣的協議傳輸資料,下面我談談應該怎麼選擇一種合理的協議格式。標準定義是這樣的 為計算機網路中進行資料交換而建立的規則 標準或約定的集合。網路協議至少包括三要素 語法 語法是使用者資料與控制資訊的結構與格式,以及資料出現的順序。語義 解釋控制資訊每個部分的意義...

簡單的文字協議 二進位制協議

寫網路程式躲不過協議,協議其實就是定義了訊息的格式,以及訊息是如何交換的。協議可簡單可複雜,複雜精密如tcp協議,簡單奔放如http的協議。這裡將我所接觸到的協議稍微總結一下,最後丟擲乙個個人設計的簡單通用的文字協議。設計乙個協議不是一件很容易的事情,尤其是當對設計的要求包含很好的描述性和可擴充套件...

二進位制 二進位制起源

現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...