在IoT 物联网开发中,大多数通信模组都支持 TCP、UDP、MQTT、CoAP、HTTP、LwM2M 等网络通信协议,其中既有传输层协议,也有应用层的协议,不同协议适用的场景也不同。
我们在设计IoT硬件产品时,通常只需选择一种协议即可。那么,如何选择一种符合业务应用场景的通信协议就显得尤为重要。
网络通信协议分层
上图中例举了网络分层中最常见的协议:
MQTT vs TCP
MQTT 协议在 IoT 场景的优势
传输层TCP协议是否适合直接运用到IoT物联网终端设备上?
传输层协议负责传输数据,好比是一辆物流配送的货车。但我们想让货物完好运到目的地,就需要做打包、装车、验货、入库、签回单等工作。这些工作也就是应用层协议要做的工作。所以物联网设备终端要想对数据进行稳定、可靠、高效地交互,就需要使用应用层的协议,而不是直接使用传输层的协议。
MQTT 相比于 TCP 长连接的优势有如下几点:
1. MQTT协议更标准
MQTT是标准的RFC协议,相比于基于TCP的私有协议而言更加标准。
(1)协议非常完整,能够马上用于生产。设备和云端服务器约定Topic和ayload之后,就能进行通信;私有协议还需要进行大量的验证,排除缺陷。
(2)大量的开源组件,降低开发难度。随着物联网生态越来越好,开源组件越来越丰富,可以减少重复编码和底层Bug。
(3)标准协议利于第三方接入。当第三方设备、平台想要对接的时候,只需拿出标准的MQTT协议对接即可。
2. MQTT协议特点
(1)MQTT协议提供了qos0、qos1和qos2的服务质量,简化了消息发送的工作量。MQTT客户端和服务端通过Session来保障不同的QoS等级。TCP协议需要自己实现类似机制,而MQTT自带这一功能,无需应用开发人员重复造轮子。
(2)心跳机制。不需要自己做业务协议层的心跳了。
(3)MQTT协议可以根据不同Topic来实现消息的业务划分,有灵活的Topic订阅匹配的机制。
(4)MQTT协议支持双向的通信,订阅发布机制。轻松实现远程控制、远程下发、远程升级等功能。
(5)MQTT协议Payload采用二进制协议可以更节约流量。流量比HTTP协议要低
(6)MQTT协议有LWT遗嘱机制,异常情况下,通知相应Topic的订阅者客户端已经离线了。
(7)MQTT协议支持TLS安全,保证数据传输过程的安全性。
(8)MQTT协议轻巧、简单,容易实现,mqtt客户端哪怕在单片机中也可以运行。
(9)MQTT协议支持一对多的消息分发。一次发布,多个客户端订阅,这对于M2M场景很省电、省流量。
(10)MQTT协议客户端Connect时,可以带有用户名和密码,用于验证客户端。服务端可以根据clientid、IP地址、用户名等进行ACL访问控制。可以通过自定义应用消息实现客户端对服务端的身份验证。
(11)MQTT协议可以通过MQTT over websocket来穿越防火墙,不需要开1883(MQTT)或8883(MQTTS)端口。
当然,以上的功能基于TCP自己开发也能做到,但如果我们全部实现了,其实不就是MQTT协议了吗?
与其重复造轮子,不如投入精力到业务架构设计中去。
往期推荐
☞ 云厂商的「物联网平台」不香了吗?
☞ 2021国内四大IoT平台性能对比
☞ 国内MCU行业发展研究报告
☞ 2021年4G通信模组企业排行
☞ 艾瑞 2021中国 IoT物联网平台研究
☞ 动图|带你了解PCB板制作过程?