ble mesh-Proxy protocol詳解(2)

舉栗子

ble mesh 中存在一類代理節點(proxy node),其作用是通過GATT,將接受到的數據,發送給mesh 網絡中,不具備gatt 能力的設備。

例如:天貓精靈需要wifi 配網,需要獲取到wifi 網絡的賬號和密碼,這個時候需要用手機app ,通過bt gatt 連接到天貓精靈,發送數據,然後如果mesh 網絡中,其他節點需要這個賬號和密碼信息,天貓精靈可以通過adv轉發這些信息。

這個過程中,天貓精靈就是一個proxy server 的角色,手機是一個proxy client 角色, mesh 燈組 等設備屬於不具備gatt 連接類型設備

萬物皆數據

所有藍牙協議的核心作用就是定義好一套數據幀格式
然後世界內,所有需要應用藍牙的人,都來遵守同一套規則,然後就能正常通信

如果你NB,不願遵守,也可以自創一套,那不是咱現在討論的 bt proxy 協議。迴歸正題, Proxy PDU

Proxy PDU

整個數據幀分爲三部分,SAR標誌符,類型標誌符,數據整個數據幀分爲三部分,SAR標誌符,類型標誌符,數據前兩部分長度固定,共佔用一個字節(opcode),實際數據長度取決於用戶定義(variable)。
但是受限與GATT層一幀數據的大小(默認ATT_MTU=23),過長的PDU,會被分割和重組(SAR),多次發送。

前兩部分長度固定,共佔用一個字節
SAR(分割與重組),二進制兩個bit,四個值分別定義如下。在這裏插入圖片描述

思考

怎麼判斷一個PDU有發送完成?
直到收到的數據幀SAR標誌位爲00或者11
怎麼發送一個超長的PDU?
根據ATT_MTU的大小,將數據分割,第一包數據SAR01,中間N包數據SAR10,最後一包數據11

發送數據的類型,指示後續data爲數據會發送到那一層,方便用正確的規則去解析後面的實際數據

在這裏插入圖片描述
僅有四種數據類型,6bit ,0x04-0x3f保留
0x01 mesh beacon:新設備和mesh 節點之間的 廣播包,兩種

  1. Unprovisioned Device beacon ,配網之前的pdu
  2. Secure Network beacon

0x00 Network PDU :network layer defines the Network PDU format

配置中間角色

在上述栗子中, 手機與燈組的溝通,需要天貓精靈作爲中間角色,傳遞消息。
但是我們用戶在手機端,並不需跟所有的燈溝通,我們只需控制其中一個燈,這個時候就可以通過一些配置,給天貓精靈發送一些過濾條件,僅僅接受所關注的那個燈所發出的訊息。

記住,手機作爲client, 天貓精靈作爲server , 是client 配置server

Filter types

白名單
僅僅接受目的地地址destination addresses ,在白名單中的設備
黑名單
除了黑名單以內的所有設備,其他destination addresses 的所有設備都會接受

其實也很明白,白名單內全收,黑名單內全部不收

Proxy configuration

0x02 Proxy configuration messages
這類PDU,是用來 配置代理過濾條件。
在整個proxy 行爲中,有兩個數據的流動:

  1. 燈組 --> 天貓精靈
  2. 手機 <–> 天貓精靈

燈組 --> 天貓精靈

數據格式與Network PDU完全相同
在這裏插入圖片描述
在 Proxy configuration messages僅關注如下類型的數據:
The CTL field shall be set to 1.
The TTL field shall be set to 0.
The DST field shall be set to the unassigned address
核心的操作對象就是這個地址DST

手機 <–> 天貓精靈

操作手段,action 有如下四種,opcode 佔有一個字節,定義如下
在這裏插入圖片描述
這四種行爲不難理解,設置模式,增加或減少,返回狀態。

Proxy Server behavior

  • 一旦連接建立,Proxy Server初始化爲白名單模式,並且白名單爲空
  • 白名單模式下,一旦收到client 端的有效信息,需要將SRC unicast address,加入白名單
  • 黑名單模式下, 一旦收到client 端的有效信息,需要將SRC unicast address,移除黑名單
  • 一旦連接建立,server 需要發送Secure Network Beacon client
  • 一旦收到client端的Secure Network Beacon, server端需要做一些處理
  • 發送的message,SRC需要設置爲primary element unicast address
  • 收到Set Filter Type message ,先清除,再回狀態
  • 收到Add Addresses to Filter message ,回狀態; 如已經存在或者空間不夠,忽略
  • 收到Remove Addresses from Filter message ,回狀態,如果不存在,忽略
  • 收到unexpected value of the SAR field ,直接disconect
  • 收到Reserved for Future Use ,忽略
  • SAR timmer =20s,超時斷開

總結:
server初始化默認白名單爲空
無論哪種模式,一旦連接建立,給client SRC address 金水
server收到command,先處理,再回狀態,client根據callback判斷是否有成功執行
無效命令和超時都會斷開連接

Proxy Client behavior

  • 發送的消息,SRC 設置爲primary element unicast,SEQ同樣使用sequence number of its
    primary element
  • 接受到無效信息,直接斷開
  • 接受到保留的類型數據,忽略
  • 超時同設是20s,超時斷連

流程圖

如果看懂了client 和server端的行爲 及 消息類型,應該很容易理解白名單和黑名單的流程圖
在這裏插入圖片描述
在這裏插入圖片描述

發佈了16 篇原創文章 · 獲贊 1 · 訪問量 2094
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章