淺談通訊協議

寫在開端

第一次寫博客,水平有限,僅僅是根據自己的理解,就自定義通訊協議淺談一下個人的理解,有偏差或錯誤的地方,歡迎指正。本人水平有限,勿噴。


摘要

本文檔跳出常規理解的協議頭,命令字,數據域的概念,將通訊協議由簡到繁做一個理解。最簡單的通訊協議,就是一個“協議標識”+“數據域”;將常規復雜協議的“協議頭”+“命令字【B、C…】”+“data域”的概念,轉換爲【“協議A”【協議B、協議C…】】這樣的嵌套與並列的概念。


協議模塊化

通訊協議本質上是分模塊的,包括 數據結構,通訊通道,通訊機制三個模塊;

  • 數據結構

    數據結構:二進制數據以約定規則組成數據串,使二進制數據串擔負實際意義。
    協議的標準數據結構是“協議頭+數據域”。
    協議頭用來標識協議,對應約訂規則的數據域。
    數據域是約定的規則組成的數據串,多個單元數據域可以組成複雜的幀數據域。

  • 通訊通道

    我理解的通訊通道,指的不是通訊鏈路(藍牙,socket,nsfc等),而是指一個通訊模塊,甚至可以理解爲另一個通訊協議,因爲對於上層開發者來說,他們通過調用模塊API,傳輸數據,本質上還是把自己封裝好的數據,作爲底層協議的數據域被包裹起來,向下層傳輸,層層包裹,最終傳到到驅動層。

  • 通訊機制

我理解的通訊機制主要有兩種“應答機制”、“廣播機制”。
1. 應答機制
業務發起方發送的每一個通訊幀,接收方都必迴應相應的應答報文,發起方能夠確定接收方獲取到通訊幀;
2. 廣播機制
業務發起方發送的通訊幀,接收方不會應答報文,發起方不能夠確定接收方獲取到通訊幀。

一個協議採用的通訊機制可能是單一的,也可能兩種都有,所以建議在開始規劃設計一個通訊協議項目的時候,把兩種通訊機制都兼容到,增強項目的擴展性。

協議嵌套

數據協議是可以嵌套的,不同協議嵌套起來,可以組成新的複雜協議。
不同協議的協議幀都可以作爲另一個外層協議的數據域,就組成了一個複雜協議,實現一套功能。

複雜協議的嵌套策略

複雜協議通訊幀的收發處理是兩個互逆的順序。

a. 發送通訊幀

  1. 用戶下發協議數據域的各字段數據;
  2. 內層協議的數據結構模塊將用戶數據組裝爲該層協議的數據域;
  3. 將外層協議作爲內層協議的通訊通道;
  4. 內層協議使用通訊通道發送數據;
  5. 內層協議通訊機制模塊控制數據的發送,接收,重發,超時等邏輯。

b. 接收通訊幀

  1. 外層協議從通訊通道獲取到數據;
  2. 外層協議的數據結構模塊解析數據,獲取到內層協議的通訊幀;
  3. 外層協議的通訊機制模塊結束此次業務邏輯,將數據返回給內層協議;
  4. 內層協議從通訊通道獲取到數據,使用數據結構模塊解析數據,並處理通訊機制模塊的業務邏輯;
  5. 內層協議向用戶返回數據。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章