- 1
- 2
- 3
- 4
- 5
CoAP协议交互深入剖析
资料介绍
CoAP协议交互深入剖析 引言:CoAP是专为资源受限设备设计的轻量应用层协议,基于UDP实现,类似HTTP的请求响应模型。本文以一次真实的项目调通经历为线索,复盘CoAP交互中的关键细节。 1) 缘起 这个项目要在低功耗传感器上实现远程数据上报与参数下发,因设备资源紧张、网络是UDP通道,最终选定CoAP协议。文档里写得简洁,可真正联调起来才发现,轻量的代价是细节的讲究。 CoAP和HTTP最大的区别在于传输层。HTTP跑在可靠的TCP上,而CoAP直接跑在UDP上,没有TCP的流量控制与重传保障。于是可靠性就得靠CoAP自身机制来补,这成了我第一轮就踩进去的地方。 CoAP的可靠性依赖CON报文与ACK确认机制,这是与HTTP最本质的差异。 2) 第一轮尝试 第一轮我按最简单的思路搭:客户端发CON请求,等待服务器ACK,收到即算完成。单看协议流程,似乎顺理成章,实测单次请求也确实能通。我一度以为调通了。 可问题很快浮现。在信号不稳定或服务器处理稍慢时,客户端发出去的CON报文若没收到ACK,就会陷入等待。CoAP虽然定义了超时重传,但重传次数、退避时间都是要配置的参数,默认值不一定契合现场。 更隐蔽的是,我在处理ACK时没有区分"对请求的确认"和"对响应消息本身的确认",导致服务器明明回了响应,客户端却因确认类型不匹配而误判为失败,白白重发。 3) 遇到的坑 第一个坑是确认类型不匹配。CoAP有CON与NON两种消息,CON需要ACK确认,NON则不需要。若请求用CON而响应侧回的是NON,或者双方对确认语义理解不一致,就会出现响应已到却握手失败的怪象。 第二个坑是分块传输。CoAP的数据帧有长度限制,超过上限的数据需要分块(Block)传输。一开始我没启用分块,导致稍长的配置数据根本传不过去,服务器端静默截断,客户端却以为成功了。 第三个坑是UDP丢包下的幂等处理。
部分文件列表
| 文件名 | 大小 |
| CoAP协议交互深入剖析.docx | 39K |
最新上传
-
yahuang001 打赏3.00元 3天前
-
yahuang001 打赏1.00元 3天前
-
zhongshaoxiong 打赏3.00元 3天前
-
他山之石可攻玉 打赏60.00元 3天前
用户:烟雨
-
江岚 打赏210.00元 3天前
用户:潇潇江南
-
江岚 打赏100.00元 3天前
-
21ic下载 打赏310.00元 3天前
用户:gsy幸运
-
21ic下载 打赏310.00元 3天前
用户:zhengdai
-
21ic下载 打赏310.00元 3天前
用户:江岚
-
21ic下载 打赏210.00元 3天前
用户:潇潇江南
-
21ic下载 打赏60.00元 3天前
用户:他山之石可攻玉
-
21ic下载 打赏60.00元 3天前
用户:烟雨
-
21ic下载 打赏60.00元 3天前
用户:w178191520
-
21ic下载 打赏60.00元 3天前
用户:w993263495
-
21ic下载 打赏110.00元 3天前
用户:xzxbybd
-
21ic下载 打赏60.00元 3天前
用户:zq_1943
-
21ic下载 打赏20.00元 3天前
用户:kk1957135547
-
21ic下载 打赏20.00元 3天前
用户:sun2152
-
21ic下载 打赏20.00元 3天前
用户:铁蛋锅
-
21ic下载 打赏20.00元 3天前
用户:xuzhen1
-
21ic下载 打赏20.00元 3天前
用户:w1966891335
-
21ic下载 打赏35.00元 3天前
用户:有理想666
-
21ic下载 打赏15.00元 3天前
用户:nuaanuaa111
-
21ic下载 打赏20.00元 3天前
用户:liqiang9090
-
21ic下载 打赏15.00元 3天前
用户:ningmengge
-
21ic下载 打赏10.00元 3天前
用户:mulanhk
-
21ic下载 打赏5.00元 3天前
用户:asys
-
21ic下载 打赏10.00元 3天前
用户:舞蹈荀彧
-
21ic小能手 打赏5.00元 3天前
资料:磁编码器开源方案
-
21ic小能手 打赏5.00元 3天前
-
21ic小能手 打赏5.00元 3天前
-
江岚 打赏20.00元 3天前
-
江岚 打赏50.00元 3天前
-
江岚 打赏20.00元 3天前
-
江岚 打赏10.00元 3天前
-
21ic小能手 打赏10.00元 3天前
-
21ic小能手 打赏8.00元 3天前
-
21ic小能手 打赏8.00元 3天前
-
21ic小能手 打赏5.00元 3天前
-
21ic小能手 打赏3.00元 3天前




全部评论(0)