IEEE 802.11是现今无线局域网通用的标准,它是由电气和电子工程师协会(IEEE)所定义的无线网络通信的标准。
虽然经常将Wi-Fi与802.11混为一谈,但两者并不等同。
载波监听多址接入/碰撞检测 CSMA/CD(总线型局域网用)
多址接入 MA
- 多个站点连接在一条总线上,竞争使用总线。
载波监听CS
每一个站在发送帧之前先要检测一下总线上是否有其站点在发送帧(先听后说)
每一个正在发送帧的站边发送边检测碰撞(边说边听)
- 一旦发现总线上出现碰撞则立即停止发送,退避一段随机事件后再次发送(一旦冲突,立即听说,等待时机,重新再说)
举例说一下:
多个主机连接在一条主线上,组成网络,这就是多址接入了
此图中,主机C在发送帧,然后主机B也要发送帧,于是进行载波监听,检测到总线忙,于是持续检测总线,一旦发现总线空闲96比特时间,则立即发送帧,边发送边进行碰撞检测,只要没检测到碰撞,则继续发送剩余部分。
假设B发送中,C发送帧两者碰撞,刚碰撞时,两者都在碰撞检测,但都还没检测到,过一会儿,碰撞信号C先检测到,停止发送退避一段时间,B也检测到,停止发送,退避一段时间。
强化碰撞
以太网还采取了一种叫做强化碰撞的措施。这就是当发送帧的站点一旦检测到碰撞,除了立即停止发送帧外,还要继续发送32比特或48比特的人为干扰信号,以便有足够多的碰撞信号使所有站点都能检测出碰撞。
争用期(碰撞窗口)
好好理解这个图
- 主机最多经过2τ(即了δ->0)的时长就可检测到本次发送是否遭受了碰撞
- 因此,以太网的端到端往返传播时延2τ就称为争用期或者碰撞窗口
- 发送帧的主机经过征用期的这段时间还没有检测到碰撞,才能肯定这次发送不会产生碰撞。
- 每一个主机发送帧后的一小段时间,存在着遭遇碰撞的可能性,这段时间不确定,取决于另一个发送帧的主机的位置,但不会多于一个争用期时间
以太网中主机越多,端到端往返时延就越大,发生碰撞的概率就越大。因此共享式以太网不能连接太多的主线,使用的总线也不能太长。
以太网规定最小帧长为64字节,即512比特(512比特时间即为争用期)
- 如果要发送的数据非常少,必须加入填充字节,使其达到64字节
- 以太网的最小帧长确保了主机可在帧发送完成之前就检测到该帧是否在传输中遇到了碰撞
如上图,A发送给D的帧过长,长时间占用总线,而其他主机迟迟拿不到总线的使用权,另外由于帧很长,还可能导致D的接收缓冲区无法装小该帧而产生溢出。
截断二进制指数退避算法
退避时间 = 基本退避时间(争用2τ) x 随机数r (r从离散的整数集合{0,1,…(2k-1)}中随机选出一个数k = Min[重传次数 , 10])
- 若连续多次发生碰撞,就表明可能有较多的主机参与竞争信道。但使用上述退避算法可使重传需要推迟的平均时间随重传次数而增大(动态退避),因而减小发生碰撞的概率,有利于整个系统的稳定。
- 当重传达16次仍不能成功时,表明同时打算发送帧的主机太多,以至于连续发生碰撞,则丢弃该帧,并向高层报告。
信道利用率
多次退避消耗多个2τ时间,发送时延T0,在最极端的情况下,从一头发到另一头传播时延为τ
- 考虑以下这种理想情况:
- 各主机发送帧都不会碰撞;
- 总线一旦空闲就有某个主机立即发送帧;
- 发送一帧占用总线时间为T0+τ,而帧本身的发送时间是T0
极限信道利用率为Smax = T0/(T0+τ) = 1/(1+τ/T0) = 1/(1+a)
a的值应该尽量小以提高信道利用率所以应该让τ尽量小,以太网端到端的距离应受到限制,以太网的帧应该尽量长一些
帧发送流程
帧接收流程
载波监听多址接入/碰撞避免CSMA/CA(无线局域网用)
为什么同样使用广播信道的无线局域网不能也是用CSMA/CD协议?
- 在无线局域网中,仍然可以使用CSMA,即发送前载波监听,检测有其他站在发送帧,就推迟
- 不能使用CD:
- 无线信道的传输条件特殊,信号强度动态范围达,无线网卡收到的信号的强度会远小于发送信号的强度,如果在无线网卡上实现碰撞检测,对硬件要求非常高。
- 即使能在硬件上实现CD,但由于无线电波传波的特殊性(存在隐蔽站问题:未能检测到信道上其他站点,因为站点距离远,信号覆盖不到),实现碰撞检测意义不大。
- 802.11无线局域网使用CSMA/CA协议,在CSMA的基础上增加了一个碰撞避免CA功能,而不再实现碰撞检测。
- 由于不可能避免所有的碰撞,并且无线信道误码率较高,802.11标准还使用了数据链路层确认机制(停止-等待协议)来保证数据被正确接收。
- 802.11的MAC层标准定义了两种不同的媒体接入控制方式:
- 分布式协调功能DCF。在DCF方式下,没有中心控制站点,每个站带你使用CSMA/CA协议通过争用信道来获取发送权,这是802.11定义的默认方式.
- 点协调功能PCF。PCF方式使用集中控制的接入算法(一般在接入点AP实现集中控制),是802.11定义的可选方式,在实际中较少使用。
帧间间隔IFS
- 802.11规定所有站点必须在持续检测到信道空闲一段指定时间后才能发送帧,这段时间称为帧间间隔IFS
- 帧间间隔的长短取决于该站点要发送的帧饿的类型:
- 高优先级帧需要等待的时间较短,因此可优先获得发送权;
- 低优先级帧需要等待的时间较长,若某站低优先级帧还未发送,其他站的高优先级帧已发,信道就变为忙态,低优先级帧推迟发送,减少碰撞概率。
- 常用的两种帧间间隔如下:
- 短帧间间隔SIFS(28μs),是最短的帧间间隔,用来分隔开属于一次对话的各帧,一个站点应当能从这段时间内由发送转为接收。使用SIFS得帧类型有ACK帧、CTS帧、由过长得MAC帧分片后的数据帧、以及所有回答AP探询的帧和在PCF方式中接入点AP发送出的任何帧。
- DCF帧间间隔DIFS(128μs),它比短帧间间隔长得多,在DCF方式中用来发送数据帧和管理帧。
CSMA/CA协议的工作原理
- 源站有数据帧要发送,检测到空闲后,等待DIFS时间后,发送该数据帧,目的站若正确收到,经过SIFS后发送确认帧ACK,若源站在规定时间内没收到ACK,就要重传,直到收到确认,或失败多次,放弃了。
- 空闲后还要等待DIFS是因为可能有其他站有高优先级的帧要发送。
- 目的站正确接收后还要等待SIFS才发ACK:SIFS是最短的帧间间隔,这个时间站点由接收转为发送
- 源站收到确认帧后,信道不忙了,等DIFS时间后,再退避一段随机时间,其他站才可以发送帧
- 为什么还要再退避:目的在于防止多个站点同时发送数据
- 当站点检测到信道是空闲的,并且所发送的数据帧不是成功发送完上一个数据帧之后立即发送的数据帧,则不适用退避算法(?这里不明白)
- 以下情况必须使用退避算法:
- 在发送数据帧之前检测到信道处于忙状态时
- 在每一次重传一个数据帧时
- 在每一个成功发送后要连续发送下一个帧时(这是为了避免一个站点长时间占用信道)
CSMA/CA协议的退避算法
- 在执行退避算法时,站点为退避计时器设置一个随机的退避时间:
- 当退避计时器的时间减小到零时,就开始发送数据;
- 当退避计时器的时间还未减小到零时而信道又转为忙状态,这时就冻结退避计时器的数值,重新等待信道变为空闲时,再经过时间DIFS后,继续启动退避计时器。
- 在进行第i次退避时,退避时间在时隙编号{0,1,…,22+i-1}中随机选择一个,然后乘以基本退避时间(也就是一个时隙的长度)就可以得到随机的退避时间。这样做是为了使不同站点选择相同退避时间的概率减少。当时隙编号达到255时,(对应于第6次退避)就不再增加了。
CSMA/CA协议的信道预约和虚拟载波监听
信道预约
- 为了尽可能减少碰撞的概率和降低碰撞的影响,802.11标准允许要发送数据的站点对信道进行预约
- 源站在发送请求数据帧之前先发送一个短的控制帧,成为请求发送帧RTS,包括源地址、目的地址、以及这次通信所需的持续时间
- 若目的站正确收到从源站发来的RTS帧,且媒体空闲,就发送一个响应控制帧,成为允许发送帧CTS,它也包括持续时间(从RTS中复制)
- 源站收到CTS帧后,再等待一段时间SIFS,就可发送数据帧
- 若目的站正确收到了源站发来的数据帧,在等待时间SIFS后,就向源站发送确认帧ACK。
- 除源站和目的站以外的其他各站,在收到CTS帧(或数据帧)后就推迟接入到无线局域网中。这样就保证了源站和目的站之间的通信不受其他站的干扰
- 如果RTS帧发送碰撞,源站就收不到CTS帧,需要执行退避算法重传
由于RTS与CTS很短,碰撞概率,碰撞产生的开销都很小,因此用很小的代价预约信道是值得的 802.11标准提供了3中情况供用户选择:
除了RTS和CTS帧,数据帧也能携带通信需要持续的时间,这就成为802.11的虚拟载波监听机制
- 由于利用虚拟载波监听机制,站点只要监听到RTS,CTS,数据帧中的任意一个,就能知道通信持续时间,而不需要真正监听到信道上的信号,因此虚拟载波监听机制能减少隐蔽站带来的碰撞问题。