[Rime 协议栈] MAC 协议架构

  通过前面的学习,我们已经知道,Rime协议栈中的子协议都直接或者间接地运行在匿名广播abc之上,当他妈需要发送消息的时候,最终会调用到abc_send,而abc_send会调用Rime协议栈的接口rime_output,然后经过链路安全层llsec,最终调用mac层协议,最终通过无线收发器将数据包发送出去。
  相对应的代码主要位于contiki/core/net/mac目录下。

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

MAC协议基本框架

  这里的框架只是我按照Contiki中的代码调用逻辑抽象出来的,从上到下依次是RIME子层,LLSEC子层,MAC子层,RDC子层,FRAMER子层,RADIO子层。如果与OSI七层模型做一个对比,我们可以将LLSEC子层、MAC子层、RDC子层、FRAMER子层都归结于MAC协议,我们将分别简要介绍这几层。
  
LLSEC层
  LLSEC的全称是Link layer security,即链路层安全。在Contiki中,该层对应的默认驱动定义为#define NETSTACK_LLSEC nullsec_driver。但是其实该驱动并没有做链路层安全处理,而只是简单地提供了该层的接口。
相关代码位于contiki/core/net/llsec目录下。

MAC层
  MAC的全称是Media Access Control,即媒体访问控制。该层主要负责节点公平地竞争无线信道,比如实现CSMA算法。Contiki中实现了多种MAC协议,包括contikimac,cxmac,sicslowmac,tsch以及nullmac,默认配置的协议是contikimac。
  我们今后主要关注文件csma.[ch]

RDC层
  RDC的全称是Radio Duty Cycling,Contiki实现该层的目的是节能。通常在一个节点中,无线收发器是最消耗电能的设备之一,需要达到节能的目的,当然得关闭无线收发器。RDC层就负责周期性地关闭无线收发器,但为了接收数据,同时又周期性地唤醒无线收发器。
  我们今后主要关注文件contikimac.[ch]
  
FRAMER层
  FRAMER层在数据包前面加上帧头,负责将数据包封装成帧。
  我们今后主要关注文件frame802154.[ch]frame-802154.[ch]
  
RADIO层
  RADIO层应该属于OSI七层模型中的物理层,负责将