物联网应用层coap协议
CoAP(Constrained Application Protocol, 受限应用协议)协议是一种在低功耗低速率的设备上实现物联网通信的应用层协议。其采用UDP协议支撑,发送和接收数据可以异步,数据包头采用二进制压缩,对低功耗低速率的网络有很好的适应能力。CoAP协议非常的小巧,最小的数据包仅为4字节。CoAP适用于低功耗受限设备,一个内存为20KB的单片机就可以实现CoAP服务器或客户端。本实验旨在利用工具对CoAP协议基本工作机制进行验证分析,并分析其可能的安全隐患。
要求
(1)实验要求掌握CoAP的基本原理。
(2)用Wireshark等协议分析软件分析CoAP协议过程。
(3)学会用Node.js或Python快速构建CoAP通信验证程序。
基本步骤
注意构建一个局域网,模拟CoAP服务端、客户端,运用Wireshark分析客户端和服务端上的协议工作。
过程及有关程序代码
服务器代码:
1 | const coap = require('coap') |
客户端代码:
1 | const coap = require('coap') |
1、 搭建局域网
2、开启服务器
3、 客户端请求连接,服务器返回信息
4、抓包信息
分析
CoAP是一种应用层协议,它运行于UDP协议之上而不是像HTTP那样运行于TCP之上。HTTP 与 COAP协议都是通过4个请求方法(GET, PUT, POST, DELETE)对服务器端资源进行操作。 两者之间明显的区别在于HTTP是通过文本描述方式描述协议包内容,协议包里面会包含一些空格符,换行符等,协议包可读性很强。而COAP是通过定义 二进制各位段功能来描述协议包内容。 因此COAP协议包大小更小,更紧凑。CoAP协议非常小巧,最小的数据包仅为4字节。但CoAP并不能替代HTTP协议,CoAP只能呢 应用于那些小设备。
CoAP采用与HTTP协议相同的请求响应工作模式。CoAP协议共有4中不同的消息类型。
CON——需要被确认的请求,如果CON请求被发送,那么对方必须做出响应。
NON——不需要被确认的请求,如果NON请求被发送,那么对方不必做出回应。
ACK——应答消息,接受到CON消息的响应。
RST——复位消息,当接收者接受到的消息包含一个错误,接受者解析消息或者不再关心发送者发送的内容,那么复位消息将会被发送。
这里抓到的包只有CON和ACK,是因为客户端发的包需要服务器响应,所以是CON,而且在传输过程中并未出错,所以没有出现RST复位消息。
CoAP还有一个比较特殊的地方,那就是它的url。在HTTP的世界中,RESTFul协议由于其简单性和适用性,在WEB应用中越来越受欢迎,这样的道理同样适用于CoAP。一个CoAP资源可以被一个URI所描述,例如一个设备可以测量温度,那么这个温度传感器的URI被描述为:CoAP://machine.address:5683/sensors/temperature。请注意。后面的 temperature,我觉得更像是表示客户端的身份的信息,不知道理解的对不对,就像下你个面这样 。
关于COAP的安全问题:
COAP使用DTLS来做安全传输层,该层运行于UDP之上,当前考虑使用DTLS时,需要考虑设备终端资源受限情况, 有些资源有限设备无法运行DTLS安全加密算法。
做安全加密,需要根据应用场景需要,对应只上报数据,且数据敏感度不高场景,可以不考虑加入安全层。