CoAP协议学习

CoAP(Constrained Application Protocol) 协议是为资源受限情况( 功率、存储空间等) 下定义使用的网络传输协议。对于CoAP 的底层协议,目前RFC 文档中使用UDP ,可以采用DTLS 加密处理,加密是UDP 端口5684 ,非加密时端口为5683 ,同样可以通过SMS TCP SCTP 传输,而UDP-lite UDP zero checksum 目前协议不支持。而CoAP 的协议方式定义和HTTP 类似,所以可以采用代理服务器进行协议间转换。
消息结构

协议对消息的总长度做了一些定义,主要期望数据在下面协议层次封装时不需要拆包出来,所以消息的总长度,依赖于下层协议的数据包的总长度。
Version (Ver)
占用2bits ,携带版本号信息,目前设置为1 ,其它值留于后续协议扩展使用。
Type (T)
占用2 比特, 指示消息类型,消息分为:confirmable(CON)-0 Non-Confirmable(NON)-1 Acknowledgement(ACK)-2 Reset(3) UDP 传输不提供可靠传输,在CoAP 层添加了机制可选择用于保证传输的可靠,当然对于流程也需要更多控制,包括拥塞控制、重传间隔、重传次数、定时器等等。
Token Length (TKL)
占用4 比特,指示token 占用长度,其值目前定义为0-8 有效,9-15 目前不使用。
Token
占用长度0-8 字节,其真实长度由Token Length 的值获得。Token 主要用来关联对应Request Response 消息。
Code
占用8 比特,其中3 个比特用于分类指示,剩余的5 比特用于指示详细的编码类型,指示请求或者回应具体编码格式内容,具体为请求的方法及出错标志的回复等。表示方式等级. 详细指示,0.00 则表示为空消息(Empty) 。类型分为0-a request 2-a success response 4-a client error response 5-a server error response 。具体如下
CoAP协议学习_第1张图片
关于Request 的四个方法Get Post Put Delete 的不同,Get 类似读取动作,而Post Put 请求创建、修改资源,Delete 请求删除资源。关于Post Put 的具体不同,两者的定义 The PUT method requests that the resource identified by the request URI be updated or created with the enclosed representation. The POST method requests that the representation enclosed in the request be processed. 理解上Put Post 操作类似,而Put 需要对具体的资源进行操作,所以说明上强调URI ,而Post 可以对资源集合操作。
Message ID
占用16 比特,按照一定次序要求的消息编号,能够用来区分不同的消息。主要用来进行消息重复传输判断、ACK/Reset 和对应消息的关联等处理。
Option
Option 包含三部分内容Option Number the length of option value option value Option Number 的表现形式不是绝对值,而是填写的与前一个Option Number 的差值Option Delta ,第一个Option Delta 基于初始Option Number 0 基础上运算。Option 的格式定义如下:
CoAP协议学习_第2张图片
Option Delta (extended) Option Length (extended) 的长度为0-2 字节,而Option Value 的长度通过Option Length extended 值指示,Option Delta Option Length 分别占用4 比特,当取值为0-12 时可直接使用,而13 是表示使用一个字节扩展表示( 使用时需要将真实值减去13) ,而14 则表示使用两个字节的扩展表示( 使用时需要将真实值减去269) Option Delta 15 不使用,用于避免和有效负载前的0xFF 冲突,而Option Length 15 保留,目前未使用。Option value 可以为0 长度、opaque 类型、unsigned int 类型及String 类型。
CoAP 定义了多种Options ,这些option 可以定义目标地址表示类型、携带信息表示类型等, 既可以使用在requests 中,也可以使用在responses 中。Options 分成critical elective 类型,区别在于接收端处理相应option 出错时是否需要返回”Bad option” critical 是需要返回错误的,而elective 可以选择忽略相应option Option 的类型是在其number 中表示的,奇数表示为critical 类型,偶数表示为elective 类型,同样在number 中携带的还有代理安全模式及秘钥类型配置。
消息及其类型对应关系
CoAP协议学习_第3张图片
1 表示可使用,0 表示不能使用,x 表示在RST 时可用。Response 可以和ACK 一起发送,这种情况称为Piggybacked, 也可以采用独立发送separate 模式。
参考协议
rfc7252 The Constrained Application Protocol (CoAP)

你可能感兴趣的:(通信系统)