一、協議簡介
- 在 EdgerOS 的智慧生態場景中,許多智能設備或傳感器的生命周期都與 SDDC 協議息息相關,這些設備可能是使用 libsddc 智能配網技術開發的,也有可能是因為主要功能上是使用其他技術如 MQTT、LoRa 等但是設備的上下線依然是使用上述的技術。
- SDDC(Smart Device Discovery & Control,智能設備發現與控制)是 EdgerOS 專門為 Wi-Fi 和以太網通信技術的物聯網設備定義的發現與控制通信協議。使用 SDDC 協議開發的物聯網設備能被 EdgerOS 自動管理,因此推薦 Wi-Fi 和以太網通信技術的物聯網設備使用 SDDC 協議與 EdgerOS 通信。
- SDDC 協議實現了以下功能:
-
- EdgerOS 發現設備;
-
- EdgerOS 邀請設備加入;
-
- 設備加入和退出 EdgerOS;
-
- EdgerOS 維持設備 Online 狀態;
-
- EdgerOS 與設備間的雙向數據通信,數據可加密,支持帶有消息重傳和確認的可靠通信方式。
- SDDC 協議流程如下圖:
二、協議的實現原理
- SDDC 協議是基于 UDP 協議實現的,如圖所示,UDP 報文的數據部分的前 16 個字節實際上就是 SDDC 數據報的頭部:
- 對于 SDDC 協議的頭部來說,它的結構組成如下:
- 說明:
-
- magic_version 標志著 SDDC 協議的版本號;
-
- flag 分別為 0x00(無標志)、0x10(緊急標志)、0x20(加入標志)、0x40(請求標志)、0x80(確認標志);
-
- type 分別為 0x00(Discover 消息)、0x01( Report 消息)、0x02(更新消息)、0x03(邀請消息)、0x04(PING消息)、0x05(普通消息)、0x60(系統時間消息);
-
- seq_no:SDDC 數據報的序列號;
-
- MAC[0]-MAC[2] 和 MAC[3]-MAC[5]:設備的6字節MAC地址數組;
-
- security:選擇是否進行加密通信,設備也可以通過此標志位設置使用設備密碼;
-
- data_len:sddc payload 的長度。
三、協議的實現流程
- Spirit 1(Spirit 1 是翼輝愛智推出的一款高性能、高速率、高可靠、低延時的智能邊緣計算機) 在廣播地址發送一個值為 1500568c409505fe800004b700000000 的 UDP 報文,其中 flag_type 為 00 ,代表這是一條發送到所有連接到 Spirit 1 的網絡的設備的【發現】報文,用于搜索所有的 SDDC 設備。
- 設備收到 Discover 消息,會回復一條 flag_type 為 01 代表 Report 消息的 UDP 報文。
- Spirit 1 邀請設備加入到自己的設備組。
- 在加入之后,普通消息一般為 flag_type 為 45 的 UDP 報文 ,如下是 Spirit 1 向設備發送的消息,其中 flag 為 4 代表請求包,type 為 5 代表普通消息,且 seq_no 標志為 67 95:
- 設備收到消息后,會對消息進行處理,假如需要確認則會回復一個確認包。flag_type 為 84,其中 flag 為 8 代表確認包,type 為 5 代表普通消息,且 seq_no 標志為 67 95 ,代表回復的是 67 95 的確認包。我們知道 UDP 數據報是無連接的,SDDC 協議使用 seq_no 機制可以保證數據有序。
- 當 Spirit 1 和 設備沒有進行消息傳送的時候, Spirit 1 會發送 flag_type 為 44 的請求 PING 包,等待來自遠程設備的回復。當遠程設備未回復時,系統將自動重新發送此消息,直到遠程設備響應或超時。
- 當設備收到請求 PING 包時,設備會向該 seq_no 的包回復一個 flag_type 為 84 的 確認包,這樣 Spirit 1 就知道設備還在線。
四、更多
- SDDC 數據報是基于 UDP 協議實現,該通信協議免費開源,實現簡單,可以有效降低開發成本,在 UDP 的基礎上做到了安全可靠、有序到達,除此之外還有許多功能,比如可以發送時間戳消息,這樣沒有 RTC 芯片的無狀態設備也可以同步網絡時間;可以發送緊急消息,這樣設備或系統可以優先處理等。