互联网的WEB应用无处不在,很多依赖于REST协议架构。为在大多的受限节点上(如RAM和ROM很有限的8位单片机)及受限网络上(如6LoWPAN)也能支持REST,工程师们着手处理“受限制的restful环境”,即CoRE。如6LoWPAN的受限网络支持将IPv6数据分成小包,但极大降低了传输效率。
CoAP(Constrained Application Protocol)的主要目标之一是设计一个通用的Web协议,保持非常低的开销,以满足受限环境的特殊要求,如能源、楼宇自动化或其它M2M应用。实现REST的一个通用HTTP子集,针对M2M应用做了简化,而非盲目压缩HTTP。COAP协议可很容易转换为HTTP,方便和现有WEB体系转化,同时还能满足诸如内置发现、组播支持和异步消息传输等。
3.1 COAP协议特征属于一种应用层协议,运行于UDP协议之上而不是像HTTP那样运行于TCP之上。
1) COAP协议网络传输层由TCP改为UDP;
2) 基于REST,server的资源地址也类似URL格式,客户端同样有POST,GET,PUT,DELETE方法来访问server,对HTTP做了简化;
3) COAP是二进制格式,HTTP是文本格式,COAP比HTTP更加紧凑;
4) 小巧、轻量化,最小长度仅仅4 Bytes,一个HTTP的head都要几十Bytes;
5) 支持可靠传输,数据重传,块传输;
6) 支持IP多播, 可同时向多个设备发送请求,鸿蒙设备的发现功能就是用的这个特性;
7) 非长连接通信,适用于低功耗物联网场景;
8) 支持观察模式;
3.2 协议类型及结构COAP协议有4种消息类型。
CON: 需要确认,如果CON请求被发送,那对方必须做出响应,确认收到消息,用以可靠消息传输;
NON: 不需要被确认的请求,如果NON请求被发送,那对方不必作出回应。适用于消息会重复频繁的发送,丢包不影响正常操作。和UDP很像,用于不可靠消息传输;
ACK: 应答消息,对应的是CON消息的应答;
RST: 复位消息,可靠传输时候接收的消息不认识或错误时,必须回RST消息;
协议结构定义在源码discovery/coap/include/coap_def.h中对COAP协议的结构体进行了定义。
3.3 COAP包的传输传输方式为客户端和服务器端模式,服务器端启动COAP包的监听服务。
源码discovery/coap/include/coap_socket.h中提供了COAP包的发送和接收函数定义。
3.4 COAP设备发现源码discovery/coap/source/coap_discover.c实现了基于COAP的设备发现功能。
3.5 COAP的安全性
TLS不能用来保证UDP上传输的数据的安全,因此Datagram TLS试图在现存的TLS架构上提出扩展,使之支持UDP。