CSMA/CA的MAC(多址接入)部分又可以分为两类:基本方案和RTS/CTS (Request To Send/Clear To Send)方案。下面讨论RTS/CTS方案。
当采用RTS/CTS方案时,如果一个节点有数据需要发射,首先检测信道是否空闲:
(1)如果信道空闲且空闲持续时间的长度达到DIFS(分布式的帧间间隔),节点则首先发射一个RTS分组来预约信道,然后目标接收节点应答一个CTS组。
(2)如果信道非空闲,或空闲持续时间小于DIFS,则节点进入冲突避免(CA)状态。当节点接收到CTS 分组后,开始发射DATA分组,最后目标接收节点再应答一个ACK分组。由于RTS分组(长度为44字节)之间的冲突对网络性能造成的损害要远远小于DATA分组(长度为2346字节)之间的冲突所造成的损害,因此,采用RTS/CTS方案可以提高网络的性能。但是,当DA TA分组的长度较小时,就需要考虑发射RTS /CTS所造成的开销。
CSMA/CA的CS(载波检测)部分包括物理层的载波检测和MAC层的虚拟载波检测。前者主要是检测其他节点造成的信道物理状态的变化。后者则通过使每个节点都各自维持一个NA V(网络分配矢量)参数来实现。当一个节点(如A)收到其他节点发射的RTS、CTS和DATA分组时,从这些分组的头部提取出该数据交换序列剩余的持续时间来更新A自己的NA V。根据NA V的值,A的MAC层就能够知道当前的数据传送活动将在什么时候结束。因此,采用虚拟载波检测的主要目的是为了在多跳Ad hoc网络中防止出现隐终端问题。此外,在许多节省能量消耗的方案中,虚拟载波检测机制对于确定节点应该何时从“睡眠"状态“醒来"而进入到“活跃”状态也是非常重要的。
CSMA/CA中的CA(冲突避免)部分比较简单:当节点接收到新的数据发送任务时,首先检查载波检测的结果,如果信道空闲且持续时间超过DIFS时间,则立即发送该分组;如果信道非空闲或空闲持续时间小于DIFS时间,则随机选择一个退避时间之后执行随机退避;在退避的过程中如果信道非空闲则暂停随机退避过程,而当信道转为空闲且持续时间超过DIFS时间之后再恢复随机退避过程,并在随机退避计数器的数值递减为O时立即发送RTS分组。当RTS-CTS握手失败或DA TA-ACK握手失败时,发射节点则认为发生了分组接收冲突事件,进而执行冲突解决:增大随机退避窗口的数值,随机选择退避时间并执行随机退避过程。如果RTS-CTS连续握手失败的次数达到一定的数值,则认为目标节点已不可达,此时发射节点丢弃分组并向路由层报告链路失效。