之前做传感网一直在tinyOS系统下,contiki只是稍微了解,近来实验室突然接到contiki下的一个项目,所以把之前了解的又稍微整理了下。
1.contiki协议总体框架
各层作用如下:
- Radio:主要完成物理层无线数据的收发和控制
- Framer: 完成对数据帧的打包和解析
- RDC: radio duty cycling, 周期性访问radio,主要为了减少功
耗。 - MAC: 数据链路层
- Netstack: 网络协议栈
2.各层包含的协议如下:
2.网络协议栈
Contiki系统内部集成了两种类型的无线传感器网络协议栈:uIP和Rime。uIP 是一个小型的符合RFC 规范的 TCP/IP 协议栈,使得 contiki 可以直接和Internet通信。uIP包含了IPv4 和 IPv6 两种协议栈版本,支持 TCP、UDP、ICMP等协议,但是编译时只能二选一,不可以同时使用。Rime 是一个轻量级为低功耗无线传感器网络设计的协议栈,该协议栈提供了大量的通信原语,能够实现从简单的一跳广播通信,到复杂的可靠多跳数据传输等通信功能。
2.1 rime协议栈
Rime是针对传感器网络轻量级、层次型协议栈,也是低功耗、无线网络协议栈,旨在简化传感器网络协议及代码重用,属于Contiki的一部分(Contiki还支持uIPv4、uIPv6、lwIP)。Rime协议栈提供一种递阶型无线网络协议,从简单的匿名广播到mesh网络路由。一个复杂的协议(比如multihop mesh routing)实现会被分解成若干部分,复杂的模块利用相对简单的模块来组成。
- abc:匿名广播,它仅通过射频驱动发送数据包和接收所有的数据包,并将他们送至上层;
- broadcast:标识广播,它为发出的数据包添加了发送者地址,然后传递给abc模块;
- unicast:这个模块添加给数据包添加一个目标地址,再传递给broadcast模块。在接收端,如果数据包的目标地址和当前节点地址不符,该数据包将为丢弃。
- stunicast:当要求发送数据包至某个节点,它将在给定的时间周期内反复发送,直到要求停止。
- runicast:可信单播,它使用stunicast模块发送数据包,并等待确认报文,收到后停止持续重发数据包。为了防止无限次发送,必须指定一个最大重发次数。
- polite和ipolite:这两个模块几乎相同,当一个数据包必须在给定的时间帧内被发送,模块在到达时间的一半时,检查是否收到的数据包与它准备发送的相同。如果收到了,这个数据包将不被发送,否则发送。这是一个有效的泛洪技术,可以避免没必要的重发。
- multihop:这个模块要求一个路由表功能,当将要发送数据时它会请求路由表提供下一跳,并且使用unicast发送。当它收到一个数据包,如果本身即为目标节点就将数据包传至上层,否则再次请求路由表提供下一跳并转发。
- 分发协议:rudolph0,rudolph1,rudolph2,netflood,trickle。此外,contiki还实现了tinyOS系统的标准分发协议Deluge。
- 汇聚协议:collect,包括collect-link-estimate、collect-neighbor、neighbour-discovery。
- 转发协议:rmh,rucb。