Alex_McAvoy

想要成为渔夫的猎手

无线传感网络的 MAC 协议

【S-MAC 协议】

概述

S-MAC 协议假设信道是单信道,平均数据率很低,且网络能够容忍一定程度的通信延迟

其基本思想是:

  1. 采用周期性的休眠/侦听方法减少空闲侦听带来的能量损耗
  2. 当有节点收发数据时,与此无关的邻居节点进入休眠减少冲突与串音带来的能量损耗
  3. 采用消息传递机制,减少控制消息带来的能量损耗
  4. 采用自适应的侦听机制,减少消息传输延迟

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$ 个时隙发送数据的概率为:

感谢您对我的支持,让我继续努力分享有用的技术与知识点!