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长,可以是一个从07的数字,dd是5-bit长。
    	它一个两位的数字,从0031。
    	分类信息c可以代表是
    	一个请求(0),
    	一个成功的响应(2),
    	一个客户端错误响应(4),
    	一个服务端错误响应(5)。
    
     coap定义的响应码格式如图 ![method_code](https://img-blog.csdnimg.cn/20200413105336509.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpbnV4X2N3Zw==,size_16,color_FFFFFF,t_70#pic_center)
    

response_code
C1 6A:message ID
b2、在分析TKL个字节
6A C1 D6 CB: token值
b3、options分析
在options中就可以看到coap协议的紧凑性尽量节省每一个字节
首先看一下options的结构:
options
option 字段值含义:
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 格式如下:
fromat

继续分析:
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升级包的传输,暂时还没有去详细分析,有感兴趣的同学可以一起讨论下。

发布了11 篇原创文章 · 获赞 1 · 访问量 2441

猜你喜欢

转载自blog.csdn.net/linux_cwg/article/details/105482991
今日推荐