你真的了解 IoT 終端設備接入物聯網平臺的網絡過程嗎?
如今,我們日常生活中每天都使用大量的物聯網設備,比如智能門鎖、地鐵掃碼閘機、早餐店收款播報音箱、汽車充電樁、上班刷臉打卡等,作為 IoT 物聯網領域的開發者,你有想過背后完整的網絡通信過程么?
借助全球開發者使用最廣泛的開源抓包軟件 Wireshark,抓取終端設備網卡通信包,一切就一目了然了。
你會發現終端設備先做了DNS解析,再建立 MQTT 長連接通道,訂閱業務主題,上報采集的數據,通過發送心跳包實現連接保活,業務處理完后主動斷開長連接。
1.DNS 解析
DNS 服務是計算機域名系統 (Domain Name Service) 的縮寫,它是由域名解析器和域名服務器組成的。域名服務器是指保存有該網絡中所有主機的域名和對應IP地址,并具有將域名轉換為IP地址功能的服務器。其中域名必須對應一個IP地址,而IP地址不一定有域名。
觀察DNS網絡包,你會發現終端設備先去請求了 MQTT-Broker 服務器域名對應的 IP 地址。在 DNS 的 Answer 中終端設備獲得了 addr 值,用于接下來的TCP/IP 網絡連接。
2.TCP 三次握手
終端設備建立 MQTT 長連之前,需要先建立 TCP連接,即終端設備與MQTT-Broker 服務器的三次握手。
3.MQTT 建立連接 CONNECT
MQTT(消息隊列遙測傳輸) 是基于 TCP/IP 協議棧而構建的支持在各方之間異步通信的消息協議。MQTT 在空間和時間上將消息發送者與接收者分離,因此可以在不可靠的網絡環境中進行擴展,使用了發布和訂閱(Pub/Sub)的模型。
在 TCP 連接基礎上,終端設備主動發起 MQTT 的 CONNECT 指令,包含協議版本 v3.1.1,心跳時間 60s,連接標識 ClientId,用于認證的 Username 和 Password,如下圖。
MQTT-Broker 服務器收到終端設備建立連接請求,身份驗證通過后,應答CONNACK報文,其中 ReturnCode 為0,如下圖。
4.MQTT 訂閱主題 SUBSCRIBE
終端設備建立 MQTT 連接后,需主動訂閱業務主題,用于接收云端下發的控制指令,如下圖。
MQTT-Broker 服務端成功建立訂閱關系后,會給終端設備響應SUBACK,如下圖。
5.MQTT 上報數據 PUBLISH
終端設備采集到數據后,可以通過PUBLISH主動將數據發送到云端,同時設置消息主題Topic,數據報文Payload,以及QoS,如下圖。
MQTT-Broker 服務端成功接收數據后,如果是QoS=1消息,會響應PUBACK,如下圖。
6.MQTT 心跳 PINGREQ
當終端設備和 MQTT-Broker 服務器之間長時間沒有業務包交互時,就需要通過心跳包 PINGREQ/PINGRESP 來實現網絡長連接通道保活。
終端設備發送 PINGREQ 報文,如下圖。
MQTT-Broker 服務器響應PINGRESP報文,如下圖。
7.MQTT 心跳 DISCONNECT
當終端設備需要斷開 MQTT 長連接時,可以MQTT-Broker 服務器主動發送DISCONNECT 報文,如下圖。
8.TCP 連接斷開
當終端設備的 MQTT 長連接斷開后,TCP 也會隨之銷毀,如下圖。
以上就是通過 Wireshark 網絡抓包工具,從終端設備視角抓包分析 IoT 物聯網設備完整網絡通信過程,希望對你有所幫助!