上篇文章:
網絡編程—Socket套接字(TCP)https://blog.csdn.net/sniper_fandc/article/details/146923783?fromshare=blogdetail&sharetype=blogdetail&sharerId=146923783&sharerefer=PC&sharesource=sniper_fandc&sharefrom=from_link
目錄
1 應用層
1.1 自定義協議
2 傳輸層
2.1 UDP
1 應用層
1.1 自定義協議
????????應用層除了特殊的協議比如http、https等,大部分協議需要開發人員自定義,即自己約定協議的格式。以登錄注冊模塊為例,常常需要客戶端和服務器互相返回賬號數據,假設請求和響應的數據都有:userid、number、password,那么自定義協議就有6種常見的類型:
????????1.分隔符:可以采用“;”、“ ”、“\n”等符號作為不同類型數據的劃分界限。比如:userid;number;password;
????????2.固定長度字節:采用固定長度的字節來表示請求和響應,比如請求長度10字節,userid占2字節,number占4字節,password占4字節。
????????3.分隔符+固定長度字節:前兩種方式組合,實現變長字節組合方式。
????????4.xml:采用標簽組織數據
<request><userid>1</userid><number>123456789</number><password>123456789</password></request><response><userid>1</userid><number>123456789</number><password>123456789</password></response>
????????5.JSON:最常用的前后端數據交互格式,使用{}包含鍵值對,鍵必須是字符串,值可以是字符串、數字、數組([])甚至JSON等格式,鍵和值之間用:分割,鍵值對之間用,分割,比如:
請求:
{
userid:1,
number:”123456789”,
password:”123456789”
}
????????6.二進制數據:常見protobuffer、thift等。
????????注意:xml和JSON屬于文本格式,優點是可讀性強,缺點是效率低,占用帶寬多。二進制格式優點是效率高,占用帶寬少,缺點是可讀性差。
2 傳輸層
2.1 UDP
????????UDP協議的特點是無連接(不建立連接來傳輸數據)、不可靠(不知道數據是否發送過去)、面向數據報(發多少收多少,不能拆分為字節多次接收)、只有接收緩沖區沒有發送緩沖區、大小受限(最長64kb)、全雙工(同時發送和接收)。
????????UDP數據報結構如下:
????????源端口號:發送方的端口號
????????目的端口號:接收方的端口號
????????UDP長度:單位字節,16位可以表示64kb的數據,即UDP報文長度最大64kb。
????????校驗和:發送方發送數據時會計算一個校驗和,接收方接收數據后再計算一個校驗和,根據校驗和是否相等驗證當前UDP數據報在傳輸過程中是否出現錯誤(導致比特位被修改),如果出錯就會丟棄。
????????UDP校驗和的計算沒有采用著名的CRC算法(循環冗余校驗和),而是把數據劃分為多段16位的字(如果不足16位且為奇數位,就在末尾補形成偶數長度),把每個16位的字累加,溢出2字節(16位)的部分從16位的最低位進位,最后把得到的結果按位取反得到校驗和。
????????注意:如果校驗和不相等,則數據傳輸過程一定發生了錯誤。如果校驗和相等,也不能說明數據一定完全正確。因為算法過于簡單,有可能某位0變1,對應其他16位字的相同位置是1變0,結果求和過程結果仍然一樣。但是雖然網絡傳輸過程可能出錯,但這是很小概率的事,多個小概率事件同時發生使校驗和仍然一樣概率更小,因此工程上一般忽略不計。
下篇文章:
網絡編程—TCP/IP模型(TCP協議)https://blog.csdn.net/sniper_fandc/article/details/147011479?fromshare=blogdetail&sharetype=blogdetail&sharerId=147011479&sharerefer=PC&sharesource=sniper_fandc&sharefrom=from_link