目录
1. 序言
一晃从事通信领域已经十几年了,最近想把这些年来学到的一些知识整理并分享出来,也是自己一个查漏补缺的过程。本篇文章是802.11系列协议的开篇之作,会详细介绍信道的接入机制,包括如何判断信道忙闲状态、如何检测冲突、冲突后如何处理等。
802.11(无线)协议的信道接入机制是CSMA/CA,它与802.3(有线)协议的信道接入机制(CSMA/CD机制)有很多相似的地方,但由于传输介质的不同他们之间也一些本质上的区别。下面我们就详细介绍两个接入机制以及他们之间的区别。
2. CSMA/CD机制
首先CSMA/CD得全称是:Carrier Sense Multiple Access With Collision Detection,即载波监听多点接入/碰撞检测;基于该名称这个机制主要包含三个部分说明如下:
- 载波监听:是指每一个终端在发送数据之前需要监听介质中是否有数据正在发送,如果有则暂停发送从而避免发生碰撞;
- 多点接入:是指支持多个终端连接到同一条总线(介质)上。
- 碰撞检测:是指终端在发送数据的同时检测介质上是否有碰撞。
基于以上的介绍可以看出如果要支持CSMA/CD机制,那总线(介质)必须要支持在发送的同时可以接收数据并基于接收的数据检测介质上是否有碰撞。CSMA/CD机制的整体工作流程如下:
- 当有数据需要发送的时候,首先需要不停的检测信道直到信道空闲并保持9.6us(帧间最小时间间隔)则可以发送数据;
- 在发送数据的同时仍需不停的检测信道判断是否有数据碰撞,检测到碰撞与否的处理流程如下:
- 没有检测到碰撞:整个发送过程中均没有检测到碰撞则表示数据发送成功;
- 检测到碰撞:发送中途任一时刻检查的碰撞后则发送JAM信号(用以加强冲突保证所有节点均能检测到碰撞)并在随机时间之后重新重复以上步骤尝试发送数据。
3. CSMA/CA机制
3.1 总体说明
首先CSMA/CA的全称是:Carrier Sense Multiple Access With Collision Avoidance,即载波侦听多路访问 / 冲突避免。为了方便讨论CSMA/CA机制,先设定一个典型的Wi-Fi网络拓扑如下:
以上无线组网拓扑简单说明如下:该组网中有1个AP(可以简单理解为Wi-Fi路由器)和2个STA(可以简单理解为连接路由器的手机或其他设备);它们三者之间收发无线数据就是遵循CSMA/CA机制,该机制的整体工作流程如下:
- 当有数据发送时,设备需要检查空口是否有数据正在发送,检查的方式有两种一种是ED(Energy Detection)能量检测,一种是CS(Carrier Sense)载波侦听。两者任一检查值超过阈值就认为当前空口繁忙,反之则认为当前空口空闲;
- 当发现空口空闲之后会启动一个竞争窗口(Contention Window)也就是启动一个随机回退计数值(Backoff Counter),当回退计数器倒数到0且这段时间空口处于闲的状态,则认为抢到了空口可以开始发送数据;倒数期间检测到空口繁忙时则暂停计数器,当空闲后接着上次最后的值继续倒数直到为0。
- 设备向空口发送无线数据时无法实时检测是否有冲突,每个单播的802.11数据报文均需要对端响应ACK报文用以确认接收到报文,如果超时没有收到ACK报文则认为对端接收异常需要进行重传。
- 报文每次重传的时候需要执行BEB机制:Binary Exponential Backoff,即二进制指数退避算法。该算法会增大竞争窗口的范围的从而减少冲突;
3.2 基础概念说明
- ED:Energy Detection 能量检测;即通过空口的无线信号能量大小来判断空口是否繁忙,弱信号强度大于等于ED_threshold则认为信道忙,若小于ED_threshold则认为信道闲;
- CS:Carrier Sense 载波侦听;即通过是被802.11数据帧的物理层头部(PLCP header)中的preamble部分来判断信道是否繁忙。简单理解ED是检查无线电波能量,CS是检查802.11的无线报文;
- Backoff Counter:随机回退计数器;该随机值会在CW(竞争窗口)范围内随机选取一个值并开始倒数,倒数到0后则开发发送数据;
- CW:Contention Window 竞争窗口;该窗口是一个范围,Backoff Counter会在这个范围内取一个随机值;
- Slot Time:时隙 指的是一个时间片段;Backoff的过程就是由多个Slot Time所组成,简单的说就是比如Backoff的值是5,则表示经过5个Slot Time后则竞争到了空口。
- DIFS:Distributed Inter-frame Spacing,即分布式帧间间隙;一般要发送无线数据帧之前至少等待DIFS时间。
- SIFS:Short Inter-frame Spacing,即短帧间间隙;一般接收到无线数据帧到回复ACK之间至少等待SIFS时间。
- EIFS:Extended Inter-frame Spaceing,即扩展帧间间隔,一般都是数据包发送错误后(没有收到ACK)需要等待一个EIFS再进入Backoff阶段; EIFS = SIFS + Time(ACK) + DIFS;
3.3 详细工作机制
上图是两个STA发送数据的时序图,接下来我们会基于这个时序图详细说明CSMA/CA具体的工作机制:
- 当STA1和STA2都有数据要发送时则一开始两个STA等待一个DIFS时隙,期间空口如果空闲则进入Backoff阶段;
- 进入Backoff阶段时会从CW(竞争窗口)之间随机选取一个值(默认窗口是31,即随机值的范围是[0,31]);上图中STA1的随机值为8,STA2的随机值为2;
- 在Backoff阶段中每个Slot Time里都会检查一下空口是否忙,如果闲则倒数反之则暂停,当倒数到0时即开始放数据; 如上图STA2倒数到0则开始发送数据,STA1倒数到5时发现空口开始忙了(STA1开始发数据了),STA1就开始暂停倒数直到空口闲时接着倒数;
- STA2发送无线数据给AP之后等待一个SIFS后AP向STA2响应一个ACK帧;
- STA1接着上次的Backoff开始倒数,STA2重新从CW(竞争窗口)中选取Backoff的随机值。
- 之后重复以上步骤,重新竞争空口并发送数据;
以上是无线数据帧正常发送的时序图,但在实际的空口情况不可能所有的无线数据帧都能正常发送,因为实际场景中的电磁环境很复杂有较多的干扰电波,当干扰到达后会导致802.11的SNR(Signal Noise Ratio 信噪比)较差从而无法解析。下图就是发送数据失败后的处理时序图:
- 当STA2发送PACKET A后,等待AP响应ACK报文,但由于种种原因该报文AP没有接收到从而没有响应ACK报文,此时STA2等待EIFS之后开始尝试重传。
- STA2由于发送数据失败需要执行BEB机制用以增大CW(竞争窗口)并与STA1重新竞争空口并尝试发送数据;
3.4 BEB机制说明
BEB机制的全称是Binary Exponential Backoff,即二进制指数退避算法。该算法是当发送数据失败时为了避免再次冲突,会通过该算法增大竞争窗口从而减少后续冲突的概率;
802.11b机制下初始窗口为[0,31],802.11a机制下初始窗口为[0,15]。 比如当前的竞争窗口是[0,31]当发送数据出错之后执行一次BEB后竞争窗口变成[0,63](31就是2^5-1 BEB一次之后就是2^6-1);另外CW最多扩展6次之后不在扩展,第7次发送失败之后则丢包;
4. CSMA/CD 与 CSMA/CA差异
两者之间的核心差异点是:CSMA/CD发送的同时可以监听是否有冲突,CSMA/CA发送时无法监听冲突需要通过对端响应ACK用以确认是否成功;详细的差一点儿如下所示:
差异项目 | CSMA/CD | CSMA/CA |
信道检查 | 检查物理信道上信号电平值 | 检查ED(能量检测)和CS(载波侦听) |
碰撞检查 | 发送时同时检查物理信道上的碰撞 | 通过对端响应ACK报文判断是否碰撞 |
碰撞处理 | 检测到碰撞后发送JAM增强冲突之后重传 | 没有收到ACK之后执行BEB并重传 |
以上是个人整理的CSMA/CD 和 CSMA/CA的相关说明已经两者之间的差异点,如有不足或不正确之处欢迎留言讨论。
标签:802.11,入门,CA,CSMA,空口,发送,信道,发送数据,Backoff From: https://blog.csdn.net/hdblog/article/details/139567653