1.CoAP协议简介

Coap是一种在物联网世界的类web协议,它的详细规范定义在 RFC 7252。COAP名字翻译来就是“受限应用协议”,顾名思义,使用在资源受限的物联网设备上。物联网设备的ram,rom都通常非常小,不能运行TCP和HTTP协议

2.CoAP协议特点

基于消息模型,以消息为数据通信载体,通过交换网络消息来实现设备间数据通信

对云端设备资源操作都是通过请求与响应机制来完成,类似 HTTP,设备端可通过4个请求方法(GET, PUT, POST, DELETE)对服务器端资源进行操作;

协议包轻量,最小长度仅为 4B;

支持可靠传输,通过确认和数据重传确保数据可靠到达;

支持IP多播, 即可以同时向多个设备发送请求;

非长连接通信,适用于低功耗物联网场景,因为其基于UDP协议,为短连接

3.CoAP协议数据包分析

1.CoAP数据包报文解析

1.CoAP消息头

CoAP消息传输是基于UDP的,即其上层为UDP协议.UDP数据包有报头和数据内容,其中数据内容里面就封装了CoAP消息,此处重点分析CoAP报文

CoAP报文格式如图

1.Ver(2bit)为版本号用于指示CoAP协议的版本号

2.T(2bit)为CoAP协议定了4种不同形式的报文,CON报文,NON报文,ACK报文和RST报文。

T

名称

0

CON报文,一般使用

1

NON报文

2

ACK报文

3

RST报文

3.TKL(4bit):Token Length即CoAP标识符长度。CoAP协议中具有两种功能相似的标识符,一种为Message ID(报文编号),一种为Token(标识符)。其中每个报文均包含消息编号,但是标识符对于报文来说是非必须的。

4.Code(8bit):请求码/响应码。Code在CoAP请求报文和响应报文中具有不同的表现形式,Code占一个字节,它被分成了两部分,前3位一部分,后5位一部分.为了方便描述它被写成了c.dd结构。其中0.XX表示CoAP请求的某种方法,而2.XX、4.XX或5.XX则表示CoAP响应的某种具体表现。

请求码:

Code

请求方式

00

01

GET

02

POST

03

PUT

04

DELETE

响应码:

2.xx:代表请求已成功被服务器接收、理解、并接受

4.xx:代表了客户端可能发生了错误

5.xx:代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器的软硬件资源无法完成对请求的处理.

5.Message ID(16bit):报文编号,每条消息的ID唯一

6.Token:可有可无,标识符具体内容,通过TKL指定Token长度。通过token,客户端收到响应后,取出Token,就可以知道该响应是针对之前哪个请求回复的。

7.Options:报文选项,通过报文选项可设定CoAP主机,CoAP URI,CoAP请求参数和负载媒体类型等等。

其中关注Option Length和Option Value,前者表示资源路径长度,后者指具体资源路径

8.1111 1111:CoAP报文和具体负载之间的分隔符。

2.CoAP消息体:

Payload:实际携带数据内容, 若有携带数据, 前面加payload 标志 OxFF。

2.测试环境搭建

我们在本地端通过python搭建一个客户端和服务端,其中客户端每5秒向服务端发送一次数据,数据内容为Hello world!

3.CoAP数据包获取

通过Wireshark抓包获取

运行Python端程序后开始抓包,添加如下过滤规则udp.port == 5683,其中5683为CoAP协议默认端口

之后可获取如下数据包

42 03 c7 73 66 76 b5 62 61 73 69 63 ff 48 65 6c 6c 6f 20 77 6f 72 6c 64 21

具体解析如下

数据包

含义

42

版本号为1且为CON报文

03

PUT请求

c7 73

Message ID

66 76

Token

b5

Option Delta:11 Option length:5字节

62 61 73 69 63

资源路径名,此处为"basic"

ff

分隔符

48 65 6c 6c 6f 20 77 6f 72 6c 64 21

发送的消息:"Hello world!"

4.UDP模拟CoAP

1.本地测试

直接打开网络调试工具,创建一个客户端,在Python端运行服务器程序,之后将上面数据包直接当作UDP数据包发送,此时会发现服务器收到了数据

网络调试工具配置如下:

2.远程测试:

通过EMQ的coap插件将CoAP协议数据转成MQTT数据,方便上层软件进行MQTT订阅

发送消息路径path命名规则如下:/mqtt/{any_topicname}?c={clientid}&u={username}&p={password}

any_topicname:发布的主题

clientid:客户端ID,此项不可重复

username:用户名

password:密码

示例:/mqtt/topic1?c=client1&u=tom&p=secret

CoAP协议服务器,CoAP协议相关推荐

  1. 基本url是由协议服务器,http协议基础之URL

    http 协议之 URL URI(Uniform Resource Identifier) 统一资源标识符 URI 就像因特网上的邮政地址一样,在世界范围内唯一标识并定位信息资源. URL 统一资源定 ...

  2. 怎么重新启动协议服务器,ssl协议怎么开启

    1.首先打开浏览器,找到工具→Internet选项 2.找到高级选项卡,下面的使用SSL 3.0 勾选之后,点击保存即可. 3.重新打开网站检查.对于chrome浏览器,SSL 和 TLS都协议是默认 ...

  3. 物联网基础之了解CCP协议,COAP协议,MTQQ协议等

    首先介绍下背景.最近开始研究物联网的套件.公司选中了阿里物联网套件,所以博主就开始投入到漫长的开发文档中.由于博主并非嵌入式开发者,所以一些名字没有听过,这对文档的阅读造成了不少的困扰,所以在此记录一 ...

  4. 转:XMPP协议、MQTT协议、HTTP协议、CoAP协议的基本比较

    一.先看下相关国外的专业数据对四大协议的比较: Protocol                                    CoAP                         XMP ...

  5. CoAP协议学习——CoAP基础

    [原连接地址] 更多CoAP文章请参考博文索引--[物联网学习笔记--索引博文] 推广 <IoT开发实战:CoAP卷>已经由机械工业出版社出版,如果想学习CoAP的更多内容请于淘宝.天猫或 ...

  6. 物联网协议之CoAP协议开发学习笔记之术语解释

    哪有什么天生如此,只是我们天天坚持. -Zhiyuan 此文章主要总结CoAP协议的术语解释: 只在网上找到了[RFC2616] 的解释,但是这些都是通用的 本文档要求读者熟悉[RFC2616]中讨论 ...

  7. 数据库和服务器什么协议,数据库服务器协议

    数据库服务器协议 内容精选 换一换 本章节适用于MRS 3.x之前版本.Loader支持以下多种连接,每种连接的配置介绍可根据本章节内容了解.obs-connectorgeneric-jdbc-con ...

  8. 基于阿里云用C/C++做了一个http协议与TCP协议的web聊天室的服务器——《干饭聊天室》

    基于阿里云用C/C++做了一个http协议与TCP协议的web聊天室的服务器--<干饭聊天室> 在这里首先感谢前端小伙伴飞鸟 前端技术请看一款基于React.C++,使用TCP/HTTP协 ...

  9. 【Android 逆向】Android 逆向通用工具开发 ( Android 端远程命令工具 | Android 端可执行程序的 main 函数操作 | TCP 协议服务器建立 | 接收客户端数据 )

    文章目录 前言 一.Android 端可执行程序的 main 函数操作 二.Android 端 TCP 协议服务器建立 三.Android 端接收 PC 端传来的数据 四.博客资源 前言 本篇博客重点 ...

  10. canopen服务器协议,ZOPC_Server(ZLG通用OPC服务器)CANopen协议插件

    ZOPC_Server(ZLG通用OPC服务器)CANopen协议插件是一款基于CAN的一种高层协议,是一种具有灵活配置功能的标准嵌入式网络.它的任务是控制和监测所有NMT从站的NMT状态.通常,CA ...

最新文章

  1. securecrt切换会话(session)的显示方式
  2. 去年的今天我做了些什么?
  3. Luogu2114 [NOI2014]起床困难综合症 【位运算】
  4. mysql创建jdbc数据库_创建本地数据库mySQL并连接JDBC
  5. html5彩盒插件画廊,jQuery轻量级响应式LightBox图片画廊插件
  6. 微信小程序生成海报页面
  7. 生成PDMS管口方位图 python方案
  8. 全球搜索引擎Top10 可惜很多人只用过第四个
  9. 关于pytorch中各种矩阵乘法运算的区别
  10. web开发入门,css背景图片自适应屏幕宽度
  11. 分水岭算法--语义分割
  12. Java基础巩固Day2作业
  13. python之API接口调用
  14. 一周热图|黄晓明、刘亦菲走进瑞士天梭工厂;卡特彼勒牵手CBA联赛;爱马仕匠心工坊登陆西安...
  15. 【Linux Centos6/7连接Oracle11g数据库,提示:ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务】
  16. 实现阿拉伯数字转中文大写
  17. 《SpringBoot 各种专有名词》
  18. 解决关机蓝屏 | MULTIPLE_IRP_COMPLETE_REQUESTS | klflt.sys
  19. 所有w ndows开机音乐,《新手也能操作的让WndowsXP加快开机启动!.doc
  20. jquery分页打印

热门文章

  1. 用matlab求傅里叶变换
  2. 获取Windows聚焦的图片
  3. 计算机等级考试如何评改试题,全国计算机考试上机考试是如何改卷的
  4. Excel中将汉字(名字)转换为拼音
  5. 【杭电5053】the Sum of Cube
  6. 手机python30编程教程入门_Python新手入门教程_在手机上就能学习编程的软件
  7. PHP集成环境:这些年我用过的那些PHP环境
  8. 使用python爬取链家上海二手房信息的案例
  9. 2022年5款免费聊天机器人,帮助独立站降本增效
  10. Java架构师—PDMan数据库建模工具使用