CoAP 是一个基于 REST 模型的网络传输协议。主要用于轻量级 M2M 通信。由于物联网中的很多设备都是资源受限型的,即只有少量的内存空间和有限的计算能力,所以传统的 HTTP 协议应用在物联网上就显得过于庞大而不适用,CoAP 应运而生。
本文介绍物联网平台支持的CoAP协议规范;
1.概念
支持 RFC 7252 Constrained Application Protocol协议,更多信息,请参见RFC 7252
2.协议内容
CoAP是一个完整的二进制应用层协议,消息格式紧凑,默认运行在UDP上。
一个CoAP资源可以被一个URI所描述,例如一个设备可以测量温度,那么这个温度传感器的URI被描述为:CoAP://machine.address:5683/sensors/temperature。请注意,CoAP的默认UDP端口号为5683。
3.CoAP头
-
【Ver】版本编号。
-
【T】报文类型,CoAP协议定了4种不同形式的报文,CON报文,NON报文,ACK报文和RST报文。
-
【TKL】CoAP标识符长度。CoAP协议中具有两种功能相似的标识符,一种为Message ID(报文编号),一种为Token(标识符)。其中每个报文均包含消息编号,但是标识符对于报文来说是非必须的。
-
【Code】功能码/响应码。Code在CoAP请求报文和响应报文中具有不同的表现形式,Code占一个字节,它被分成了两部分,前3位一部分,后5位一部分,为了方便描述它被写成了c.dd结构。其中0.XX表示CoAP请求的某种方法,而2.XX、4.XX或5.XX则表示CoAP响应的某种具体表现。
-
【Message ID】报文编号。
-
【Token】标识符具体内容,通过TKL指定Token长度。
-
【Option】报文选项,通过报文选项可设定CoAP主机,CoAP URI,CoAP请求参数和负载媒体类型等等。
-
【1111 1111B】CoAP报文和具体负载之间的分隔符。
4.方法
POST、GET、PUT、DELETE
5.数据类型
-
【text/plain】 编号为0,表示负载为字符串形式,默认为UTF8编码。
-
【application/link-format】编号为40,CoAP资源发现协议中追加定义,该媒体类型为CoAP协议特有。
-
【application/xml】编号为41,表示负载类型为XML格式。
-
【application/octet-stream】编号为42,表示负载类型为二进制格式。
-
【application/exi】编号为47,表示负载类型为“精简XML”格式。
-
【applicaiton/cbor】编号为50,可以理解为二进制JSON格式。
6.消息类型
-
CON:需要被确认的请求,如果CON请求被发送,那么对方必须做出响应。
-
NON:不需要被确认的请求,如果NON请求被发送,那么对方不必做出回应。
-
ACK:应答消息,接受到CON消息的响应。
-
RST:复位消息,当接收者接收到的消息包含一个错误,接收者解析消息或者不再关心发送者发送的内容,那么复位消息将会被发送。
7.通道安全
使用 DTLS v1.2保证通道安全,更多信息,请参见DTLS v1.2。