微信公号:卢同学
关注可了解更多。若有问题或建议,请与本人联系;
目录
凡事若能综观形势,通常有助于细节的进一步探究
从OSI七层模型来看,802规范的重心放在OSI模型最下面的两层,即数据链路层和物理层。
数据链路层又分为逻辑链路控制层(LLC)和媒介访问控制层(MAC),
物理层也分两层,物理层会聚过程Physical Layer Convergence Procedure (PLCP)
和物理媒体相关Physical Medium Dependent (PMD),
理清这些分层的关系,将有助于我们后面的分析。
802.11 规范的关键在于 MAC。MAC是一组用以决定如何访问媒介以及如何传输数据的规则,至于传输与接收的细节则交给PHY。
MAC 位于各种物理层之上,控制数据的传输。它负责核心成帧操作以及与有线骨干网络之间的交互。
MAC的设计需要考虑什么问题?
1、因为射频链路的品质问题,为了克服干扰、多径衰落等问题造成的布线死区。
所以MAC采用了肯定确认机制。所有传出的帧必须得到响应。
2、隐藏节点问题,在如下图所示环境中,由于距离原因,从节点1的角度看节点3就是隐藏节点。
下图示节点station1和station3互为隐藏节点,由于无线环境下的特性,若station1与station3同时向station2发送数据,
那么就会在station2处发生冲突,从而两者都无法正确传输,最终传输失败。
为了防止冲突发生,802.11允许使用CTS和RTS信号清空传输区域。
若节点1有帧需要发送,因此发送RTS帧预约无线链路的使用权以及要求接收到这帧的其他工作站保持沉默。
MAC是怎么进行访问控制的?
无线媒介的访问由 协调功能 控制。
-
分布式协调功能:DCF:DCF是标准的CSMA/CA访问机制的基础,传输数据之前会检查无线链路是否处于清空状态,
-
为避免冲突发生,某传输者占据信道时,工作站会随机为每帧选定退避时间。还可以利用RTS/CTS清空技术进一步减少冲突发生。
-
点协调功能:PCF;点协调提供无竞争服务。
由于DCF具有良好的分布式特性,从而应用更加广泛,而PCF模式则较为少用。
了解CSMA/CA访问机制之前需要了解下面几个概念:
1、帧间间隔与优先级
不同帧间 间隔提供不同类型传输产生不同优先次序。802.11用到4种帧间间隔,其中三种用于界定媒介访问。
由上所知,MAC具备冲突避免功能,所以工作站会延迟媒介访问时间直到媒介空闲。
(这个图现在不理解看完就可以理解了)
-
短帧间间隔SIFS:用于高优先级的传输场合,如RTS/CTS以及肯定ACK。
-
PCF帧间间隔PIFS:用于无竞争操作中。
-
DCF帧间间隔DIFS竞争式服务中最短媒介闲置时间,如媒介闲置时间超过此则工作站可以立即访问媒介。
-
扩展帧间间隔EIFS:并非固定的时间间隔,只有帧传输出现错误的时候用。
2、Slot Time:
时隙是指的一个时间片段,当帧传送完成并且经过一段 DIFS 时间,工作站便会试图传送之前拥塞的数据。
DIFS 之后所紧接的一段时间称为竞争期间或退避期间。此期间可进一步分割为时隙(slot)。工作站会随机挑选某个时隙(slot),
等候该时隙(slot)到来以便访问介质。所有时隙(slot)的选择机会均等。当多个工作站同时试图传送数据,
挑到第一个时隙(slot)(亦即取得最小随机号码)的工作站可以优先传送。
节点竞争接入信道之前需要经过相应的随机回退(backoff)过程,其中backoff过程就是由很多个时隙所组成的。时隙(slot)长度因媒介而异。
3、Backoff:
随机回退过程是指每一个节点在竞争信道时,所经历的随机退避过程。在这一过程开始时,节点首先在竞争窗口中选择一个随机数
为基准的随机回退计数值,同时每一个时隙,节点为"监听"信道是否空闲,若信道空闲,那么进行一次倒数,
即计数值减1,若信道忙,则不进行相应倒数。当该随机回退计数值回退到0时,节点可以发送数据。
4、Contention window:
竞争窗口是用来让节点选择随机回退计数值(backoff counter)的范围。
怎么利用DCF(分布式协调功能)进行基于竞争的访问?
试图传送任何数据之前,工作站必须检查介质是否处于闲置状态。若处于忙碌状态,工作站必须延迟访问,并利用指数型退避(orderly exponential backoff)算法来避免碰撞发生。
在所有使用 DCF 的传输当中,将会运用到两项基本原则:
一、如果介质闲置时间长于 DIFS,便可立即进行传输。载波监听同时可通过物理与虚拟(NAV)方式进行。
a. 如果之前的帧接收无误,介质至少必须空出一段 DIFS 时间。
b. 如果之前的传输出现错误,介质至少必须空出一段 EIFS 时间。
二、如果介质处于忙碌状态,工作站必须等候至频道再度闲置。802.11 称之为访问延期。一旦访问延期,工作站会等候介质闲置一段 DIFS 时间,同时准备指数型退避访问程序。
由此可以设想一个场景,两个设备相继存在数据,需要在竞争信道进行发送时,其首先需要"等待" DIFS时间,若DIFS时间内,信道保持空闲状态,那么就可以进行backoff过程。
这两个设备首先需要从竞争窗口(Contention window)选择一个随机数,在802.11协议中,默认的初始竞争窗口为31,即随机回退计数值的范围即是[0,31]。
在backoff过程中,每经过一个slot time,节点会"监听" 一次信道,若信道空闲,则相应的随机回退计数器的值减1。两个设备谁取到了较小的值 即节点的随机倒数计数器先倒数至0时,节点竞争获得信道,从而可以发送数据。在AP接收到数据后,会采用CRC机制对数据进行校验,若校验通过,AP会在SIFS后,反馈ACK确认帧。表示一次传输完成。
当这一次传输完成后,这个设备需要再次 "等待" DIFS的时间后,重新开始backoff过程。若节点刚刚发送完数据,那么在backoff过程开始时,需要重新从竞争窗口中选择一个随机数进行倒数。若节点没有发送数据,那么直接从上一次的倒数结果继续倒数。在本例中,另外一个设备没有竞争到信道,那么其在第二次的backoff过程中,直接基于上次的值直接进行倒数。这样的设计目的是为了保证网络传输的公平性。
EBC机制
有同学会疑惑,若是这两个设备随机到了一样的数值,还是存在发生冲突的可能性,从而为了避免在CSMA/CA机制下的再次冲突,故为此引入了BEB机制。
当冲突发生之后,即若AP处CRC校验失败,则不会给任意节点反馈ACK数据包,故两节点在ACK timeout之后,则等待EIFS之后,准备进入下一次竞争。但是在此之前节点需要对竞争窗口(CW)采用二进制指数退避的方法对竞争窗口CW进行扩展,即发生一次冲突后,那么CW范围就会从[0,31]变化到[0,63],在802.11中,一共允许回退6次,第7次不倍增窗口,再次尝试重发,若再次失败,则丢包。
载波监听功能与网络分配矢量
在DCF模式下,我们还需要知道存在两种子模式:Basic模式与RTS/CTS模式。回到第一节所说的隐藏终端问题。由于两个隐藏节点没有办法互相监听,所以很容易再次出现同时传输的导致冲突现象。
载波监听主要用于判断媒介是否处于可用状态,802.11具备物理和虚拟载波监听两种。
物理的由物理层提供,取决所使用媒介与调制方式。物理监听无法提供如隐藏节点信息。
虚拟的由网络分配矢量(NAV)提供,802.11帧通常会包含Duration字段用于预约媒介使用时间,NAV本身是计时器。其他工作站会将NAV值倒数至0,只要不为0则代表媒介处于忙碌状态。当NAV为0则媒介处于空闲状态。
如图,sender会在其RTS帧中设定NAV ,防止传送时其他工作站访问媒介,所有收到RTS的工作站均会延迟访问,直到NAV消失。
接收端会收到RTS后经过一段间隔SIFS后回复CTS,其中也包含了NAV,此NAV可防止其他工作站在传输过程中访问媒介。
DCF 与错误复原
错误监听与更正是由起始基本帧交换过程的工作站来决定。一旦监听到错误,该工作站必须负责重传。错误检测由发布端负责,有时可根据确认来推断该帧是否丢失。若重传则重传计数器(retry counter)就会累加。
除重试计数器外,MAC会赋予每个帧片段最长生存时间,一旦超过此帧被丢弃。上层协议如TCP可以检测到而重传,但是会被视为新的帧。
帧的分段与重组
来自较上层的封包,以及某些较大的管理帧,可能必须经过分段,无线频道才有办法加以传输。当干扰存在时,分段封包同时有助于提升可靠性。
当上层封包超过网络管理人员所设定的分割门限,就会进行帧的分割。帧控制信息用来指 示是否还有其他帧片段待接收。每个帧片段都会设定 NAV,继续掌握介质的使用权,直到下一个帧 的应答结束。图中,fragment0 设定了 NAV,并继续掌握介质直到 ACK 1,而 Fragment 1 也设 定了 NAV,并继续掌控介质直到 ACK 2,依此类推。当最后一个帧片段及其应答送出时,NAV 即会设定为 0。代表释放介质。
帧格式长啥样?
一般802.11帧如下:(上面数字为字节)
并非每个帧都会用到所有的地址位,这些地址位的值,也会因为 MAC 帧种类的不同而有所差异。
Frame Control 位,所有帧的开头均是长度两个字节 Frame Control (帧控制)位,如图 所示。
Frame Control 位包括以下次位:
-
Protocol 位 协议版本位由两个 bit 构成,用以显示该帧所使用的 MAC 版本。目前,802.11 MAC 只有 一个版本;它的协议编号为 0。
-
Type 与 Subtype 位 类型与次类型位用来指定所使用的帧类型。
802.11 帧主要有三种类型。
数据帧好比 802.11 的驮马,负责在工作站之间传输数据。数据帧可能会因为所处的网络环境不同而有所差异。
控制帧通常与数据帧搭配使用,负责区域的清空、信道的取得以及载波监听的维护,并于收到数据时予以正面的应答,借此促进工作站间数据传输的可靠性。
管理帧负责监督,主要用来加入或退出无线网络,以及处理基站之间连接的转移事宜。
Subtype 就是在这三种帧每种的细分。
-
TO DS 与 From DS bit 这两个 bit 分别表示无线链路向无线工作站发送的帧和无线工作站向无线链路发送的帧.
1
简单来说:
To DS:表示Station->AP,一般也叫Upload,Station发送的帧。
From DS表示AP->Station,一般也叫Download,Station接收的帧。
-
More fragments bit 此 bit 的功能类似 IP 的 More fragmentsbit。若较上层的封包经过 MAC 分段处理,最后一 个片段除外,其他片段均会将此 bit 设定为 1。大型的数据帧以及某些管理帧可能需要加以分段;除此之外的其他帧则会将此 bit 设定为 0。
-
Retry bit 有时候可能需要重传帧。任何重传的帧会将此 bit 设定为 1,以协助接收端剔除重复的帧。
-
Power management bit,此 bit 用来指出传送端在完成目前的基本帧交换之后是否进入省电模式。1 代表工作站即将进入省电模式,而 0 则代表工作站会一直保持在清醒状态。基站必须行使一系列重要的管理功能,所以不允许进入省电模式,因此基站所传送的帧中,此 bit 必然为 0。
-
More data bit 为了服务处于省电模式的工作站,基站会将这些由“传输系统”接收而来的帧加以暂存。基站如果设定此 bit,即代表至少有一个帧待传给休眠中的工作站。
-
Protected Frame bit 相对于有线网络,无线传输本质上就比较容易遭受拦截。如果帧受到链路层安全协议的保护,此 bit 会被设定为 1,而且该帧会略有不同。之前,Protected Frame bit 被称为 WEP bit。
-
Orderbit 帧与帧片段可依序传送,不过发送端与接收端的 MAC 必须付出额外的代价。一旦进行“严 格依序”传送,此 bit 被设定为 1。
-
Duration:设定 NAV, 当第 15 个 bit 被设定为 0 时,Duration/ID 位就会被用来设定 NAV。此数值代表目前所进行的传输预计使用介质多少微秒。工作站必须监视所收到的任何帧头,并据以更新 NAV。任何 超出预计使用介质时间的数值均会更新 NAV,同时阻止其他工作站访问介质。
-
Address 位,因为随着帧类型不同, 这些位的作用也有所差异。
基本上,Address 1 代表接收端,Address 2 代表传送端,Address 3 被接收端拿来过滤地址。举例而言,在基础网络里,第三个地址位会被接收端用来判定该帧是否属于其所连接网络。
802.11 所使用的定位模式,乃是依循其他 IEEE 802 网络所使用的格式,包括以太网。地址位本身的长度有 48 个 bit。如果传送给实际介质的第一个 bit 为 0,该地址位代表单一工作站 (单点传播[unicast])。如果第一个 bit 为 1,该地址代表一组实际工作站,称为组播(多点传 播[multicast])地址。如果所有 bit 均为 1,该帧即属广播(broadcast),因此会传送给连接至 无线介质的所有工作站。
-
顺序控制位,当上层帧交付 MAC 传送时,会被赋予一个 sequence number(顺序编号)。此位的作用, 相当于已传帧的计数器取 4096 的模(modulo)。此计数器由 0 起算,MAC 每处理一个上层封包就会累加 1。如果上层封包被切割处理,所有帧片段都会具有相同的顺序编号。如果是重传帧, 则顺序编号不会有任何改变。帧片段之间的差异在于 fragment number(片段编号)。第一个片段的编号为 0。其后每个片段依序累加 1。重传的片段会保持有原来的 sequence number 协助重组。
-
帧主体,帧主体(Frame Boby)亦称为数据位,负责在工作站间传送上层数据(payload)。
-
帧检验序列(FCS) 和以太网一样,802.11 帧也是以帧检验序列(frame check sequence,简称 FCS)作为结 束。FCS 通常被视为循环冗余码(cyclic redundancy check,简称 CRC)。
802.11MAC是怎样对上层协议进行封装的?
和所有其他的 802 链路层一样,802.11 可以传输各种不同的网络层协议。
传输时,用来封装 LLC 数据的方式有两种。其中一种是 RFC 1042 所描述的方式,另外一 种则是 802.1H 所规范的方式。
RFC 1042 与 802.1H 均衍生自 802.2 的子网络访问协议(sub-network access protocol, 简称 SNAP)。MAC 地址会被复制到封装帧(encapsulation frame)的开头,然后插入 SNAP 标头。然后是一个控制位。此控制位会被设定为 0x03,代表未编号信息(unnumbered information,简称 UI),SNAP 所置入的最后一个位是组织代码(organizationally unique identifier,简称 OUI),802.11H 与 RFC 1042 之间的唯一差异,在于其使用的 OUI。
广播与组播帧或管理帧
广播与组播帧的交换过程最为简单,因为这些帧无须应答。这两种帧也可以视为群组帧, 因为其接收对象不限于单一工作站。
帧封装(framing)与定位(addressing)适用此规则的帧类型如下所示:
广播数据帧会在 Address1 位中填入广播地址
组播数据帧会在 Address1 位中填入组播地址
广播管理帧会在 Address1 位中填入广播地址(Beacon、Probe Request 以及 IBSS ATIM 帧)、组播帧无法加以分段,也无须得到应答。
单播帧
单一帧(最后一个片段)
两部工作站之间的传输可靠性建立在简单的正面应答上。单点传播数据帧必须得到正面应 答,否则该帧即会被认定已经丢失。如果是单一帧,则此该 ACK 中 NAV 会被设定为 0。
包括 IP 在内,一些较上层的网络协议或多或少都会用到帧分段。倒数第二个帧之前所有帧均会使用 NAV,为下一个帧锁住介质。第一个数据帧会将 NAV 的时间设定至足以涵盖 ACK0,下一个帧片段及其回应(ACK1)。为了表示其为帧片段,MAC 会将帧标头控制位的 More Fragmentsbit 设定为 1。最后一个回应(ACK2)除外,其余回应都会继续为下一个数据片段及 其回应延长锁住介质的时间。后续的数据帧会继续延长 NAV 以涵盖后续的回应,直到最后一个数据帧才会将 More Fragmentsbit 设定为 0,而最后一个回应(ACK2)则会将 NAV 设定为0 !
为保证介质使用权以及数据传输不被中断,工作站可使用 RTS/CTS 的交换方式。
有线和无线是怎么转换的?
无线至有线媒介(802.11 至以太网)
-
当基站接收到一个帧,首先会检测该帧基本上是否完整。接下来,基站会针对所使用的 物理层,检视本章之前讨论过的物理层标头,然后验证 802.11 帧上的帧检验码。
-
证帧接收无误后,基站就会继续检视是否应该进一步处理该帧。
a. 传送至基站的帧,会将基站的 MAC 地址(即 BSSID)摆在 802.11 MAC 标头 的 Address 1 位。不符该基站 BSSID 的帧应予以丢弃。(有些产品并未实现 此步骤。)
b. 802.11 MAC 接着监测且移出重复的帧。产生重复帧的原因很多,不过最常 见的情况是 802.11 应答信息在传送过程中丢失或有所损毁。为了简化上层 协议的工作,因此由 802.11 MAC 负责剔除重复的帧。
-
一旦基站判定需要进一步处理该帧,就必须予以解密,因为该帧会受到链路层安全算法 的保护。
-
成功解密之后,基站即检视该帧是否为帧片段,需要进一步重组。完整性保护(integrity protection)针对重组后完整帧,而不是个别的帧片段。
-
如果经过步骤 2a 的 BSSID 检验,判定基站必须桥送该帧,较复杂的 802.11 MAC 标 头就会被转换为较简单的以太网 MAC 标头。
a. 记录在 802.11 MAC 标头之 Address 3 位里的目的地址,会被复制到以太网 的目的地址。b. 记录在 802.11 MAC 标头之 Address 2 位里的源地址,会被复制到以太网的 源地址。
c. 从 802.11 Data 位里的 SNAP 标头,将(Type)类型代码复制到以太网帧里 的 Type 位。如果该以太网帧亦使用 SNAP,就复制整个 SNAP 标头。
d. 顺序信息主要供帧片段重组之用,不过当帧被桥送之后即予以丢弃。
e. 如果有标准的服务质量处理程序,即在此进行无线与有线的 Qos 对应。不过 到目前为止,用来表示服务质量的形式,通常就是在有线帧中使用 802.1p 优先性等级 bit,或者其他的控制形式。
-
重新计算帧检验码。以太网与 802.11 使用相同的算法来计算 FCS,不过 802.11 帧多 出一些位,同时为 FCS 所保护。
-
所产生的新帧交付以太网界面传送。
有线媒介到无线媒介
-
验证以太网 FCS 后,基站首先会检视是否需要进一步处理所接收到的帧,亦即检视该 帧的目的地址是否属于目前与基站连接的工作站。
-
将 SNAP 标头附加于以太网帧的数据之前。上层封包是以 SNAP 标头进行封装,而其 Type 位是自以太网帧里的类型代码复制而来。如果该以太网帧亦使用 SNAP,则复制 整个 SNAP 标头。
-
对帧的传送进行排程。802.11 包含复杂的省电过程,将帧置于传送序列之前,基站可 能会将帧暂存于缓存区
-
一旦帧被置于序列待传,就会被赋予一个顺序编号。如有必要,所产生的数据可以用完 整性检验值加以保护。如果帧需要分段,则会根据事先设定好的分段门限进行分段。分 段帧时,将会在 Sequence Control 位指定片段编号。
-
如果帧需要保护,则对帧(或每个帧片段)的本体加密。
-
802.11 MAC 标头是根据以太网 MAC 标头产生。
a. 将以太网 的目的地址复制到 802.11 MAC 标头的 Address 1 位。b. 将 BSSID 置于 MAC 标头的 Address 2,以作为无线介质上之帧的发送者。c. 将帧的源地址复制到 MAC 标头的 Address 3 位。d. 将其他位填入 802.11 MAC 标头。也就是把预计传送时间填入 Duration 位, 并把适当的标志填入 Frame Control 位。
-
重新计算帧检验码。以太网与 802.11 使用相同的算法来计算 FCS,不过 802.11 帧多 出一些位,同时为 FCS 所保护。
-
所产生的新帧交付 802.11 界面传送。
总结
数据帧发送过程:(不太严谨的图示)
巨人的肩膀
本文学习自以下文档:
[1] 802.11 无线网络权威指南.MattbewS.Gast
[2]802.11协议精读2:DCF与CSMA/CA .少茗