在IoT 物联网开发中,大多数通信模组都支持 TCP、UDP、MQTT、CoAP、HTTPLwM2M 网络通信协议,其中既有传输层协议,也有应用层的协议,不同协议适用的场景也不同。

我们在设计IoT硬件产品时,通常只需选择一种协议即可。那么,如何选择一种符合业务应用场景的通信协议就显得尤为重要。

网络通信协议分层

719a2c97951b4ccd423101897ce88246.png

上图中例举了网络分层中最常见的协议:

1bc23b7cb18e0f6ef957ade0a40ecbe4.png

MQTT vs TCP

b8340bbbe1e47df096b8b30b6eef4da0.png

d1fc2439460bdac357ac8ddef5ce358a.png

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板制作过程?

531601fed2b99660901bbe14e4f6e748.gif

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐