物联网通信之Coap 协议

物联网通信之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内置内容协商和发现支持,允许设备彼此窥测以找到交换数据的方式

猜你喜欢

转载自blog.csdn.net/Abe_liu/article/details/85704842