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个字节 | 说明 |
1 | GET | 0x01 | 根据请求URI定位资源,从相符合的信息中获取对应的表现 |
2 | POST | 0x02 | 创建新资源或者更新目标资源 |
3 | PUT | 0x03 | 更新或创建由请求URI定位的资源 |
4 | DELETE | 0x04 | 删除由请求URI定位的资源 |
响应码有以下几种:
Success 2.xx 代表客户端请求被成功接收并被成功处理 Client Error 4.xx 代表客户端请求有错误,比如参数错误等 Server Error 5.xx 代表服务器在执行客户端请求时出错 |
常见响应码示例对应表格:
序号 | 响应码 | 报文第2个字节 | 说明 |
1 | 2.05 | 0x45 | Content 这个响应码类似HTTP的响应码200(“OK”),但仅用于GET请求的响应。 |
2 | 4.05 | 0x85 | Method Not Allowed 这个响应码类似HTTP的响应码405(“Method Not Allowed”),但并没有类似的Allow头部。 |
3 | 5.05 | 0xA5 | Proxying Not Supported 请求中包含Proxy-Uri选项或者使用Proxy-Scheme,但是服务端无法(或者不愿意)为其指定的URI做正向代理。 |
3 | 0 | 0 | Empty Message,空信息,一般用于PING |
参考链接:
https://blog.csdn.net/li_c_yang/article/details/118803476