COAP详解
作者:互联网
COAP协议学习
1分析工具
- 网络包分析利器:wireshark
- COAP协议客户端、服务端:wakaama 源码地址
- 辅助编译工具cmake3:由于wakaama对cmake有版本要求 源码地址
** 文章后附上wakaama、cmake3编译、使用方法及安装步骤等
2COAP协议介绍
- Coap(Constrained Application Protocol)是一种在物联网世界的类web协议,它的详细规范定义在 RFC 7252。COAP名字翻译来就是“受限应用协议”,顾名思义,使用在资源受限的物联网设备上。物联网设备的ram,rom都通常非常小,运行TCP和HTTP是不可以接受的。
2.1 客户端与服务端模拟
-
a、在linux上分别开两个终端,执行如下指令
./lwm2mserver -4
./lwm2mclient -4
-
b、协议详解分析
coap消息格式如下图:
b1、首先分析前4个字节 【44 02 21 86 】
44: 0100,0100 版本号:01 消息类型:00 CON TKL长度:4* 版本号(Ver) 2-bit无符号整型,代表CoAP版本号。本文档(7252)的实现必须设置这个字段为0x01。其它的值为今后其它版本保留。对于带有未知版本号的消息,必须忽略。 * 类型(T) 2-bit无符号整型。代表这个消息的类型是:CON(0), NON(1), ACK(2),或RST(3)。 * Token长度(TKL) 4-bit无符号整型。表示变长的Token字段(0-8字节)的长度。长度9-15是保留的,不能设置长度为9-15。如果设置了长度为9-15,必须被当作消息格式错误来处理。
02:000 00010 code码:0.02
8-bit无符号整型。拆分为3-bit的分类信息和5-bit详细信息。 写作”c.dd”。c是3-bit长,可以是一个从0到7的数字,dd是5-bit长。 它一个两位的数字,从00到31。 分类信息c可以代表是 一个请求(0), 一个成功的响应(2), 一个客户端错误响应(4), 一个服务端错误响应(5)。
coap定义的响应码格式如图 ![method_code](https://www.icode9.com/i/ll/?i=20200413105336509.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpbnV4X2N3Zw==,size_16,color_FFFFFF,t_70#pic_center)
C1 6A:message ID
b2、在分析TKL个字节
6A C1 D6 CB: token值
b3、options分析
在options中就可以看到coap协议的紧凑性尽量节省每一个字节
首先看一下options的结构:
option 字段值含义:
首先分析第一个字节
B2:1011,0010 : option delta为11, option length 为2
option11 为:Uri-Path 长度为2字节 =》 72 64:rd
在接续分析下一个字节
11:0001,0001:option delta为1,注意因为前一个option delta有值,就说明此时的option值为11+1 =12 为:Content-Format, 长度1个字节=》28 :40 格式如下:
继续分析:
39: 0011, 1001: option delta为3 上一个option为12 结果为12+3=15为:Uri-Query 长度为9字节:6C 77 6D 32 6D 3D 31 2E 31
接续分析:
0D 05:0000,1101, 0000,0000:option delta为0 上一个option为15 结果为15+0=15为:Uri-Query ,这里多放一个05是为什么呢?因为在COAP协议中在option delta及option lenth 13,14,15都是有特殊含义的
一个option之中的各个字段的含义如下:
Option Delta:
表示Option的增量,当前的Option的具体编号。
4-bit无符号整型。值0-12代表option delta。其它3个值作为特殊情况保留:
当值为13:有一个8-bit无符号整型(extended)跟随在第一个字节之后,本option的实际delta是这个8-bit值加13。
当值为14:有一个16-bit无符号整型(网络字节序)(extended)跟随在第一个字节之后,本option的实际delta是这个16-bit值加269。
当值为15:为payload标识符而保留。如果这个字段被设置为值15,但这个字节不是payload标识符,那么必须当作消息格式错误来处理。
Option Length:
表示Option Value的具体长度。
4-bit无符号整数。值0-12代表这个option值的长度,单位是字节。其它3个值是特殊保留的:
当值为13:有一个8-bit无符号整型跟随在第一个字节之后,本option的实际长度是这个8-bit值加13。
当值为14:一个16-bit无符号整型(网络字节序)跟随在第一个字节之后,本option的实际长度是这个16-bit值加269。
当值为15:保留为将来使用。如果这个字段被设置为值15,必须当作消息格式错误来处理。
Option Value 共(option Length)个字节。
所以这里的value的长度为:13+5=18 值为:65 70 3D 74 65 73 74 6C 77 6D 32 6D 63 6C 69 65 6E 74
b4、最后分析到什么时候结束呢?
FF: 分隔符
之后全部为payload
3工具编译
cmake3
- wget https://cmake.org/files/v3.6/cmake-3.6.3.tar.gz
- tar -xzf cmake-3.6.3.tar.gz
- cd cmake-3.6.3/ && ./bootstrap && make && make install
如果cmake --version报错,尝试关闭终端重新启动
wakaama
- 编译客户端
下载源码: git clone https://github.com/eclipse/wakaama.git
编译:cmake examples/client/ && make
目录重命名:mv wakaama wakaama_client
*编译服务端
下载源码: git clone https://github.com/eclipse/wakaama.git
编译:cmake examples/server/ && make
目录重命名:mv wakaama wakaama_server
有关BLOCK也是coap的一个重点,主要用于OTA升级包的传输,暂时还没有去详细分析,有感兴趣的同学可以一起讨论下。
标签:15,字节,wakaama,COAP,详解,delta,bit,option 来源: https://blog.csdn.net/linux_cwg/article/details/105482991