一、背景
在物联网场景开发中,大多数通信模组都支持TCP、UDP、MQTT、CoAP、HTTP、LwM2M等网络通信协议,其中既有负责传输层协议,也有应用层协议,不同协议适用的场景也不尽相同。
二、协议分层
上图中举例了网络分层中最常见的几种协议:
- 应用层:应用程序负责将数据以相应规则(协议)进行包装,发给传输层
- MQTT:消息队列遥测传输
- CoAP:受限应用协议
- HTTP:超文本传输协议
- 传输层:负责将应用层传输过来的数组进行分组,为确保终端接收数据的顺序和完整性,会对每个分组进行标记,交给网络层
- TCP:传输控制协议
- UDP:用户数据协议
- 网络层:负责将传输层发过来的数据分组发送到目标终端
- IP:网际协议
- 链路层:为网络层发送和接收数据单元
- Ethernet:以太网传输协议
三、MQTT vs TCP
传输层协议负责传输数据,好比一辆物流配送的火车。但我们想让货物去完好运到目的地,就需要做打包、装车、验货、入库、签回单等工作。这些工作也就是应用层协议要做的工作。所以物联网终端设备想要对数据进行稳定、可靠、高效的交互,就需要使用应用层协议,而不是直接使用传输层协议。
四、MQTT vs CoAp
特性 | MQTT | CoAp |
传输层 | TCP | UDP |
协议头部 | 可变,最小2字节 | 固定4字节 |
资源开销 | 低 | 非常低 |
消息模型 | 发布/订阅(Pub、Sub) | 请求/响应(RESTful) |
消息可靠性 | 高 | 较低 |