【S-MAC 协议】
概述
S-MAC 协议假设信道是单信道,平均数据率很低,且网络能够容忍一定程度的通信延迟
其基本思想是:
- 采用周期性的休眠/侦听方法减少空闲侦听带来的能量损耗
- 当有节点收发数据时,与此无关的邻居节点进入休眠减少冲突与串音带来的能量损耗
- 采用消息传递机制,减少控制消息带来的能量损耗
- 采用自适应的侦听机制,减少消息传输延迟
S-MAC 协议会周期性的休眠/唤醒,降低空等时间,避免了冲突,同时使用自适应侦听和消息传递机制,但调度周期是固定的,不能适应网络流量变化,而且簇边界节点能量消耗快,同时,节点休眠带来了时延
周期性睡眠和侦听
每一个节点都有一个预先确定的时间表,用于周期性睡眠和侦听
如下图,Wakeup Period 是唤醒周期(调度周期),Active Period 是侦听时段(活跃时段),Sleep Period 是睡眠周期
定义占空比为:
那么选择较小的占空比时,收发机大部分时间处于休眠状态,可以避免空闲监听(Idle Listening)所造成的能量消耗,同时,由邻居节点流向给定节点的通信量会集中在一个较小的时间窗口内,从而可能会引发显著的竞争和较重的负载;如果选择较长的休眠时段,则会出现一个显著的每跳等待时间,在多跳的情况下,这个等待时间的累积可能会产生较大的端到端的延迟
节点选择自己的调度表或遵循其他节点的调度表,这就使得一个节点的调度周期与邻居节点的调度周期保持一致。
节点启动时的处理流程图如下:
节点工作时的处理流程图如下:
冲突避免
如果多个邻居节点同时想与一个节点通信,它们将试图在该节点开始侦听时发送消息,在该情况下,它们需要竞争媒体
在竞争协议中,IEEE 802.11 在冲突避免这方面做得很好,S-MAC 遵循类似的流程,包括虚拟载波侦听和物理载波侦听,解决隐藏终端问题的 RTS/CTS 交换
每个传输包中都有一个持续时间域来标识该包要传输多长时间,如果一个节点收到一个传输给另外一个节点的包,该节点就能从持续时间域知道在多长时间内不能发送数据
节点以变量形式记录该值,被称为网络分配矢量(NAV),NAV 可以被看成一个计时器,每次计时器开始计时,节点递减它的 NAV,直到减少到 $0$
在传输之前,节点首先检查它的 NAV,如果它的值不为 $0$,节点就认为媒体忙,这被称为虚拟载波侦听,而物理载波侦听在物理层执行,通过侦听信道进行可能的传输
载波侦听时间是竞争窗口内的一个随机值,以避免冲突和饥饿现象,如果虚拟载波侦听和物理载波侦听都标识媒体空闲,那么媒体就是空闲的
流量自适应侦听
由于周期性睡眠,会导致了通信延迟的累加问题
为解决该问题,就有了流量自适应侦听技术
消息传递机制
消息(Message)是具有密切的内部联系的数据的集合,只有得到完整的数据才可以在网络内部进行数据处理、聚合
S-MAC 协议将长的信息包分成若干个短的信息段 DATA,使用一个 RTS/CTS 控制分组占用信道,每个 DATA 都有 ACK 保障传输成功,任一 DATA 未收到应答,则立刻重传
【T-MAC 协议】
概述
T-MAC 协议与自适应睡眠的 S-MAC 协议基本思想大体相同
数据传输仍然采用 RTS/CTS/DATA/ACK 的 $4$ 次握手机制,不同的是,在节点活动的时隙内插入了一个 TA(Time Active)时隙,若 TA 时隙之间没有任何时间发生,则活动结束进入睡眠状态
设计思想的区别在于根据网络负载状况动态调整活动期的长度,并且用突发方式发送数据消息,减少空闲侦听
活跃周期时间的选择
T-MAC 协议的活跃时间的长度是固定的,其能按照能够处理最高负载来设计,但如果网络中消息传递的速率很低的话,仍然有大量的能量浪费在空闲等待
因此,在设计时,通过调整调度周期中的活跃时间长度,在活跃周期时间内没有发生激活事件则进入睡眠
在活跃状态下,节点可能保持监听,也可能发送数据。当在一个时间段内没有发生激活事件时,活跃状态结束,节点进入睡眠状态
激活事件的定义如下:
- 定时器触发周期性调度唤醒事件
- 物理层从无线信道接收到数据包
- 物理层指示有的无线信道忙
- 节点的 DATA 帧或 ACK 帧发送完成
- 通过监听 RTS、CTS 帧,确认邻居的数据交换已经结束
活跃周期时间决定了每个周期的最短空闲侦听时间,其取值约束为:
其中,$T_A$是活跃周期时间,$C$ 是竞争信道的时间,$R$ 是发送 RTS 包所需时间,$T$ 是从 RTS 发送结束到开始发送 CTS 的时间
一般来说,常将活跃周期时间设为:
早睡的解决
早睡问题
在采用周期性调度的 MAC 协议中,如果一个节点在邻居准备向其发送数据时进入了睡眠状态,就称为出现了早睡
如下图所示,$A$、$B$ 之间,$B$、$C$ 之间,$C$、$D$ 之间可以相互通信,假设数据传输方向是 $A$、$B$、$C$、$D$
如果节点 $A$ 通过竞争获得了与节点 $B$ 通信的机会,节点 $A$ 发送 RTS 给 $B$,$B$ 回复 CTS 给 $A$
那么当 $C$ 收到 $B$ 发出的 CTS 时,会触发一个新的监听时间段,使 $C$ 保持监听状态,而 $D$ 没有发现 $A$、$B$ 之间正在进行的通信,由于无法触发新的 $T_A$,$D$ 会进行睡眠
但 $A$、$B$ 之间通信结束时,$C$ 竞争获得信道,由于 $D$ 此时已经睡眠,所以必须等到 $D$ 在下一次调度唤醒时才能进行 RTS/CTS 交互
在 T-MAC 中,对早睡问题,有两种解决方案:预请求发送机制(FRTS,Future Request To Send)、满缓冲区优先机制(Full-buffer Briority)
预请求发送
如下图所示,当节点 $C$ 收到 $B$ 发给 $A$ 的 CTS 后,立即向 $D$ 发送一个 FRTS,FRTS 帧包含节点 $D$ 接收数据前需要等待的时间长度,$D$ 在此时间内必须保持在监听状态
由于 $C$ 发送的 FRTS 可能干扰 $A$ 发送的数据,所以 $A$ 需要将发送的数据延迟相应的时间
$A$ 在接收到 CTS 之后发送一个与 FRTS 长度相同的 DS 帧,该帧不包含有用信息,只是为了保持 $A$、$B$ 对信道的占用,在发送 DS 之后 $A$ 立即向 $B$ 发送数据信息
因为采用了 FRTS 机制,这会增加一个 CTS 时间,使得吞吐量提高的同时减少了延迟,但是增加了控制开销,会降低 TMAC 协议的能量效率
满缓冲区优先机制
当节点的缓冲区接近占满时,对接收到的 RTS 帧不回复 CTS,而是立即向缓冲区中数据包的目的节点发送 RTS,以建立数据传输
在 $B$ 向 $C$ 发送 RTS 时,$C$ 因缓冲区快占满不发送 CTS,而是发送 RTS 给 $D$
这个方法减少了早睡问题发生的可能性,在一定程度上能够控制网络的流量,但是在网络数据量较大时增加了冲突的可能
【Sift 协议】
概述
Sift 协议是基于事件驱动的 MAC 协议,充分考虑了 WSN 的三个特点:
- WSN 是事件驱动的,存在事件检测的空间相关性和事件传递的相关性
- 由于汇集节点的存在,不是所有节点都需要报告事件
- 感知事件的节点密度随时间动态变化
其设计目标是:当共享信道的 $N$ 个节点同时检测到同一个事件时,希望 $R(R<N)$ 个节点能够在最小时间内无冲突地成功地发送事件检测消息,抑制剩余 $N-R$ 个节点的消息发送
Sift 协议很好地利用了 WSN 流量具有突发性和局部相关性,通过在不同时隙采用不同的发送概率,使得在短时间内部分节点能够无冲突地广播事件,从而在节省能量的同时,节省了传输延时
基本思想
基于事件驱动的无线传感器网络具有如下特点:
- 网络中的数据传输由事件驱动,存在空间相关的竞争
- 不是所有节点都需要报告事件
- 节点的密度是时变的
当数据需要发送时,节点首先在发送窗口 $[1,CW]$ 内的概率随机选择一个发送时隙,然后节点监听直接选择的发送时隙到来
如果监听期间没有其他节点使用信道,则节点立即发送数据,否则需要在信道空闲时重新选择发送时隙
冲突时就倍增时间窗口大小 $CW$,并且在新窗口内重新选择发送时隙,以增大无冲突发送的概率
工作过程
当节点发送消息时,首先假设当前 $N$ 个节点与其竞争发送
如果第一个时隙内节点不发送消息,也没有其他节点发送消息,则节点就减少假设的发送节点数目,并相应地增加选择在第二个时隙发送数据的概率
如果节点没有选择第二个时隙,且没有其他节点在该时隙发送消息,则节点继续减少假设的发送节点数目,并进一步增加选择在第三个时隙发送数据的概率
以此类推,在第 $r$ 个时隙发送数据的概率为: