MQTT-SN(SensorNetworks)是MQTT协议的传感器版本,最早用于zigBee无线网络,主要用于电池供电、处理器和存储能力有限的设备。基于TCP协议的MQTT对于一些传感器来说还是太重了。这些传感器可能只有几十字节的内存,无法运行TCP协议。MQTT-SN与MQTT的区别1.协议运行层次不同MQTT运行在TCP层,MQTT-SN可以运行在MAC层、IP层和UDP层。MQTT-SN的应用场景主要是各种需要电池供电且对功耗非常敏感的低功耗传感器网络。TCP虚拟长连接需要保持规律的心跳,这对电池来说不是一个好的解决方案。在传感器网络中,链路随时可能中断,必须不断地重新建立TCP连接,耗电量很大。2、QOS增加-1级或3QOS-1级。设置QOS标志时,仍然需要设置3(“0b11”)。-1只是一个标题。该级别只适用于非常简单的应用,不需要建立连接或断开连接,不需要注册或订阅,此时客户端只是向网关发送一个公共消息。发布的消息不需要消息确认。3、MQTT-SN可以使用MQTT的订阅主题格式。也可以使用“/beijing/sen1”等长名称主题或“s1”等只有两个字符的短名称主题。主题ID为“1”,如果不使用长名称主题,则不能使用通配符。4.发布消息与订阅主题相同,可以使用两个字符的短名称主题或使用定义的主题ID。注意:topicID的内容对于不同的客户端可能相同也可能不相同。例如,传感器A订阅了主题ID1,内容为/beijing/sen1,传感器B也订阅了主题ID1,内容为/beijing/sen2,两者内容不同。5.网络架构MQTT-SN多了一个节点,就是MQTT-SN网关。网关的作用主要是协议转换,将底层的MQTT-SN协议转换为MQTT协议格式。如上图所示,网关有两种,一种是透明网关,只用于透传做简单的拆包分组,另一种是聚合网关,将多个节点聚合在一起,发送到消息代理。6、网关发现在MQTT-SN中,客户端不需要记住网关的地址。网关会周期性地广播ADVERTISE信息,其中包含自己的地址,客户端接收到该地址。当有多个网关时,网关需要带上自己网关的网关ID,客户端决定连接哪一个。在任何时候,一个客户端只能连接到一个网关。客户端也可以发送一个网关查询(SEARCHGW消息),此时网关将响应一个GWINFO消息。有两个参数可以防止广播风暴。网关查询消息需要等待一个随机时间。网关查询发送的网关数一般设置为1,即SEARCHGW信息不能跨网关传递。这样就可以灵活配置网关,而不用固定某个网关。7.支持设备休眠如果设备休眠,MQTT-SN网关会先存储消息,等设备醒来后再发送。这有点像手机短信。手机关机后,短信存储在运营商的短信交换中心,手机开机后再发送。
