物联网通信之Coap 协议
Coap 简介
- 名为受限制的应用协议,是UDP上的应用层协议。适用于小内存,低处理和低存储能力的设备。传输内容小巧精简,对于较大的数据可分块传输。客户端可以发送观察者请求,仅当被观察的数值变化时服务器才传回客户端新数值。
协议特点
- 基于消息类型
- 请求响应模型
- 双向通信
- 轻量、低功耗
- 支持IP多播
- 非长连接通信,支持受限设备
- 支持观察模式
- 支持异步通信
- 支持Restful 接口
工作模式
CoAP是一个完整的二进制应用层协议,消息格式紧凑,默认运行在UDP上
###请求方式 和 消息类型
请求方式
- 1- GET:获取资源
- 2 -POST:创建资源
- 3- PUT:更新资源
- 4- DELETE:删除资源
定义了各种请求方式:
typedef enum {
IC_GET = 1,
IC_POST = 2,
IC_PUT = 3,
IC_DELETE = 4
} ICoAPRequestMethod;
应用场景:
coapMessage = [[ICoAPMessage alloc]initAsRequestConfirmable:YES requestMethod:IC_GET sendToken:YES payload:@""];
消息类型
内部定义
/*
* Type with +4 value for version
*/
typedef enum {
IC_CONFIRMABLE = 4,
IC_NON_CONFIRMABLE = 5,
IC_ACKNOWLEDGMENT = 6,
IC_RESET = 7
} ICoAPType;
- CON:需要被确认的请求,如果CON请求被发送,那么对方必须做出响应
- NON:不需要被确认的请求,如果NON请求被发送,那么对方不必做出回应
- ACK:应答消息,接受到CON消息的响应
- 复位消息,当接收者接收到的消息包含一个错误,接收者解析消息或者不再关心发送者发送的内容,那么复位消息将会被发送
应用场景:
coapMessage = [[ICoAPMessage alloc]initAsRequestConfirmable:YES requestMethod:IC_GET sendToken:YES payload:@""];
注释:在进行coap 请求的时候我们需要对 传递的 Message 进行数据的封装,然后使用既定的请求方式将消息传递出去,内部实现方法
- (id)initAsRequestConfirmable:(BOOL)con requestMethod:(uint)req sendToken:(BOOL)token payload:(NSString *)payload {
if (self = [self init]) {
/******如果传入的为YES 则需要对request 进行回复 ******/
if (con) {
self.type = IC_CONFIRMABLE;
}
else {
self.type = IC_NON_CONFIRMABLE;
}
if (req < 32) {
self.code = req;
}
else {
self.code = IC_GET;
}
self.isRequest = YES;
self.isTokenRequested = token;
self.payload = payload;
}
return self;
}
HTTP和CoAP 之间的对比
- HTTP代表超文本传输协议,CoAP代表约束应用协议;
- HTTP协议的传输层采用了TCP,CoAP协议的传输层使用UDP
- CoAP协议是HTTP协议的简化版
- CoAP协议和HTTP协议一样使用请求/响应模型,拥有相同的方法
- CoAP开销更低,并支持多播
- CoAP专为资源构成应用而设计,如:IoT/WSN/M2M等…
Coap 和MQTT 之间的对比
- MQTT协议使用发布/订阅模型,CoAP协议使用请求/响应模型;
- MQTT是长连接,CoAP协议是无连接;
- MQTT通过中间代理传递消息的多对多协议,CoAP协议是Server和Client之间消息传递的单对单协议
- MQTT不支持带有类型或者其它帮助Clients理解的标签消息,CoAP内置内容协商和发现支持,允许设备彼此窥测以找到交换数据的方式