正反两个传输方向 物联网中,我们会有“正向”和“反向”两个数据传输方向。 正向:终端设备发送数据给服务器,也叫上行。例如一个温度传感器向服务器上报温度数据。 反向:服务器给终端设备发控制命令,也叫下行。例如通过服务器给智能窗帘下发“关窗帘”的指令。 终端能找到服务器,但服务器找不到终端不管是互联网还是物联网,都面临这个问题。 终端能通过IP地址、域名等方式找到服务器。但是终端自己没有域名,也没有独立不变的IP地址,服务器不能主动找到终端。 服务器要找到终端,就需要“长连接”
要想随时随地被服务器找到,就需要建立一个通道(长连接)。不管是Socket还是MQTT,都会建立这个长连接。例如微信、QQ这样的即时通信,以及摩拜单车的开锁等。 如果没有这个长连接,就不会收到微信推送的消息,单车也做不到立刻开锁。 要维持长连接,就需要“心跳包”终端设备和服务器之间的这个“长连接”,实际上是个虚拟的连接,中间经过了无数道网络节点,每个节点都可能把这个长连接断掉。 因此终端设备需要定期给服务器发送一个心跳包,告诉服务器“我还活着、我在这里,不要把我踢掉!”。一般是几分钟一次。 但是,心跳包很耗电对于手机,几分钟发一个心跳包,耗电不算大,还能接受。(iPhone只维持一个系统级长连接,而Android每个APP有自己的长连接,所以Android比iPhone更费电一些) 但对于电池供电的物联网设备,这个心跳包就非常耗电了。首先,不能断开和基站之间的信号连接,信号一断,连接就断了。其次,每次发送心跳包,至少要几秒钟的时间,需要大功率发射信号。 拿摩拜单车举例,虽然内置了超过5000mAh的锂电池,但是依然需要充电。第一代摩拜单车骑起来那么费劲,主要就是要通过骑行给电池充电。后面的单车,也免不了一块太阳能充电板来充电。 电池供电的物联网终端,如何省电?想要省电,必须要把通信模块完全关闭掉,只维持RTC运行。此时是没有连接到网络上的。 终端设备定期唤醒一次,连上服务器,上报消息,接收指令,然后再关闭,继续休眠。 服务器无法随时随地找到终端,只有等终端唤醒之后才能联系上。 OFO的单车和远程抄水表终端,都是这样的方式。所以一节电池能用几年。 为什么手机不需要心跳包也能接电话?2G网络下,手机的在网待机电流约2mA,挺大的。这是因为手机和基站之间本身就有“心跳包”,用来让基站随时找到手机。因此不需要TCP/IP的心跳包,也能够随时接收到电话,和短信。 NB-IOT的心跳包机制NB-IOT和2G一样,基站都可以随时找到物联网终端。以现在国内最成熟的中国电信的NB-IOT系统为例,没有使用HTTP和MQTT传输数据,而是采用了最轻量化的CoAP传输协议。传一次就结束,不维持传统的TCP/IP长连接,也不需要额外的心跳包。采用了NB-IOT网络自己的长连接机制(DRX模式),使基站能够随时向终端发数据。 (NB基站已经做好了心跳包) PSM极致省电模式
NB-IOT还有一个PSM模式,能过做到“1节电池用10年”,就是采用的OFO单车锁和远程抄表那样,定时唤醒系统的模式。此时基站也不能随时找到终端设备。 原文链接:https://www.yunduoketang.com/article/zaixianjiaoyusaasxitong.html
|