[译] WSN 的自适应通信架构

摘要

  随着传感器网络的多样化发展,产生了越来越多的链路层、MAC层协议以及潜在的传输机制。系统开发者必须使他们的应用和系统能够自适应于广泛的、潜在的协议和机制。不过,由于已经存在的传感器通信架构在设计时并没有考虑到这个多样性,所以系统开发者必须为每种潜在的协议和机制重新开发他们的系统。为了补救这种情形,我们提出了一个通信架构。该架构能够在不需要修改任何应用和协议的前提下,适用于广泛存在于从MAC层到传输层的潜在的通信机制。该架构具有足够的表现力以适应典型地传感器网络协议。通过测试证明,相对于非自适应架构,该架构的执行时间只增加了一点点。

介绍

  随着传感器网络的多样性发展,传感器网络的协议操作受到很大的挑战。比如,如果一个应用程序运行于一个多链路层技术之上,应用程序和协议就不能依赖于已经存在的相关的链路层机制——比如链路层重传。这让我们不得不重新思考传感器网络的通信架构。
  就互用性和代码重用而言,一个通用的传感器网络架构能带来很多益处。传感器网络社区最近注册了一些不同的传感器网络架构,比如Polastre等人的SP架构,Cheng等人的模块化网络架构。不过,SP和模块化网络架构都不能自适应运行在架构之上的协议。
  SP没有指定任何协议头,因此能够自适应潜在的协议。但正是由于没有指定协议头,SP也在网络协议自适应的时候存在问题。Cheng等人的模块化架构按照网络层的功能划分成若干模块,在每个模块中定义自己的模块头。如果要添加附加协议,应用程序员必须清楚地定义模块边界并指定包的子头。
  在本篇论文中,我们展示了一个用于传感器网络的通信架构——变色龙。变色龙架构由两部分组成:Rime通信协议栈和一系列的包传输模块。变色龙架构不仅能够适用于已存在的典型传感器网络协议,还能够自适应大量潜在的协议和机制。
  设计具有互操作性通信架构的最大问题在于寻找一个通用的头格式。这样的头格式必须同时满足两个条件:对架构支持的通信模式具有足够的表现力,对将来的架构扩展具有足够的灵活性。对于一个传感器网络架构而言,这个问题更具有挑战性,因为必须保证这个头足够小。
  为了寻找这样一个通用头,变色龙采用了一个彻底的不同的方法:变色龙完全不定义任何头,取而代之使用头属性——一种对包头中的信息的抽象。
  变色龙中有一个独立的头转换模块,它负责将应用数据和包属性转换为包头,从而可以形成一个具有包头和负载的完整包。通过使用不同的变色龙模块,使创建一个遵从任何给定包头说明的数据包成为可能。
  

![](http://img.blog.csdn.net/20160407141615034)

  
图1.一个运行多个链路层协议的分层架构

  图1中的网络中存在3个不同的协议:一个低功耗无线电,比如CC1100,一个中功耗802.15.4无线电,以及因特网中的TCP/IP。这个网络使用了三个变色龙模型:一个负责生成低功耗无线电的链路层包,一个负责生成802.15.4的MAC层包,一个负责生成UDP/IP传输层包。与其他通信架构不同,运行在变色龙架构上的应用程序不需要根据不同的通信机制做修改。不过,仅仅是头转换还不足以模仿这些协议的操作。在一些案例中,变色龙头转换模块必须实现它所模仿的协议的一部分协议逻辑。比如,负责生成UDP/IP包的变色龙头转换模块必须实现ARP协议以解决IP地址向因特网MAC地址转换的问题。
  变色龙架构的第二部分是Rime通信架构。Rime提供了一些列基本通信元(范围是从最好的单跳广播和最好的单跳单播,到最好的网络洪和逐跳的可信赖的多跳单播)。我们已经基于典型的传感器网络协议的通信需求选择了Rime元。
  我们已经在Contiki操作系统中实现了变色龙架构,并在Tmote Sky motes上进行了评估。
  我们在本篇论文中有三个贡献。第一,通过从详细的包头信息中分离协议逻辑,对分层通信栈中的跨层处理问题提供了解决方案。我们展示了用于替代包头的包属性的使用,这允许应用程序在不违背分层原则的前提下访问底层信息,且其执行时间性能满足传统的基于包头实现的标准。第二,我们展示了一个传感器网络的轻量级分层通信架构——Rime协议栈,这减小了实现网络协议的复杂性。我们展示了协议栈中的通信元到典型传感器网络的映射:数据传播、数据收集和网络路由协议(mesk routing protocols)。第三,我们展示了数据包的使用,这使在该协议栈和其它通信栈(链路层、MAC层协议和TCP/IP)之间自适应成为可能。
  本篇论文剩下的部分以如下的形式组织:第2章介绍通信架构的背景,第3章介绍变色龙架构的顶层设计,第4章介绍Rime协议栈,第5章介绍变色龙包转换模块,第6章介绍架构的实现,第7章介绍一系列已经实现的传感器网络协议,第8章介绍变色龙模块,第9章对架构做评估,第10章回顾相关的工作,第11章做总结。

背景

  一个传感器网络的自适应通信架构必须既支持运行在通信架构之上的典型传感器网络协议,又支持架构所在的MAC层和链路层协议。在本节,我们将回顾一下顶层架构下关于通信栈的问题,关于传感器网络协议的需求,关于潜在的MAC层、链路层协议和标准的需求。

狭窄的腰(The Narrow Waist)

  

ps:完全搞不懂这一小节说的是啥,将来再补充

  设计一个网络架构最开始的挑战是在什么地方放架构的狭窄的腰,在什么地方放其它网络架构周围的固定的点。狭窄的腰需要允许不同的协议运行在其之上,允许不同的技术运行在其之下。
  在以前的传感器网络通信架构中,将传感器网络协议栈的腰放在网络层之下,链路层之上。由于狭窄腰放在这个位置,主要的通信元是单跳广播。这允许在该架构下能有效的实现其它机制,比如拥塞控制。
  我们的架构已经证实,传感器网络架构的狭窄的腰应该是单跳的最努力的广播(single-hop best-effort broadcast)。

地址自由协议(Address-free Protocols)

  传感器网络的一个重要的特色是地址自由协议。地址自由协议是一种不使用节点地址的协议。地址自由协议最常见的一个例子是数据散发协议(data dissemination protocal)。在数据散发协议中,数据从一个源节点发送到它所覆盖的网络中的所有节点。源节点或者网络中的其它所有节点都不需要知道接收节点的地址。相反,节点可以利用广播发送数据到它们所有的单跳邻居节点,而邻居节点反过来也可以重新广播数据到它的所有单跳邻居节点。

基于名字的协议

  尽管地址自由协议在传感器网络中扮演着主要的角色,但总存在基于名字的协议。对于基于名字的协议(name-based protocols),每个节点都被确切地命名(通常使用它们的节点标识地址)。最出名的基于名字的协议是单播多跳路由,这种协议要求网络中的数据包必须由一个指定的节点发送到另一个指定的节点,且发送方知道接收方的地址,发送方和接收方之间的路由中间节点也知道接收方的地址。
  数据采集协议是地址自由协议和基于名字协议的混合体。在一个数据采集协议中,参与数据采集的节点发送数据到网络中的一个或多个sink节点(不知道该翻译成啥),而数据则被以多跳形式被转发到任何sink节点。参与节点不需要知道最终接受数据的水槽节点的地址,不过一般需要知道单跳邻居的地址。一个节点为了向一个sink节点发送数据,必须发送数据到单跳邻居。因此,数据采集协议在多跳感知时是地址自由协议,在单跳感知时是基于名字的协议。

邻居抽象

  许多传感器网络算法都是在研究物理或者逻辑上相互靠近的节点,因此也产生了开发这些算法的编程抽象。
  尽管邻居抽象通常隐藏了抽象层的通信,但是参与邻居抽象的节点通常与其它节点互换消息。一些消息被直接发送到指定邻居,另一些消息被广播到所有邻居。Others need scoped flooding to reach all n-hop neighbors [18]. Similarly, some messages are of higher importance than others and may therefore need to be sent using a reliable communication channel, while others can be sent using best-effort messages. A communication architecture for sensor networks must handle such communication patterns.

MAC协议

  传感器网络MAC协议的最基本的目标是减小传感器节点的功耗。无线通信通常是能耗最高的模块之一,且其接收消息与发送消息的能耗一样高。因此,MAC协议必须尽可能频繁地关闭无线,但为了与其它节点通信,无线的开启事件又必须足够长。
  传感器网络存在许多MAC协议,包括时隙TDMA协议和基于竞争的CSMA协议。在基于TDMA的协议中,每个节点都会被分配一个时隙,且只有在这个时隙内才能发送消息。基于CSMA的协议通过对信道进行空闲评估,以确保在任何时刻只有一个发送端占用信道。通过这些机制,包一般不会立即传输,而是在实际传输之前被排队到队列中。
  传感器网络MAC协议总是区别对待单播和广播传输。单播传输只需要将包送到接收器,因此其它所有节点在这个包传输期间可以关闭无线开关。
  许多链路层和MAC层协议都支持对单播包进行自动确认。通过对包标记一个特殊的比特位,表示它已经被可到传输。如果发送方没收到确认帧,将会重传该报。
  不同的链路层和MAC层协议使用不同的编址模式,甚至一个协议支持多个编址模式。以链路层802.15.4为例,它的包既可以使用16位短地址模式,也可以使用64位扩展地址模式。在包头中,甚至有一个选项可以完全关闭地址。
  自适应传感器网络通信架构必须能够支持上面所有的机制:包排队,广播包、单播包分开处理,单播包自动确认和重传,不同的编址模式。  

相关标准

  ZigBee规范是一个短范围、低数据速率控制、感知应用的工业标准。ZigBee协议栈采用分层架构,通过IEEE 802.15.4的网络层和应用支持子层,提供端到端可靠数据传输。ZigBee further specifies how applications can be constructed by requiring a pre-defined application profile along with associated commands, called clusters, for all nodes in the network. ZigBee supports mesh routing protocol based on AODV [28].
  一般认为,传统的因特网协议族TCP/IP不适用于传感器网络。为了能够让TCP/IP应用于无线传感器网络,我们之前已建议使用简化的TCP/IP协议族,并采用一定的优化技术,比如头部压缩。最近,标准组织6lowpan IETF工作组和工业界已经认同了该想法。例如,为了满足传感器网络的严格能耗限制标准,6lowpan不完全遵循IPv6标准,且在传输之前将IPv6头部进行压缩。
  理想情况下,自适应传感器网络架构应该让运行在该架构之上的协议兼容这些标准协议。

变色龙架构

  变色龙架构是传感器网络的自适应架构,该结构的目的主要有三方面。第一,简化传感器网络通信协议栈的实现。这已通过Rime协议栈实现。第二,允许已经实现的运行在架构之上的协议利用潜在的链路层和MAC层协议的特性。这已通过包属性代替包头实现。第三,不用关心运行在架构之上的协议、应用程序,能够独立构成要传输的包头。这已通过独立的包传输模块实现。
  变色龙架构借鉴了之前关于传感器网络架构、分布式编程和通用网络架构的经验。
  

![这里写图片描述](http://img.blog.csdn.net/20160522224816964)

  
图2. 变色龙架构:应用程序和网络协议运行在Rime协议栈之上,Rime的输出被头转换模块转换成不同的底层协议

  图2展示了变色龙的架构。该架构包含三部分:Rime协议栈,为运行在协议栈之上的应用程序提供一系列通信原语;运行在Rime之上的一些列网络协议;变色龙头部传输模块,根据Rime协议栈输出端的数据创建包和包头。应用程序既可以直接运行在Rime协议栈之上,也可以运行在Rime协议栈之上的网络协议之上。
  变色龙头部传输模块既可以生成紧密的按位组合的包头,也可以生成遵相关定链路层、MAC层协议或者其它通信协议的包头。一些头部传输模块甚至实现了它们所模仿的协议的部分协议逻辑。
  应用程序和网络协议向下往Rime协议栈传输数据。Rime协议栈会为数据添加数据包属性,然后将数据和包属性一起传递给下层的变色龙头部传输模块。头部传输模块通过包属性建立好包头,将最后的包送到底层驱动或者MAC层。MAC层会检查包属性,以决定如何传输包。例如,MAC层在发送单播包时与发送广播包的发送方式不同,需要在发送时打开链路层确认机制。

3.1 协议逻辑和协议头的分离

  Rime中的协议逻辑不处理包头的底层细节,这些底层的包头细节交由头部转换模块管理。
  变色龙架构不使用包头,而使用包属性。在包头中包含的信息,都能在包属性中找到。包属性信息是包头信息的一种抽象。表3.1列举了在变色龙架构中预定义的包属性。应用程序和底层协议都可以自定义额外的包属性。
  预定义的包属性包括发送方地址、接收方地址、包ID、包类型、已经被转发的次数以及一些从底层来的反馈信息,比如对链路质量、无线信道拥塞信息的预估结果。
  每个包属性都有一个范围。包属性的范围指定了属性能跟随包多远。如果属性的范围是0,表面属性只能在本节点内跟随包。如果属性的范围是1,表明包头中的属性最多能被转发到一个节点。如果属性的范围是2,属性就能偶跟随包传递到最后的接收者。
  

![这里写图片描述](http://img.blog.csdn.net/20160523094633976)

  
表3.1 预定义的变色龙包属性

头部字段对齐

  通用的通信协议,比如TCP/IP协议栈,都要求其所有头部字段进行字节对齐处理。这样做的原因是许多微处理器不能访问未对齐的数据。
  协议的设计者必须确保所有的头部字段被正确对齐,因此有时必须在包头插入填充字节。然而,低功耗无线协议不能负担得起所有头部字段对齐的代价,因为他们必须将保证其头部尺寸尽量小。
  通过变色龙的包属性,由于头部转换模块中包含了所有底层头部对齐的细节,所以实现协议时不需要对头部字段进行底层对齐处理。

3.1.2 字节序

  在设计协议头时,通常都要保证具有不同字节序的主机能够相互通信。在通信协议中,最常见的字节序是网络字节序(与大多数微处理器的字节序不同)。因此,在实现协议时,先必须明确地将头部所有的多字节字段转换为网络字节序,然后才写入包头。当接收到包时,进行相反的转换。
  通过使用包属性,实现协议时不需要考虑被传输的包是什么字节序,能直接以主机字节序访问包属性。变色龙的头部转换模块将负责字节序的转换。

头部字段跨层位组合

  协议头的很多字段只需要一个或几个比特位,比如flag字段、指定包类型的字段。为了减小包头的总尺寸,通常将许多单字节字段放到一个字节里。在传感器网络中,包的总尺寸很小(例如,Tomte Sky的无线收发器芯片将包的大小限制为128字节),为了在一个包中传输尽量多的数据,减小头部尺寸就成了一项很重要的工作。
  手工填充单比特的头部字段有很多缺点。第一,实现协议时必须知道单比特字段的确切数量,且这些头部字段必须通过移位操作和布尔表达式访问。第二,实现协议时必须知道单比特字段的内存位置。第三,处于不同层的协议不能将它们的单字节字段合并到一个字节。
  在传统的分层通信架构中,不可能将处于不同层的不满一个字节的字段打包成到一个字节内。相反,这些字段都需要占用整个字节。图3是一个例子。
  

![图3.](http://img.blog.csdn.net/20160523102930986)

  变色龙架构的包属性简化了头部字段位组合的实现,能够让本层内以及不同层之间的头部字段进行位组合。由于头部传输模块能访问每个包的所有包属性,因此它能有效地将比特属性打包为单字节,如图4所示。
  
![这里写图片描述](http://img.blog.csdn.net/20160523103844162)

3.1.4 头部压缩

  头部压缩是一个减小传输头的机制。头部压缩不仅能增加网络吞吐量,还能够减小无线网络中的功耗、包丢失率。在无线传感器网络中,头部压缩已被用于减小6lowpan的IPv6头部尺寸。
  在传统的头部压缩中,头部压缩模块既要解析原始头格式,又要进行位组合。通过包属性,头部压缩被包括到架构之中。

逻辑通道channel

  在变色龙架构中,使用不同的逻辑通道进行通信。每个通道有自己的协议和包属性。