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