简单来说,CoAP协议主要是用在一些性能、功耗等受到限制的设备节点上
其运行在UDP协议之上,是一个完整的二进制应用层协议
并且其实现参考了HTTP
回到源代码上,在软总线模块里面,CoAP协议被定义在discovery/coap/include/coap_def.h
之中
首先是CoAP协议的头部(COAP_Header):
1 | typedef struct { |
ver为 2 bit大小的无符号整形,代表了CoAP的版本号
type为 2 bit大小的无符号整形,代表了CoAP的消息类型,四种类型如下:
- 需要确认消息 CON
- 不需要确认消息 NON
- 确认应答消息 ACK
- 复位消息 RST
其最主要实现了两种传输质量,即可靠消息传输 与 不可靠消息传输。
tokenLen为 4 bit大小的无符号整形,代表了Token字段的长度
code为 8 bit大小的无符号整形,代表了消息的详细类型,如请求(COAP_MethodTypeEnum)和响应的具体类型
紧接着下面是CoAP协议的数据段和设置段的定义:
1 | typedef struct { |
再往下就是CoAP的完整数据包的定义:
1 | typedef struct { |
len代表了该报文的长度
header指的是上面的CoAP的头部
payload指的是该报文的有效负载的数据
另外protocol定义了该报文是基于UDP或是TCP协议进行传输的
1 | enum COAP_ProtocolTypeEnum { |
另外CoAP协议参考了HTTP协议,其请求的方法里面就有规定了四种请求方法
- GET,通常用于获取
- POST,通常用于提交
- PUT,通常用于修改
- DELETE,通常用于删除
1 | enum COAP_MethodTypeEnum { |