热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于CoAP的无线传感器网络与互联网的互联研究

■ 文/传智播客Java基础课程研究组   陈文 陈文(传智播客Java高级讲师) 个人简介:7年以上软件开发经验。精通Java、PHP、ASP、M
■ 文/传智播客Java基础课程研究组   陈文


陈文(传智播客Java高级讲师)

个人简介&#xff1a;7年以上软件开发经验。精通Java、PHP、ASP、MySQL、Oracle、SqlServer、Sybase等编程语言和数据库系统。曾参与国家计算机安全中心的531和242课题的研究&#xff0c;信息产业部<<号码携带运维系统>>&#xff0c;中国联通的<<运维MIS系统>>&#xff0c;内蒙联通的<<资源管理系统>>&#xff0c;中国移动研究院的《TSM平台》&#xff0c;中国移动的<<上海世博国漫综合业务平台>>等多个电信领域的软件项目的需求分析、设计及研发&#xff0c;并对企业管理软件有着深刻的理解&#xff0c;曾参与CRM和ERP等产品设计以及研发。授课思路清晰&#xff0c;擅长结合现实中的例子讲解抽象的概念&#xff0c;便于学生理解和记忆。




无线传感器网络与其他网络的互联是无线传感器网络研究热点方向之一&#xff0c;基于IPv6的全IP化互联方式是当前最受关注的焦点。本文介绍了在IP化无线传感器网络上实现REST风格服务的受限应用层协议CoAP&#xff0c;比较了CoAP与HTTP的不同和性能差异&#xff0c;最后提出和总结了基于CoAP的无线传感器网络与互联网的两种互联方式。

关键词&#xff1a;CoAP  无线传感器网络  物联网  网关  互联方式




1.引言

近年来&#xff0c;无线传感器网络&#xff08;WirelessSen-sorNetwork&#xff0c;WSN&#xff09;已经成为国际上学术界和工业界共同的研究热点之一。在许多应用中&#xff0c;无线传感器网络不以孤立网络的形式存在&#xff0c;而是通过一定的方式与其他外部网络互联&#xff0c;使其他外部网络能够访问和控制无线传感器网络&#xff0c;这样才有实际价值。互联网Internet是目前世界上最大的一种网络&#xff0c;因此实现无线传感器网络与Internet的网络互联具有重大意义。

在Internet以及其他一些网络中&#xff0c;TCP/IP已经成为事实上的协议标准。由于无线传感器网络终端数量庞大&#xff0c;IPv4远远不能满足无线传感器网络的地址需求&#xff0c;因此许多研究把重点放在了IPv6上&#xff0c;旨在将无线传感器网络IPv6化。互联网工程任务组&#xff08;InternetEngineeringTaskForce&#xff0c;IETF&#xff09;正在进行针对基于IPv6的低功率无线个域网&#xff08;IPv6overLowPowerWirelessPersonalAreaNetwork&#xff0c;6LoWPAN&#xff09;的相关标准化活动&#xff0c;包括将IPv6协议适配到IEEE802.15.4标准的6LoWPAN、低功耗网络路由协议&#xff08;RoutingProtocolforLow-powerandLossyNetwork&#xff0c;RPL&#xff09;、资源受限环境应用层协议&#xff08;ConstrainedApplicationProtoc-ol&#xff0c;CoAP&#xff09;等。IP智能物体产业联盟&#xff08;IPSm-artObjectAlliance&#xff0c;IPSO&#xff09;也开始了嵌入式设备IPv6产品化的推广。

无线传感器网络IP化的优点之一是&#xff0c;可以采用REST&#xff08;RepresentationalStateTransfer&#xff09;风格架构构建物联网应用。REST是表述性状态转换架构&#xff0c;是一种轻量级的Web服务实现&#xff0c;是互联网资源访问协议的一般性设计风格。REST有3个基本概念&#xff1a;表示&#xff08;Representation&#xff09;、状态&#xff08;State&#xff09;和转换&#xff08;Tr-ansfer&#xff09;。表示是指数据和资源都以一定的形式表示&#xff1b;状态是指一次资源请求中需要使用的状态都随请求提供&#xff0c;服务端和客户端都是无状态的&#xff1b;转换是指资源的表示和状态可以在服务端和客户端之间转移。

REST提出了一些设计概念和准则&#xff1a;网络上的所有资源都被抽象为资源&#xff1b;每个资源对应唯一的资源标识&#xff1b;通过通用的连接器接口&#xff1b;对资源的各种操作不会改变资源标识&#xff1b;对资源的所有操作是无状态的。REST风格使应用程序可以依赖于一些可共享和重用的并松散耦合的服务。HTTP&#xff08;HypertextTransferProtocol&#xff09;协议就是一个典型的符合REST风格的协议。

但是&#xff0c;HTTP协议较为复杂&#xff0c;开销较大&#xff0c;不适用于资源受限的传感器网络。IETFCoRE&#xff08;ConstrainedRESTfulEnvironment&#xff09;工作组正在制定CoAP协议&#xff0c;将REST风格引入智能物体网络。

2.受限应用层协议CoAP

2010年3月&#xff0c;IETF CoRE工作组开始标准化受限应用层协议&#xff08;Constrained Application Protocol&#xff0c;CoAP&#xff09;。CoAP是一种网络传输协议&#xff0c;专门为资源受限设备&#xff08;如传感器节点&#xff09;和网络&#xff08;如6LoWPAN网络&#xff09;优化设计。CoAP采用REST&#xff08;Representational State Transfer&#xff09;风格架构&#xff0c;将网络上的所有对象抽象为资源&#xff0c;每个资源对应一个唯一的统一资源标识符&#xff08;Universal Resource Identifier&#xff0c; URI&#xff09;&#xff0c;通过URI可以对资源进行无状态操作&#xff0c;包括GET、PUT、POST和DELETE等。

CoAP并不是HTTP的压缩协议。CoAP一方面实现了HTTP的一部分功能子集&#xff0c;并为资源受限环境进行了重新设计&#xff1b;另一方面提供了内置资源发现、多播支持、异步消息交换等功能。


如图1所示&#xff0c;与HTTP不同&#xff0c;CoAP使用的是面向数据包的传输层协议&#xff0c;如用户数据包协议&#xff08;User Datagram Protocol&#xff0c;UDP&#xff09;&#xff0c;因此可以支持多播。CoAP分为两层&#xff1a;消息层&#xff08;Message&#xff09;负责使用UDP进行异步交互&#xff0c;请求/回复层&#xff08;Request/Response&#xff09;负责传输资源操作请求和回复数据。

CoAP消息有4种类型&#xff0c;分别是&#xff1a;

● Confirmable&#xff08;CON&#xff09;&#xff1a;需要收到确认的消息。 

● Non-confirmable&#xff08;NON&#xff09;&#xff1a;不需要收到确认。

● Acknowledgment&#xff08;ACK&#xff09;&#xff1a;表示确认一个Confirmable类型的消息已收到。

● Reset&#xff08;RST&#xff09;&#xff1a;表示一个Confirmable类型的消息已收到&#xff0c;但是不能处理。

通过这种双层结构&#xff0c;CoAP能够在UDP上实现可靠传输机制。进行可靠传输时&#xff0c;使用CON消息&#xff0c;如果在规定时间内未收到ACK消息&#xff0c;则重新传输该消息&#xff08;超时重传&#xff09;&#xff0c;直到收到ACK/RST消息或者超过最大重试次数。接收方收到CON消息时&#xff0c;返回ACK消息&#xff0c;如果接收方不能处理该消息&#xff0c;则返回RST消息。此外&#xff0c;CoAP还支持异步通信。当CoAP服务端收到不能立即处理的请求时&#xff0c;首先返回ACK消息&#xff0c;处理请求之后再发送返回消息。

CoAP主要有以下特点&#xff1a;

● 满足资源受限的网络需求&#xff1b;

● 无状态HTTP映射&#xff0c;可以通过HTTP代理实现访问CoAP资源&#xff0c;或者在CoAP之上构建HTTP接口&#xff1b;

●使用UDP实现可靠单播和最大努力多播。
●异步消息交换。
●很小的消息头载荷及解析复杂度。
●支持URI和内容类型&#xff08;Content-type&#xff09;。
●支持代理和缓存。
●内建资源发现。
虽然CoAP还在制定中&#xff0c;已经出现了许多开源的CoAP实现&#xff0c;包括C语言实现的Libcoap、Python语言实现的CoAPy、C#语言实现的CoAP.NET等。Contiki和Tiny OS两大无线传感器网络操作系统也提供了CoAP支持。
3.性能评测
CoAP采用UDP作为传输层协议&#xff0c;并且减小了数据包头大小&#xff0c;因此理论上而言能够有效地提高数据传输速率。为了比较CoAP和HTTP协议的传输性能&#xff0c;笔者进行了试验&#xff0c;分别基于CoAP和HTTP协议构建了一套相同的图像采集应用程序&#xff0c;该应用程序是通过传感器节点控制摄像头采集图像&#xff0c;并将图像拆分为若干数据包传递给上层应用。
试验采用的硬件设备是北京美信凌科信息技术有限公司生产的MX231CC无线传感器节点&#xff0c;运行启用6LoWPAN的Contiki系统&#xff0c;其上分别运行CoAP服务器和HTTP服务器&#xff0c;分别使用CoAP和HTTP作为图像数据传输的应用层协议。客户端程序由.NET实现&#xff0c;运行在一台Windows主机上&#xff0c;以一块MX-USBStick接入网卡作为与无线传感器网络的接入网关。CoAP客户端基于CoAP.NET实现。在试验中&#xff0c;图像数据包大小设置为100字节&#xff0c;客户端分别向CoAP服务器和HTTP服务器请求图像数据包&#xff0c;直至整幅图像传送完毕。CoAP请求的地址格式为&#xff1a;GET coap://[<节点IPv6地址>]:<节点端口>/picture?no&#61;<图像数据包号>&#xff0c;其中picture是请求的资源&#xff0c;no是当前请求的图像数据包编号。同样&#xff0c;HTTP请求的地址格式为&#xff1a;GET http:// [<节点IPv6地址>]:<节点端口>/picture?no&#61;<图像数据包号>。服务器返回的是最大100字节的有效数据。
表1显示了使用CoAP和HTTP时&#xff0c;传输数据大小和吞吐量对比的情况。其中&#xff0c;传输数据大小是指传送一个图像数据包时&#xff0c;实际传输的数据大小&#xff1b;吞吐量指的是平均每秒传送的图像数据包的数量。
从表1中可以看出&#xff0c;传输相等负载时&#xff0c;CoAP协议比HTTP协议实际传输的数据量要小。考虑到HTTP服务器实现的完整性以及TCP握手过程&#xff0c;HTTP协议传输的数据量事实上会更大。同时可以看出&#xff0c;基于UDP的CoAP协议比基于TCP的HTTP协议传输速率更快。与直接使用TCP或UDP相比&#xff0c;CoAP传输数据大小相当&#xff0c;但是传输速率相差较大&#xff0c;主要原因是为CoAP在UDP之上实现了可靠传输&#xff0c;以致性能有所降低。但是&#xff0c;直接使用UDP需要上层应用程序来实现可靠传输&#xff0c;如果网络环境不稳定&#xff0c;性能同样也会下降。
4.基于CoAP的无线传感器网络与互联网的互联方式
在无线传感器网络中采用基于IP的REST风格网络架构能够促进无线传感器网络与互联网之间的网络互联。应用CoAP协议之后&#xff0c;互联网中的服务能够直接通过CoAP协议或者通过HTTP与CoAP协议之间的映射转换来访问无线传感器网络资源。因此&#xff0c;基于CoAP的无线传感器网络与互联网的互联方式有直接接入和网关代理两种。
4.1.直接接入
直接接入方式是指无线传感器网络通过网关接入互联网&#xff0c;网关只对IPv6和6LoWPAN网络层进行转换&#xff0c;而对上层协议不做处理&#xff08;见图2&#xff09;。
直接接入时&#xff0c;传感器节点直接与支持CoAP协议的互联网应用程序进行数据通信。这种方式可以实现无线传感器网络与互联网的完全互联&#xff0c;无线传感器网络中的节点都可以通过IPv6地址直接访问&#xff0c;同时网关只需要对IPv6与6LoWPAN进行转换&#xff0c;减少了不必要的开销。但是&#xff0c;由于目前IPv6在互联网中还没有完全普及&#xff0c;这种方式的应用范围受到了一定的限制。在小型自控网络中&#xff0c;可以采用这种方式&#xff0c;但是在公用网络中目前还无法实现。另一方面&#xff0c;已有的互联网应用程序如浏览器等大多使用HTTP协议&#xff0c;不能直接访问无线传感器网络资源&#xff0c;需要应用CoAP协议重新实现。
4.2网关代理
网关代理方式是指无线传感器网络通过网关接入互联网&#xff0c;网关对全部协议进行相应转换&#xff0c;将HTTP或其他协议请求转换为CoAP请求&#xff0c;并将CoAP返回数据转换为HTTP或其他协议形式传递给互联网应用程序。
网关代理时&#xff0c;互联网应用程序不是直接访问无线传感器网络资源&#xff0c;而是通过网关对CoAP和HTTP或其他协议进行了转换。这种方式的优势在于&#xff0c;由于使用网关作为代理&#xff0c;互联网端可以使用IPv4或IPv6&#xff0c;使得这种方式的应用范围更广。同时&#xff0c;因为可以使用HTTP或其他协议&#xff0c;上层应用程序可以不需要改动。但是&#xff0c;CoAP和HTTP或其他协议的转换增加了网关的复杂度&#xff0c;也会对通信效率产生一定影响。
网关代理的实现方式有3种&#xff1a;委托调用、HTTP代理、透明代理。Java教程委托调用是指在网关上实现一个HTTP接口&#xff0c;通过传入参数对CoAP资源进行调用。传入参数可以包括CoAP资源URI、访问方法、负载参数等。这种方式不对CoAP和HTTP进行直接转换。图4显示的是笔者基于Libcoap实现的委托调用网关。
Libcoap是一个用C语言实现的CoAP库&#xff0c;当前版本支持draft-ietf-core-coap-03。Libcoap封装了Message层&#xff0c;并提供了Request/Response层示例。基于该示例&#xff0c;笔者封装了Request/Response层&#xff0c;并在其之上实现了网关CGI程序&#xff0c;可以通过如下格式访问CoAP资源&#xff1a;http://网关IP地址/coap-proxy?uri&#61;coap://[节点IPv6地址]: :<节点端口>/[资源名称]。
HTTP代理和透明代理都是指网关对HTTP和CoAP进行映射转换。HTTP代理是采用HTTP正向代理的方式访问CoAP资源&#xff0c;代理服务器进行协议代理&#xff0c;将请求转发至无线传感器网络&#xff0c;底层同样使用Libcoap实现。
透明代理是直接以HTTP访问CoAP资源&#xff0c;例如http://[节点IPv6地址]/[资源名称]。网关需要监听网卡&#xff0c;截获所有对无线传感器网络节点的访问请求&#xff0c;将请求映射转换为CoAP格式&#xff1a;coap://[节点IPv6地址]:<节点端口>/[资源名称]&#xff0c;发送至无线传感器网络&#xff1b;再将收到的CoAP回复翻译为HTTP格式返回。在整个过程中&#xff0c;网关对上层应用程序是透明的。IETF CoRE工作组正在讨论HTTP-CoAP映射的相关问题。
总而言之&#xff0c;委托调用和HTTP代理方式实现较为简单&#xff0c;但需要应用程序了解作为代理的网关&#xff1b;透明代理方式可以对应用程序隐藏网关信息&#xff0c;实现也更复杂。
5.结束语
无线传感器网络与IPv6的结合是物联网研究的重要趋势&#xff0c;而CoAP协议的实现更能促进无线传感器网络与互联网的集成。基于UDP的CoAP协议支持类HTTP的资源操作方式&#xff0c;并为物联网提供了许多特殊功能。本文介绍了CoAP协议&#xff0c;对比分析了无线传感器网络中CoAP与HTTP协议的性能&#xff0c;并提出和总结了基于CoAP的无线传感器网络与互联网的两种互联方式。


推荐阅读
  • ABP框架是ASP.NET Boilerplate的简称,它不仅是一个开源且文档丰富的应用程序框架,还提供了一套基于领域驱动设计(DDD)的最佳实践架构模型。本文将详细介绍ABP框架的特点、项目结构及其在Web API优先架构中的应用。 ... [详细]
  • 本文详细介绍了如何在Oracle VM VirtualBox中实现主机与虚拟机之间的数据交换,包括安装Guest Additions增强功能,以及如何利用这些功能进行文件传输、屏幕调整等操作。 ... [详细]
  • 如何在Django框架中实现对象关系映射(ORM)
    本文介绍了Django框架中对象关系映射(ORM)的实现方式,通过ORM,开发者可以通过定义模型类来间接操作数据库表,从而简化数据库操作流程,提高开发效率。 ... [详细]
  • 本文介绍了 PHP 的基本概念、服务器与客户端的工作原理,以及 PHP 如何与数据库交互。同时,还涵盖了常见的数据库操作和安全性问题。 ... [详细]
  • 本文介绍了 Oracle SQL 中的集合运算、子查询、数据处理、表的创建与管理等内容。包括查询部门号为10和20的员工信息、使用集合运算、子查询的注意事项、数据插入与删除、表的创建与修改等。 ... [详细]
  • 本文探讨了使用Python实现监控信息收集的方法,涵盖从基础的日志记录到复杂的系统运维解决方案,旨在帮助开发者和运维人员提升工作效率。 ... [详细]
  • 本文详细介绍了如何通过简单的JavaScript代码,在网页中实现禁用鼠标右键的功能,以保护网页内容不被轻易复制。 ... [详细]
  • 本文详细介绍了 Node.js 中 OS 模块的 arch 方法,包括其功能、语法、参数以及返回值,并提供了具体的使用示例。 ... [详细]
  • 本文基于Java官方文档进行了适当修改,旨在介绍如何实现一个能够同时处理多个客户端请求的服务端程序。在前文中,我们探讨了单客户端访问的服务端实现,而本篇将深入讲解多客户端环境下的服务端设计与实现。 ... [详细]
  • Python3爬虫入门:pyspider的基本使用[python爬虫入门]
    Python学习网有大量免费的Python入门教程,欢迎大家来学习。本文主要通过爬取去哪儿网的旅游攻略来给大家介绍pyspid ... [详细]
  • 本文详细解析了MySQL中常见的几种错误,并提供了具体的解决方法,帮助开发者快速定位和解决问题。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • 软件测试行业深度解析:迈向高薪的必经之路
    本文深入探讨了软件测试行业的发展现状及未来趋势,旨在帮助有志于在该领域取得高薪的技术人员明确职业方向和发展路径。 ... [详细]
  • 深入解析Dubbo:使用与源码分析
    本文详细介绍了Dubbo的使用方法和源码分析,涵盖其架构设计、核心特性和调用流程。 ... [详细]
  • RocketMQ 运维监控实践指南
    本文详细介绍了如何实现 RocketMQ 的运维监控,包括监控平台的搭建、常用运维命令及其具体用法。适合对 RocketMQ 监控感兴趣的读者参考。 ... [详细]
author-avatar
smile
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有