低功耗无线传感器网络协议栈

 

Contiki系统内部集成了两种类型的无线传感器网络协议栈:uIP和Rime。uIP 是一个小型的符合RFC 规范的 TCP/IP 协议栈,使得 contiki 可以直接和Internet通信。uIP包含了IPv4 和 IPv6 两种协议栈版本,支持 TCP、UDP、ICMP等协议,但是编译时只能二选一,不可以同时使用。Rime 是一个轻量级为低功耗无线传感器网络设计的协议栈,该协议栈提供了大量的通信原语,能够实现从简单的一跳广播通信,到复杂的可靠多跳数据传输等通信功能。

uIP-tcpip;rime—低负载。应用程序可以使用两者之一或是两者都用,当然也可以都不用。Uip可以运行在rime之上,rime也可以运行uip之上。(adml)

 


uIP TCP/IP stack

uIP的TCP/IP协议栈是为能够在对内存具有严格要求的智能体和其他网络嵌入式设备运行而设计的。uIP的第一版在2001年9月发布,只有IPv4的通信功能,但在2008年思科系统扩充了uIP的IPv6功能,该uIPv6栈是第一个符合所有IPv6要求的。uIP的代码大小是几千字节,内存占用小于2KB。IPv6比IPv4要求略高。

uIP是一个简单好用的嵌入式网络协议栈,易于移植且消耗的内存空间较少,非常适合学习和使用。可以肯定的说uIP是嵌入式以太网学习的好起点,但不一定是终点。uIP的功能远不如LwIP强大,但两者并没有孰优孰劣之分,uIP和LwIP的作者同为Adam Dunkels,LwIP发布比uIP早一年的时间,uIP经过这几年的发展从IPV4迁移到IPV6,最终可以适用于无线传感网络。总的来说,uIP是一个很好的起点,学好uIP可以迁移到LwIP,也可以迁移到uIPV6。

Contiki 提供完整的 uIP 网络和低功耗无线网络协议栈。对于uIP 协议栈,一个轻量级的TCP/IP协议栈,实现了RFC定义的IPv4,IPv6。uIP很高效,只实现了协议要求的特性。例如整个协议栈只有一个buffer,用于接收和发送数据报。支持 IPv4 和 IPv6 两个版本,其中,IPv6 还包括 6Lowpan 适配层、ROLL RPL无线网络组网路由协议、CoRE/CoAP 应用层协议、还包括一些简化的 Web 工具,包括 Telnet、http 和 web 服务等。Contiki 还实现了无线传感器网络领域知名的MAC和路由层协议,其中 MAC 层包括 X-MAC、CX-MAC、NullMac、ContikiMAC、CSMA/CA、LPP 等,路由层包括 AODV、RPL等。

Application API

这里有两种方法使用uIP协议栈写程序:

·raw API:uIPraw API很适合实现一个简单的应用,例如一个简单的’echo’ server可以监听一些TCP端口并且将它收到的每个数据发送回去。然而当实现一个全功能的程序时编码变得越来越复杂,或者当多个程序需要共同使用时。甚至TCP连接状态机都有些烦人。

·protosocket API:protosocketlibrary利用 protothread library,提供一个更灵活的方式编写TCP/IP程序。这个库提供了一个类似于标准BSD sockets的接口,并允许在一个进程中编写程序。

Lower Layers

拥有一个有效的TCP/IP协议栈并且某些程序可以运行在其上当然很好,但是还不够。uIP协议栈要求一个更低的层(根据OSI模型)为了和peers通讯。我们将讨论两种类型的peers。

·节点(nodes):节点间通信是由无线连接实现的。uIP协议栈需要能够发送和接受数据包。取决于uIP版本,Contiki遵循不同的方法:

·1、当使用IPv6,Contiki将遵循route-over配置(RPL:低功耗有损网络的IPv6路由协议)。因此,uIP6使用一个被称为sicslowmac的简单MAC层。除了头部压缩由6loWPAN模型提供,它仅通过射频转发数据包。

2、对于IPv4(并不是IPv4),Contiki选用mesh-under配置。这由Rime通讯协议栈完成。Rime提供mesh routing和路由发现,因此uIP使用它来转发网络上的数据包。从IP point的角度来看,所有的传感器网络节点组成了一个本地子网,虽然multiple radio hops可能被要求。(这里的说法有待验证)

 

Rime stack

官网对rime的解释:

对于带宽有限或者不能运行完整IPv6网络栈的环境,Contiki定制了名为Rime的无线网络栈。Rime栈既支持简单操作,例如向所有邻居或指定邻居节点发送消息,也支持一些复杂机制,例如网络洪泛、多跳数据采集等。Rime可以运行在休眠路由上以降低功耗。

维基百科中给出的关于rime网络的解释:

Contiki provides threenetwork mechanisms: the uIP TCP/IPstack,which provides IPv4 networking,the uIPv6 stack,which provides IPv6 networking,and the Rime stack, which is a set of custom lightweight networking protocolsdesigned specifically for low-power wireless networks. The IPv6 stack wascontributed by Cisco and was, at the time of release, the smallest IPv6 stackto receive the IPv6 Ready certification.TheIPv6 stack also contains the RPL routingprotocol for low-power lossy IPv6 networks and the 6LoWPAN headercompression and adaptation layer for IEEE802.15.4 links.

The Rime stack isan alternative(可供代替的)network stack that is intended to be used when the overhead of the IPv4 orIPv6 stacks is prohibitive. The Rime stack provides a set of communicationprimitives for low-power wireless systems. The default primitives aresingle-hop unicast, single-hop broadcast, multi-hop unicast, network flooding,and address-free data collection. The primitives can be used on their own orcombined to form more complex protocols and mechanisms.[8]

Rime协议栈提供一种递阶型无线网络协议,从简单的匿名广播到mesh网络路由。一个复杂的协议(比如multihop mesh routing)实现会被分解成若干部分,复杂的模块利用相对简单的模块来组成。

以下是对Rime不同模块的简述:

·abc:匿名广播,它仅通过射频驱动发送数据包和接收所有的数据包,并将他们送至上层;

·broadcast:标识广播,它为发出的数据包添加了发送者地址,然后传递给abc模块;

·unicast:这个模块添加给数据包添加一个目标地址,再传递给broadcast模块。在接收端,如果数据包的目标地址和当前节点地址不符,该数据包将为丢弃。

·stunicast:当要求发送数据包至某个节点,它将在给定的时间周期内反复发送,直到要求停止。

·runicast:可信单播,它使用stunicast模块发送数据包,并等待确认报文,收到后停止持续重发数据包。为了防止无限次发送,必须指定一个最大重发次数。

·politeipolite:这两个模块几乎相同,当一个数据包必须在给定的时间帧内被发送,模块在到达时间的一半时,检查是否收到的数据包与它准备发送的相同。如果收到了,这个数据包将不被发送,否则发送。这是一个有效的泛洪技术,可以避免没必要的重发。

· multihop:这个模块要求一个路由表功能,当将要发送数据时它会请求路由表提供下一跳,并且使用unicast发送。当它收到一个数据包,如果本身即为目标节点就将数据包传至上层,否则再次请求路由表提供下一跳并转发。

官网对rime的解释:

对于带宽有限或者不能运行完整IPv6网络栈的环境,Contiki定制了名为Rime的无线网络栈。Rime栈既支持简单操作,例如向所有邻居或指定邻居节点发送消息,也支持一些复杂机制,例如网络洪泛、多跳数据采集等。Rime可以运行在休眠路由上以降低功耗。

维基百科中给出的关于rime网络的解释:

Contiki provides threenetwork mechanisms: the uIP TCP/IPstack,which provides IPv4 networking,the uIPv6 stack,which provides IPv6 networking,and the Rime stack, which is a set of custom lightweight networking protocolsdesigned specifically for low-power wireless networks. The IPv6 stack wascontributed by Cisco and was, at the time of release, the smallest IPv6 stackto receive the IPv6 Ready certification.TheIPv6 stack also contains the RPL routingprotocol for low-power lossy IPv6 networks and the 6LoWPAN headercompression and adaptation layer for IEEE802.15.4 links.

The Rime stack isan alternative(可供代替的)network stack that is intended to be used when the overhead of the IPv4 orIPv6 stacks is prohibitive. The Rime stack provides a set of communicationprimitives for low-power wireless systems. The default primitives aresingle-hop unicast, single-hop broadcast, multi-hop unicast, network flooding,and address-free data collection. The primitives can be used on their own orcombined to form more complex protocols and mechanisms.[8]

Contiki网络协议栈uIP和rime相关推荐

  1. Linux 虚拟化网络技术 — 虚拟网络协议栈

    目录 文章目录 目录 前言 Neutron L3 agent 概述 L3 agent的配置 虚拟路由器实现原理 总结 前言 本文通过 OpenStack Neutron L3 Agent 实现的 Li ...

  2. linux 内核网络协议栈

    Linux网络协议栈之数据包处理过程  1前言 本来是想翻译<The journey of a packet through the linux 2.4 network stack>这篇文 ...

  3. linux内核网络协议栈--linux bridge(十九)

    1 . 前言 本文是参考附录上的资料整理而成,以帮助读者更好的理解kernel中brdige 模块代码. 2. 网桥的原理 2.1 桥接的概念 简单来说,桥接就是把一台机器上的若干个网络接口" ...

  4. linux内核网络协议栈--网卡报文收发(十六)

    版本说明 Linux版本: 3.10.103 网卡驱动: ixgbev 报文收发简单流程 网卡驱动默认采用的是NAPI的报文处理方式.即中断+轮询的方式,网卡收到一个报文之后会产生接收中断,并且屏蔽中 ...

  5. linux内核网络协议栈--linux网络设备理解(十三)

    网络层次 linux网络设备驱动与字符设备和块设备有很大的不同. 字符设备和块设备对应/dev下的一个设备文件.而网络设备不存在这样的设备文件.网络设备使用套接字socket访问,虽然也使用read, ...

  6. linux内核网络协议栈--监控和调优:接收数据(十五)

    译者序 本文翻译自 2016 年的一篇英文博客 Monitoring and Tuning the Linux Networking Stack: Receiving Data.如果能看懂英文,建议阅 ...

  7. linux内核网络协议栈--数据接收流程图(五)

    各层主要函数以及位置功能说明: 1)sock_read:初始化msghdr{}的结构类型变量msg,并且将需要接收的数据存放的地址传给msg.msg_iov->iov_base. net/soc ...

  8. Linux 内核网络协议栈运行原理

    封装:当应用程序用 TCP 协议传送数据时,数据首先进入内核网络协议栈中,然后逐一通过 TCP/IP 协议族的每层直到被当作一串比特流送入网络.对于每一层而言,对收到的数据都会封装相应的协议首部信息( ...

  9. linux 虚拟机大量udp请求失败_理解 Linux 网络栈:Linux 网络协议栈简单总结分析...

    1. Linux 网络路径 1.1 发送端 1.1.1 应用层 (1) Socket 应用层的各种网络应用程序基本上都是通过 Linux Socket 编程接口来和内核空间的网络协议栈通信的.Linu ...

最新文章

  1. kafka备份机制——zk选举leader,leader在broker里负责备份
  2. FineUI第七天---文件上传
  3. Linux日志查看head与tail配合查看区间行数的内容
  4. 解惑图数据库!你知道什么是图数据库吗?
  5. 2015 German Collegiate Programming Contest (GCPC 15)
  6. jpa 实体映射视图_JPA教程:映射实体–第1部分
  7. 查看一个网站后台是用的什么服务器
  8. mysql事件的使用-开启与关闭事件
  9. 计算机应用基础教程清华大学,清华大学出版社-图书详情-《大学计算机应用基础教程(第3版)》...
  10. postSQL安装和GIS数据导入
  11. 37wan《武易》全新系统机密放送
  12. 三角洲并联臂3D打印机入门了解
  13. 苹果logo_苹果 ARM Mac 发布会独特标志 Logo 亮相
  14. JavaScript 数组和函数
  15. html5 canvas 绘制、移动方块及撤销操作
  16. 教你快速开发一个 狼人杀微信小程序(附源码)
  17. C/C++ 基于Linux的高并发后台服务器-经验小结
  18. 使用翻译的neko模块
  19. 最小编辑距离 动态规划 python
  20. Windows注册服务的几种方式

热门文章

  1. 计算机主机风扇怎么庄,机箱风扇怎么装,小编教你电脑机箱风扇怎么装
  2. 对于“卡片复用”引来的一场尴尬。。。
  3. scala中的break和continue
  4. Java并发编程系列之二十四:Exchanger
  5. 保研面试/考研复试:英语口语面试必备话题及常用句型句式整理(三)
  6. IDEA 利用MySQL驱动连接数据库
  7. 计算机怎么登录用户名和密码忘了怎么办,忘记了路由器的登录用户名与密码怎么办...
  8. 二维空间下的向量旋转
  9. 批处理框架 Spring Batch 这么强,你会用吗?
  10. 数据结构与算法2:线性表的顺序存储与链式存储