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