rime协议栈简介

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/frank_jb/article/details/46381971

本文是参考了网上资料,并对An Adaptive Communication Architecture for Wireless Sensor Networks一文进行翻译总结后汇总而成


摘要:

本文讲述了Rime协议栈的提出背景、体系结构,最后罗列Rime协议栈学习资料。并附上Rime的名称来源。

一、提出背景

传统的分层通信架构(communication architectures)很难满足资源受限的传感器网络,于是,研究者转向跨层优化(比如将数据聚合顶层的功能放在底层实现),但这导致系统变得更脆弱以及难以控制(fragile and unmanageable systems)。传统分层通信结构再次得到重视。同时研究发现,传统分层效率几乎可以与跨层优化相媲美[1]。Rime就是在这样的背景开发的。(其实我觉得蛮套话的)

 

二、Rime概述

Rime是针对传感器网络轻量级、层次型协议栈。这是与传统分层网络架构,如Internet架构是不同的,因为rime中的各层是非同寻常的简单。它也是低功耗、无线网络协议栈,旨在简化传感器网络协议及代码重用,Contiki已实现了rime协议栈(Contiki还支持uIPv4、uIPv6、lwIP)。Rime的代码大小低于2KB,内存需求也仅几十字节。

2.1 使用Rime

先来看下应用程序如何使用Rime协议栈,如下图:


图1 应用进程使用Rime通信示意图

由上图可知,有两种方式使用Rime。应用1使用mesh路由协议(跑在Rime协议栈之上),而应用2直接使用Rime协议栈。每个通信路径使用自己的逻辑信道。由上图可以看出rime采用广播形式。

2.2Rime协议栈结构图

Rime是分层的,类似于TCP/IP协议栈,


    Rime的层次被设计的极端简单,包括接口和实现。每一层为送出的消息添加头部。因为Rime各层很简单,私有头部非常小,每个一般仅几个字节。

一个在MAC之下的层或是链路层可以选择在硬件或是固件实施部分rime协议栈,如abc、ibc、或是uc层。

A、将负担从应用转移到系统核心

Rime一个基本思想就是把burden从协议实施转移到rime,根据存储容量。让rime成为contiki系统核心的一部分,一直存在于内存中,这样可以让loadable programs(下载的程序)变得更小。进而,减少了程序下载的能量消耗。

B、缓冲区管理

为了减少内存容量,rime类似uIP,只用一个缓冲区对接收和发送的数据包进行缓存。需要对数据进行排队的层,如stubborn协议或是MAC层,复制数据到动态分配的队列缓冲区。

abc

abc意思是anonymous best-effort broadcast,匿名广播,rime的最底层。即将数据包通过无线射频驱动(radio driver)发出去,接收来自无线射频驱动所有的包并交给上层。Abc层提供一个16位信道抽象但无节点寻址(nonode addressing);它由上层添加。

ibc

ibc意思是identified sender best-effort broadcast,将上层的数据包添加一个发送者身份(sender identity)头部。

uc

uc意思是unicast abstraction,将上层的数据包添加一个接收者头部(adds areceiver header field)。

Stubborntransmission

可靠通信由两层实现:Stubborn transmission、Reliable transmission。Stubborn transmission(译为顽固传输?),这一层在给定的时间间隔不断地重发数据包,直到上层让其停止。为了防止无限重发,需要指定最大重发次数(maximum retransmission number)。Stubborn层不仅用来实现可靠传输,也被发送周期性消息的协议使用 (如路由协议的邻居维持),还被用来在Rime网络的flooding 层(nf)反复发送消息。

Reliablecommunication

Reliable communication是可靠通信的另一层,该层主要实现确认和序列功能(acknowledgments and sequencing)。

Bulktransfer

块传输,应该是这样翻译吧。

 

2.3Rime协议栈层次图

从另一个角度看Rime协议栈如下图:


2.4 基本评价

A、内存使用

当前最小的模块是ibc,只有100字节。Stubbornunicast和reliable unicast是最大的,占用226字节。当前总的rime少于2KB,但随着新特性的加入,所占内存会增加。

B、hop-by-hop reliable data collection routingprotocol

通过重载treeroute来评价rimeTreerouteContiki的逐跳可靠数据收集路由协议。通过代码行数和占用空间进行对比。结果表明,rime极大减少了传感网络协议实施的复杂性。在msp430MCUGCC 3.2.3编译器下

对于数据收集协议的模块的重载,尽管降低了代码和内存的使用空间,但数据收集协议和rime模块的总代码量稍稍多于现存数据收集机制。然而,在一个使用rime的系统中,rime模块的占用空间将会被所有使用rime的协议和应用所摊销。所以,总体上,对于使用rime的系统,rime将减少代码和内存总的占用空间。

总的来说,rime 可以极大的降低传感网络协议实施的复杂性,但所需资源会有小幅增加。如果在更加全面的评价中仍然获得这样的结果,那么表明分层协议栈或许是适合通信抽象化的(communication abstraction),甚至是是对于无线传感网络。

 

 

三、学习资料

[1]AnAdaptive Communication Architecture for Wireless Sensor Networks.pdf  

[2]PosterAbstract- Rime - A Lightweight Layered Communication Stack for SensorNetworks.pdf   

[3]contiki-course-kth-9oct2008-draft.pdf  

[4]rime-doc.txt   

[5]SensTools- os:contiki Rime Stack

[6] 源代码

[1][2]是最重要的资料,介绍了Contiki背景、原理等,蛮学术化的;[3]是Adam的演讲PPT,称Contiki速成课程,有多张示意图,宏观Rime协议栈,很有好处。[4]是Contiki源码doc文件下的文档,简述Rime;[5]介绍Contiki的,有一部分是介绍Rime,有一张图蛮有用的,并解释一些名词。当然,这些资料远远不够,最后还是得结合源代码[6]。

展开阅读全文

没有更多推荐了,返回首页