CoAP协议及开源实现

1. CoAP协议的简单介绍

CoAP是一种面向网络的协议,采用了与HTTP类似的特征,核心内容为资源抽象、REST式交互以及可扩展的头选项等。这些关键特征使得因特网由简单的文档检索机制(World Wide Web)演进成为现在繁荣的应用平台(Web 2.0)。HTTP作为IETF 成功长期采用的标准,可以用较小的脚本程序来融合不同的资源和服务。它提供的互操作性正是物联网的关键讨论内容,从而HTTP 被推向设备层面。但是由于HTTP基于TCP传输协议,采用点对点的通信模型,不适合于推送通知服务,而且对于受限设备(如8-bit 微处理器)HTTP过于复杂。

CoAP协议基于REST 构架,REST 是指表述性状态转换架构,是互联网资源访问协议的一般性设计风格。为了克服HTTP对于受限环境的劣势,CoAP既考虑到数据报长度的最优化,又考虑到提供可靠通信。一方面,CoAP提供URI,REST 式的方法如GET,POST,PUT和DELETE,以及可以独立定义的头选项提供的可扩展性。另一方面,CoAP基于轻量级的UDP协议,并且允许IP多播。而组通信是物联网最重要的需求之一,比如说用于自动化应用中。为了弥补UDP传输的不可靠性,CoAP定义了带有重传机制的事务处理机制。并且提供资源发现机制,并带有资源描述。

CoAP协议不是盲目的压缩了HTTP协议,考虑到资源受限设备的低处理能力和低功耗限制,CoAP重新设计了HTTP的部分功能以适应设备的约束条件。另外,为了使协议适应物联网和M2M 应用,CoAP协议改进了一些机制,同时增加了一些功能。图1 显示了HTTP和CoAP的协议栈。CoAP和HTTP在传输层有明显的区别。HTTP协议的传输层采用了TCP协议,而CoAP协议的传输层使用UDP协议,开销明显降低,并支持多播。


CoAP协议采用了双层的结构。事务层(Transaction layer)处理节点间的信息交换,同时,也提供对多播和拥塞控制的支持。请求/响应层(Request/Response layer)用以传输对资源进行操作的请求和相应信息。CoAP协议的REST 构架基于该层的通信,REST请求附在一个CON 或者NON消息上,而REST响应附在匹配的ACK消息上。CoAP的双层处理方式,使得CoAP没有采用TCP协议,也可以提供可靠的传输机制。利用默认的定时器和指数增长的重传间隔时间实现 CON消息的重传,直到接收方发出确认消息。另外,CoAP的双层处理方式支持异步通信,这是物联网和M2M应用的关键需求之一。


1.获得libcoap

    通过git clone指令从github仓库中获得最新版本。
    git clone  https://github.com/authmillenon/libcoap.git

2. 编译和安装libcoap
    由于libcoap的源代码包中只有configure.in文件,所以比一般的linux源代码方式安装多了一步autoconf,使用autoconf可生成configure文件。
    【1】生成configure文件
    autoconf
    【2】生成makefile文件
    ./configure
    【3】编译
    make
    【4】安装
    sudo make install 
    
    安装完成之后,便会新建/usr/local/include/libcoap目录,并把coap.h config.h debug.h pdu.h等头文件复制到该目录中。另外,编译生成的libcoap.a该静态链接库被复制到了/usr/local/lib中。
    同时,在编译完成之后,在example目录中会增加两个重要文件——coap-client和coap-server。

3. libcoap使用
    进入example文件夹,在该文件夹中还有两个可执行文件,coap-client和coap-server。coap-client提供非常丰富的客户端测试指令,而coap-server提供一个较为简单的服务器端功能。
    【服务器端测试】
    在开始服务器端测试之前,必须知晓服务器端的IP地址,例如测试服务器的局域网IP地址为10.13.11.85
    【1】运行coap-server
    ./coap-server
    【2】在firefox中运行使用GET方法访问该服务器。该步骤需要保证firefox已经安装copper插件。
    在浏览器地址栏中输入coap://10.13.11.85,点击工具栏中的GET按钮,那么coap-server便会返回以下内容

图1 使用火狐浏览器访问coap-server
    【客户端测试】
    【1】运行coap-server
    ./coap-server
    【2】运行coap-client
    ./coap-client -m get -o result.txt coap://localhost
    【-m】表示coap访问方法,默认为get方法,此处设置为get方法。除了get方法之外还包括put、post和delete。
    【-o】表示访问获得的内容保存到result.txt文件中
    如果访问成功,那么控制台输出:
    v:1 t:0 tkl:0 c:1 id:45104 
    【v】表示coap的版本编号,此时的coap的版本编号为1。
    【t】表示报文类型为CON,
    【tkl】表示token区域的长度,此时的token区域的长度为0。
    【c】表示访问方法(该处还需要分析)
    【id】表示message id
    result.txt文件内容为: 
This is a test server made with libcoap (see http://libcoap.sf.net)
Copyright (C) 2010--2013 Olaf Bergmann <bergmann@tzi.org>

4.总结    libcoap安装过程需要注意——libcoap并没有直接提供configure文件,需要使用autoconf工具生成configure文件,生成configure文件之后的安装方法和其他源代码形式的安装方法完全相同。libcoap中的coap-client是一个非常使用的工具,可通过控制台设置不同的参数,该工具可与firefox copper插件配合使用。


  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值