阿里云物联网平台入门训练营:课时1:IoT设备接入基础(四)
课时1:IoT设备接入基础(四)
假设这个设备都是卖到欧洲去的,就在控制台上面把这些设备分发到德国上面去,就相当于把设备的元素写到德国这里以后,就相当于把设备分发到全球的某一个region上面去,分发完以后在设备接入的时候第一步不是直接接入,分发中心已经已经把这个问题处理掉了,所以他就会通过这个就近接入智能DNS域名。
如果是在国内还是比较简单,因为国内的话全球分发中心在上海,网络非常快速基本上都没有什么网络问题。
国内直接通过智能DNP网络然后直接到达上海分发地区,就能确定我的国内设备是在上海还是深圳还是北京。然后这个分发中心就会把设备所在的接入地址发给你,设备就把这个地址存起来下次连的时候就不用再做设备连接,就可以直接点到对应的最近的一个接入点上面,比如说上海,深圳,北京。
针对国外的设备,我们是这样做的,就相当于你设备首先通过DNS,然后DNS我能解析出来你这个设备,比如说是在美国,因为我这个全球分发中心在上海,就相当于知道所有的数据源。这个设备是在德国还是在美国只有全球分发中心知道,那我是怎么快速知道的,因为你设备在国外了,如果你连国内那肯定有网络问题,所以我们在这个中间支持了这个全球加速的通道,你可以认为这就是阿里云的全球加速。
就是通过一个专线,比如说你设备在美国,那你就在美国直接连美国的一个全球加速接入点,然后通过接入点记录以后,通过内部走专线直接走到国内,这样的话就是这样的话来保证就说国外的设备来获取就近接入点能快速稳定的来获取就近接入点。这边做的就是一个全球加速专线的一个东西。然后通过这三块东西一个是lOT,一个是分发中心,再加上加速来解决所有设备的一个全球就近接入的一个能力。
设备协议的介绍
讲一下我们设备的一个协议的介绍,就是平台支持设备及协议的一个接入介绍,一个最基础的就是MQTT这个也是现在物联网上面用的最多的一个协议。
然后他是一个基于TCP的一个通信就是一个Pub/Sub 发布订阅模式的异步通信协议。HTTP就是一个操作协议,这个就不介绍了HTTP大家应该都熟悉。
COAP然后他的话其实是基于IPv6的低功耗局域网设计的一个应承协议,他其实基于REST架构风格,跟HTTP协议格式挺像的,区别就是他是基于UDP的,HTTP他是基于TCP的。这个模式的话就是协议方面比较精简,在低功耗方面来说相对会比较多,然后右边就是这三种协议在不同场景下的一些情况。
首先是协议层,我们首先来对比一下MQTT协议和COAP协议。MQTT协议的协议层是TCP,COAP层的话是UDP,其实MQTT和COAP都是为了低功耗设计的。
通信方面就有差别MQTT的话是Pub/Sub 模式,COAP就是 模式其实就是这个消息对的PC模式。
然后底层的话,TLS和DTLS其实都差不多,就是一个是在下面的,一个是上面,我觉得他主要区别是推送消息的一个实时性。比如说针对MQTT协议,因为他走的是TCP的长连接,所以如果你的业务服务器要往设备退一条消息,那么这个实时性是非常高的,就是基本上用服务推下去的时候设备就马上能收到,或者马上就能反馈,所以就说这个实时上面MQTT非常有优势。
COAP这个会有会有延迟,因为COAP的话就是所有的数据一般情况下都是通过设备主动去获取,然后服务端再返回。
COAP协议他设计的时候目的是他的协议类型有关他是走UDP,现在我们的网络一般都是接后面的,因为我们的接的一般是IPV4,然后IPV4的话大家也都知道IP全球都紧张,IPV4的话都是放在neit后面。
然后neit后面的话就会导致打洞的问题,然后那个打洞的话就会导致你这个COAP模式不能把消息走UNP直接下推下去。所以现在COAP一般用的比较少,但是我觉得什么时候我们把ipv6这块东西全部普及了,比如大家都是用ipv6这块,那其实就没有neit问题了。因为ipv6解决了就不会有IP资源这些问题,就是数量资源的问题。如果走ipv6的话,neit这个的话就可以不出现延迟问题,服务端也能快速的把消息推到设备端上面去。
所以说COAP他设计上面其实还是更加偏向于IPV 6的,这两个的话就是COAP的最大的一个区别。
他们的网络开销就是不管是COAP还是MQTT,其实设计的都是非常精简,所以在网络开销上面他们两个都差不多。
我觉得他们的主要区别其实还是在一个就是实时服务推送的一个问题。
HTTP的话,主要问题的话其实就是一个功耗问题,就是说你在嵌入式设备上面,HTTP一般还是用的不是太多,就是因为你HTTP光是一些文本协议就存起来,全靠资源包括花一些网络流量,包括一些解析,这个解析起来也是挺麻烦的因为他是文本匹配,跟MQTT,COAP比解析起来会比较麻烦一些。
它的实时推送也是一样,它的实时推送系统的话也会延迟,延期比较大因为它主要还是Req/Rsp模式,但是HTTP,比如说你走H2,那其实这个推送的实时性还是能解决的。
但是一般我们现在不走HTTP我们平台还是更多支持多种模式是Req/Rsp就是没有把HTTP做成一种长连接的HTTP,一般做成短连接的HTTP。
不是用来解决Req/Rsp的问题,然后网络开销的话,有些设备流量要求比较高,如果用HTTP的话对流量的损耗还是比较大。
接入协议-MQTT介绍
下面主要介绍一下我们接入协议阿里云MQTT的一些协议。
MQTT有MQTT3.1/MQTT3.1.1主要支持的能力有PUB,SUB。然后服务质量有QOS0,QSO1,QOS2然后包括clean scssion和遗嘱和保留消息这种这种能力。
然后他的特性主要是六个。
第一点:阿里云MQTT特性就做针对协议,这主要支持PUB,SUB,PING,PONG,CONNECT,ONNECT和UNSUNB。
第二点:这个协议也支持clean scssion这种能力,但是对这些遗嘱保留消息其实是不支持的。
就比如说这个遗嘱主要是用在断开连接的时候再发一条遗嘱消息出来,平台是通过离线消息在线消息就是用户没法自定义,但是可以知道设备离线消息设备是否离线了是否上线我们会把上线消息离线消息在控制台透出。
跟它will,实现比较像,跟遗嘱实现比较像,但是缺少了一些自定义的能力,然后这个保留消息主要是用在保留最后一条消息在设备订阅TAOPKE的时候,还没有找到一个比较合适的场景,所以现在还没支持。
第三点:不支持will,retain msg。
第四点:支持Qoso,QoS1不支持QoS2。
第五点:本来按协议标准SUB QoS的话都是可以支持的,SUB QoS消息也可以支持Qoso,QoS1但是我们现在只能支持这种比较简单的,就是PUB信息上面支持。