CoAP协议简介

CoAP约束应用协议(Constrained Application Protocol)是一种专用于受限设备的Internet应用协议,如RFC7252所定义,它使那些被称为“节点”的受约束设备能够使用类似的协议与更广泛的Internet进行通信。

目前越来越多的物联网智能设备也用上了此协议,如果想要完全理解CoAP协议,可以参考RFC7252文档,这里我们用工具、代码和流量捕获的方式来简单了解一下此协议。

首先我们需要Linux系统来搭建服务端,这里使用的是Ubuntu 20.04(示例ip为192.168.182.128):

# 安装依赖库及工具
sudo apt-get install libtool doxygen asciidoc libssl-dev make
# 下载libcoap源码
git clone https://github.com/obgm/libcoap.git
# 编译、安装
cd libcoap/
./autogen.sh
./configure
make
sudo make install
# 开启5683端口访问
sudo ufw allow 5683
# 运行示例
cd examples/
./coap-server

客户端运行在Windows系统,使用Firefox 55(高版本不支持)、Copper插件,点击这里可以下载

将安装包文件下载安装后(建议断网后安装避免升级),把extensions.7z解压到火狐浏览器插件文件夹下,一般路径为:

C:\Users\用户名\AppData\Roaming\Mozilla\Firefox\Profiles\随机字符串.default\

目录如下所示:

打开浏览器,关闭自动更新,避免升级。

打开附加组件管理器,启用Copper插件。

重启浏览器后,即可使用Copper插件,如下图所示:

可以点击左上角的Discover按钮发送资源发现请求:

使用Wireshark抓包可以观察流量(端口5683,udp协议),请求包是GET,url为/.well-known/core

GET 返回包,2.05 Content 这个响应码类似HTTP的响应码200(“OK”),但仅用于GET请求的响应。

请求码对应表格:

序号请求报文第2个字节说明
1GET0x01根据请求URI定位资源,从相符合的信息中获取对应的表现
2POST0x02创建新资源或者更新目标资源
3PUT0x03更新或创建由请求URI定位的资源
4DELETE0x04删除由请求URI定位的资源

响应码有以下几种:

Success 2.xx 代表客户端请求被成功接收并被成功处理
Client Error 4.xx 代表客户端请求有错误,比如参数错误等
Server Error 5.xx 代表服务器在执行客户端请求时出错

常见响应码示例对应表格:

序号响应码报文第2个字节说明
12.050x45Content 这个响应码类似HTTP的响应码200(“OK”),但仅用于GET请求的响应。
24.050x85Method Not Allowed 这个响应码类似HTTP的响应码405(“Method Not Allowed”),但并没有类似的Allow头部。
35.050xA5Proxying Not Supported 请求中包含Proxy-Uri选项或者使用Proxy-Scheme,但是服务端无法(或者不愿意)为其指定的URI做正向代理。
300Empty Message,空信息,一般用于PING

参考链接:
https://blog.csdn.net/li_c_yang/article/details/118803476

https://github.com/WildDogTeam/contribute/blob/master/source/RFC7252-%E3%80%8A%E5%8F%97%E9%99%90%E5%BA%94%E7%94%A8%E5%8D%8F%E8%AE%AE%E3%80%8B%E4%B8%AD%E6%96%87%E7%89%88.md

https://blog.csdn.net/song_lee/article/details/105599391

https://blog.csdn.net/q361750389/article/details/85409702/