CSMA/CD协议已成功应用于使用有线连接的局域网,但在无线局域网环境下,却不能简单地搬用CSMA/CD协议,特别是碰撞检测部分。主要有两个原因:
1)接收信号的强度往往会远小于发送信号的强度,且在无线介质上信号强度的动态变化范围很大,因此若要实现碰撞检测,则硬件上的花费就会过大。 2)在无线通信中,并非所有的站点都能够听见对方,即存在“隐蔽站”问题。
为此,802.11标准定义了广泛应用于无线局域网的CSMA/CA 协议,它对CSMA/CD协议进行了修改,把碰撞检测改为碰撞避免(Collision Avoidance,CA)。“碰撞避免”并不是指协议可以完全避免碰撞,而是指协议的设计要尽量降低碰撞发生的概率。由于802.11无线局域网不使用碰撞检测,一旦站点开始发送一个帧,就会完全地发送该帧,但碰撞存在时仍然发送整个数据帧(尤其是长数据帧)会严重降低网络的效率,因此要采用碰撞避免技术降低碰撞的可能性。
由于无线信道的通信质量远不如有线信道,802.11使用链路层确认/重传(ARQ)方案,即站点每通过无线局域网发送完一帧,就要在收到对方的确认帧后才能继续发送下一帧。
为了尽量避免碰撞,802.11规定,所有的站完成发送后,必须再等待一段很短的时间(继续监听)才能发送下一帧。这段时间称为帧间间隔(InterFrame Space,IFS)。帧间间隔的长短取决于该站要发送的帧的类型。802.11使用了3种IFS:
- SIFS(短IFS): 最短的IFS,用来分隔属于一次对话的各帧,使用SIFS的帧类型有ACK帧、CTS帧、分片后的数据帧,以及所有回答AP探询的帧等。
- PIFS(点协调IFS):中等长度的IFS,在PCF操作中使用。
- DIFS(分布式协调IFS):最长的IFS,用于异步帧竞争访问的时延。
CSMA/CA 的退避算法和CSMA/CD的稍有不同。信道从忙态变为空闲态时,任何一个站要发送数据帧,不仅都要等待一个时间间隔,而且要进入争用窗口,计算随机退避时间以便再次试图接入信道,因此降低了碰撞发生的概率。当且仅当检测到信道空闲且这个数据帧是要发送的第一个数据帧时,才不使用退避算法。其他所有情况都必须使用退避算法,具体为:①在发送第一个帧前检测到信道忙; ②每次重传; ③每次成功发送后要发送下一帧。
CSMA/CA算法归纳:
- 若站点最初有数据要发送(而不是发送不成功再进行重传),且检测到信道空闲,在等待时间DIFS后,就发送整个数据帧。
- 否则,站点执行CSMA/CA退避算法,选取一个随机回退值。一旦检测到信道忙,退避计时器就保持不变。只要信道空闲,退避计时器就进行倒计时。
- 当退避计时器减到0时(这时信道只可能是空闲的),站点就发送整个帧并等待确认。
- 发送站若收到确认,就知道已发送的帧被目的站正确接收。这时如果要发送第二帧,就要从步骤2)开始。
- 若发送站在规定时间内没有收到确认帧ACK(由重传计时器控制),就必须重传该帧,再次使用CSMA/CA 协议争用该信道,直到收到确认,或经过若干次重传失败后放弃发送。
处理隐蔽站问题:RTS和CTS
站A和B都在AP的覆盖范围内,但A和B相距较远,彼此都听不见对方。当A和B检测到信道空闲时,都向AP发送数据,导致碰撞的发生,这就是隐蔽站问题。
为了避免该问题,802.11允许发送站对信道进行预约。源站要发送数据帧之前先广播一个很短的请求发送RTS(Request To Send)控制帧,它包括源地址、目的地址和这次通信(含相应的确认帧)所持续的时间,该帧能被其范围内包括AP在内的所有站点听到。
若信道空闲,则AP广播一个允许发送CTS (Clear To Send)控制帧,它包括这次通信所需的持续时间(从RTS帧复制), 该帧也能被其范围内包括A和B在内的所有站点听到。B和其他站听到CTS后,在CTS帧中指明的时间内将抑制发送。CTS帧有两个目的:①给源站明确的发送许可;②指示其他站点在预约期内不要发送。
使用RTS和CTS帧会使网络的通信效率有所下降,但这两种帧都很短,与数据帧相比开销不算大。相反,若不使用这种控制帧,一旦发生碰撞而导致数据帧重发,则浪费的时间更多。信道预约不是强制性规定,各站可以自己决定使用或不使用信道预约。只有当数据帧长度超过某一数值时,使用RTS和CTS帧才比较有利。
CSMA/CD 与CSMA/CA主要有如下区别:
1)CSMA/CD可以检测冲突,但无法避免; CSMA/CA发送数据的同时不能检测信道上有无冲突,本结点处没有冲突并不意味着在接收结点处就没有冲突,只能尽量避免。
2)传输介质不同。CSMA/CD用于总线形以太网,CSMA/CA用于无线局域网802.11a/b/g/n等。
3)检测方式不同。CSMA/CD通过电缆中的电压变化来检测; 而CSMA/CA采用能量检测、载波检测和能量载波混合检测三种检测信道空闲的方式。
总结: CSMA/CA 协议的基本思想是在发送数据时先广播告知其他结点,让其他结点在某段时间内不要发送数据,以免出现碰撞。CSMA/CD协议的基本思想是发送前侦听,边发送边侦听,一旦出现碰撞马上停止发送。