前言
802.11 无线 WiFi 网有三类帧:数据帧、管理帧、控制帧。与有线网相比,无线 WiFi 网会复杂很多。大部分应用软件开发对 WiFi 的控制帧和管理帧了解得并不多,因为它们在物理层和数据链路层就已经被处理了,上层应用很少能感知到。一般是在设备出现 WiFi 连接不上,或者是工作不稳定的情况下,才会去分析 WiFi 驱动工作情况以及抓 WiFi 空口包数据来分析。有抓过 WiFi 空口包的同学应该清楚,无线 WiFi 网的网络包不管是从包类型还是包信息内容来看,都会比有线网的包复杂很多。
(一) 有线与无线网物理层差异

- CSMA/CD 用于有线网络,通过检测和处理冲突来维持网络的稳定性。
- CSMA/CA 用于无线网络,强调冲突的预防,以应对无线信道共享的挑战。
(1) 有线网 CSMA/CD
在有线网络中,设备间通过网线相互连接,它的工作原理是:载波侦听:设备在发送数据之前会先监听网络,以检测是否有其他设备在传输数据。如果检测到网络空闲,则开始发送数据。冲突检测: 在数据发送过程中,设备持续监听网络。如果检测到冲突 (即两个或多个设备同时发送数据导致信号混合) ,发送数据的设备会停止传输,并发送一个“冲突信号”以通知网络上的其他设备。重传数据: 发生冲突后,设备会等待一段随机的时间后再次尝试发送数据。这个随机等待时间称为“退避算法”,可以有效减少后续冲突的可能性。这个就是有线网 CSMA/CD (Carrier Sense Multiple Access with Collision Detection,载波侦听多路访问与冲突检测) 的工作原理。它依赖的是网线共享介质,设备在数据发送的过程中,还可以检测网线状态。(2) 无线网 CSMA/CA
与有线网不同的是,无线网它是通过电磁波进行数据交互。无线是半双工工作模式,无线客户端没有同时进行接收和发送的能力,无法检测到冲突。所以有线网络中的冲突检测方式,在无线中并不适用,并且无线中还存在相邻站点不一定能侦听到对方的情况:
(3) CSMA/CA 工作原理:
载波侦听:设备在发送数据之前也会监听无线信道,检查是否有其他设备在使用。只有信道空闲,设备才会继续执行发送操作。冲突避免:为了尽量避免冲突,在发送数据之前,设备可能会先发送一个“准备发送”信号 (如RTS,即请求发送) ,并等待接收设备返回“允许发送”信号 (如CTS,即清除发送) 。数据发送:收到 CTS 信号后,设备才会发送数据。ACK确认:数据发送成功后,接收设备会发送一个确认信号 (ACK) 。如果发送设备在规定时间内没有收到 ACK,它会认为数据丢失并重新发送。由于无线网引入了额外的信号交换 (如 RTS/CTS) 和 ACK 等机制,增加了无线网设备连接、数据交互的复杂度。(二) CSMA/CA 的关键技术

(1) ACK 确认机制 (Acknowledgment Mechanism)
在数据帧成功发送并被接收设备接收到后,接收设备会发送一个 ACK (Acknowledgment)帧 给发送设备,表示数据成功到达。如果发送设备在指定时间内未收到 ACK,它会认为数据丢失并重新发送。
(2) RTS/CTS 机制 (Request to Send / Clear to Send)
RTS/CTS 机制 是 CSMA/CA 中用于减少冲突的关键技术。它通过引入“准备发送”请求 (RTS) 和“允许发送”确认 (CTS) 这两个控制帧,在发送数据之前确保信道空闲,减少隐蔽节点问题。RTS(Request to Send):发送设备首先向接收设备发送一个 RTS 帧,表明自己想要发送数据。CTS (Clear to Send):接收设备在确认信道空闲后,会回复一个 CTS 帧,允许发送设备进行数据传输。(a) RTS/CTS与隐藏节点:
隐藏节点 指在接收者的通信范围内而在发送者通信范围外的节点。
- PC1 要发送数据,所以它发送了 RTS 帧, 这时路由器可以收到该 RTS 帧,但是 PC2 与 PC1 距离较远,PC2 收不到 PC1 的 RTS 帧。
- 路由器 AP 收到PC1 的 RTS 帧后,会同时向 PC1 和 PC2 发送 CTS 帧
- PC1 收到路由器发的 CTS 帧后,PC1 开始发送数据。
- PC2 收到路由器发的 CTS 帧后,PC2 保持安静,不能发送数据
(b) RTS/CTS与暴露节点:
暴露节点 指在发送者的通信范围之内而在接收者通信范围之外的节点

(c) 暴露节点解决方案
- PC1 要发送数据,于是发送 RTS 帧,AP1 和 PC2 都可以接收到该 RTS帧
- AP1 收到 RTS 帧后,会发送 CTS 帧
- PC1 收到 CTS 帧后可以开始传输数据
- PC2 如果也收到了 AP1 的 CTS 帧,PC2 不能与 AP2 发送数据,只能保持安静
- PC2 如果只收到 PC1 的 RTS 帧,但是没有收到 AP1 发送的 CTS帧,这个时候 PC2 可以发送数据给 AP2,并且也不会影响到 AP1 数据的接收
(3) 随机退避算法 (Random Backoff Algorithm)
当信道忙碌时,设备不会立即重新尝试发送数据,而是会等待一个随机的时间段后再尝试。这种随机等待时间由 退避算法 (Backoff Algorithm) 决定,以减少多个设备同时再次尝试发送数据的可能性,从而避免冲突。具体做法是,在每次检测到信道忙碌后,设备会生成一个随机退避时间。退避时间越长,设备等待的时间越久,从而分散重试时间点,降低冲突概率。
- 发送数据前随机选取退避时间
- 退避时间最短的站优先发送数据帧
- 最短的时间为退避窗口
- 新的退避时间 = 上次退避时间 - 退避窗口
(4) 帧间间隔 (Interframe Space, IFS)
IFS (Interframe Space, 帧间间隔) 用于控制设备在发送数据帧之间的等待时间,以确保无线信道的公平性和有效性。根据不同的情况,IEEE 802.11 标准定义了几种不同类型的 IFS:(a) 短帧间间隔 (Short Interframe Space, SIFS)
应用场景:用于高优先级的操作,如 ACK 确认帧、CTS 帧、以及从站的响应帧。特点:SIFS 是所有 IFS 中最短的,确保重要数据能够迅速传输而不受其他帧的干扰。由于它的间隔短,接收方可以快速发出确认,减少等待时间,提高数据传输效率。(b) 点协调功能帧间间隔 (Point Coordination Function Interframe Space, PIFS)
应用场景:用于集中控制模式下,接入点 (AP) 在无竞争的情况下使用,如在 PCF (点协调功能) 模式下的优先级操作。特点:PIFS 的等待时间比 DIFS 短,但比 SIFS 长。它主要用于在竞争前启动通信,以便接入点在竞争阶段之前获得信道控制权。(c) 分布式协调功能帧间间隔 (Distributed Coordination Function Interframe Space, DIFS)
应用场景:用于普通数据帧的传输,通常在竞争环境中使用。特点:DIFS 是正常数据帧在竞争信道时使用的间隔。它的等待时间比 PIFS 长,确保优先级较低的设备在优先级较高的操作完成后再尝试发送数据。(d) 扩展帧间间隔 (Extended Interframe Space, EIFS)
应用场景:当一个设备接收到一个有错误的数据帧时,它会等待 EIFS 时间后再试图发送数据。特点:EIFS 是所有 IFS 中最长的,旨在避免网络中更多的冲突或干扰发生。当设备认为信道状况不佳时,会使用更长的等待时间以减少进一步的冲突。(e)应用实例

- 发送者想要发送数据,先侦听信道状态,如果空闲,它就会发送一个 RTS 帧(请求发送帧)
- 接收者接收到该 RTS 帧之后,等待一个 SIFS (短帧间间隔)时间后,再发送一个 CTS 帧(可以发送数据了)
- 发送者收到 CTS 帧之后,间隔一个 SIFS (短帧间间隔)时间后,发送数据帧。
- 接受者接收到数据后,再间隔一个 SIFS 后应答一个 ACK 帧
- 最下面一行的 NAV 是其它设备的一个时间记时器,当设备的 NAV 计时器大于零时,设备会认为信道正在被其他设备占用,因此不会尝试进行传输,被进制访问介质。
- ACK 之后有个 DIFS (分布式协调功能帧间间隔),这是个竞争窗口,容许优先级低的设备再尝试发送数据。
(5) 载波侦听 (Carrier Sensing)
(a) 物理载波侦听与虚拟载波侦听
载波侦听 在设备发送数据之前,它会先侦听无线信道,检查是否有其他设备在使用该信道。如果信道空闲,设备才会继续后续的发送操作。这一过程被称为 物理载波侦听。虚拟载波侦听 是通过网络分配器 (如无线接入点) 来管理信道的占用情况,利用控制帧 (如 RTS/CTS)来减少冲突。(b) 网络分配向量(Network Allocation Vector,NAV)
NAV 是无线设备在信道上听到某些控制帧 (如 RTS/CTS 或数据帧) 时设置的一个计时器。这个计时器表示该设备预计信道会被占用的时间,设备会在 NAV 计时器归零之前避免传输数据。(c) NAV 的工作原理
NAV 设置: 当一个设备在无线信道上接收到某个帧 (如 RTS 或 CTS) 时,它会读取该帧中的持续时间字段 (Duration Field) 。这个字段表示该帧预期的占用时间,包括发送数据帧和接收 ACK 所需的时间。接收设备会根据这个持续时间设置自己的 NAV 计时器。信道占用判断: 当设备的 NAV 计时器大于零时,设备会认为信道正在被其他设备占用,因此不会尝试进行传输。NAV 计时器归零后,设备会再次检查信道是否空闲,如果空闲,则可以开始自己的传输。NAV 与物理载波侦听的结合:NAV 是一种 虚拟载波侦听 机制,它与 物理载波侦听 相结合。物理载波侦听是通过硬件直接检测信道上的信号强度,来判断信道是否被占用。NAV 通过读取帧信息来推断信道的占用状态。物理载波侦听与 NAV 结合使用,有助于更准确地判断信道状态,减少冲突。
(三)无线用户接入过程
我们手机、笔记本电脑等设备的 WiFi 模块一般工作在 STA 模式,路由器的 WiFi 一般工作在 AP 模式。当我们 STA 设备连接到路由器 AP 的时候,有三个过程:扫描、认证、关联。
- 扫描阶段 STA进行扫描,定期搜索周围的无线网络,获取到周围的无线网络信息。
- 认证阶段 STA 接入 WiFi 网络前需要进行终端身份验证,即链路认证。链路认证通常被认为是终端连接 AP 并访问 WiFi 的起点。
- 关联阶段 完成链路认证后,STA 会继续发起链路服务协商。
(1) 扫描阶段 (Scanning)
扫描阶段 (Scanning) 是 WiFi 设备连接无线网络的第一步,设备通过扫描找到可用的无线接入点 (Access Point, AP) ,从而选择合适的 AP 进行连接。WiFi 标准中定义了两种主要的扫描方式:主动扫描 (Active Scanning) 和被动扫描 (Passive Scanning) 。每种方式有其特点和应用场景。(a) 主动扫描 (Active Scanning)
在主动扫描过程中,设备会主动向周围的无线信道发送探测请求 (Probe Request) ,并等待 AP 发送探测响应 (Probe Response) 。这个过程可以快速发现周围的 WiFi 网络,尤其是在设备不知道有哪些网络可用的情况下。主动扫描的过程分为以下几个步骤:探测请求 (Probe Request) 设备依次切换到不同的信道 ( WiFi 网络使用多个信道进行通信,不同的标准使用不同的信道范围,比如 2.4GHz 频段有 14 个信道) 。在每个信道上,设备会发送探测请求帧 (Probe Request) 。这个探测请求可以是针对所有网络的广播,也可以是针对特定 SSID 的单播。

- SSID (可以是具体的SSID,也可以是广播请求)
- 支持的速率
- 扩展功能信息 (如支持的安全协议)
- SSID (网络名称)
- BSSID (AP的MAC地址)
- 信道号
- 支持的速率
- 安全协议信息 (如WPA/WPA2)
- 网络容量和设备数量
- 其他可能的扩展功能 (如QoS、WMM等)
(b) 被动扫描 (Passive Scanning)
在被动扫描过程中,设备不会主动发送探测请求,而是通过监听特定信道上的信标帧 (Beacon Frame),从中获取 AP 的信息。信标帧是 AP 定期广播的一种特殊的管理帧,所有设备只需监听信道即可获知周围可用的网络。
- SSID
- BSSID (AP的MAC地址)
- 支持的传输速率
- 信道号
- 安全信息 (如WPA/WPA2)
- 网络时间戳 (用于同步设备的时钟)
- 其他可能的功能 (如WMM、HT Capabilities、VHT Capabilities等)
- 设备依次切换到不同的信道,并在每个信道上监听信标帧。每个信道可能包含多个 AP 的信标帧。
- 通过这些信标帧,设备可以了解哪些 AP 在附近可用,并获取相关的配置信息。
(2) 认证阶段 (Authentication)
认证是设备和 AP 之间相互确认身份的过程。在传统的 WiFi 认证中,有两种方式:开放系统认证 (Open System Authentication):这是最简单的方式,不需要设备和AP之间进行任何密钥交换,所有请求都会通过。共享密钥认证 (Shared Key Authentication):设备和 AP 会通过 WEP (Wired Equivalent Privacy) 密钥进行加密认证。这种方式现已很少使用,因为 WEP 的安全性较差,已被更强的 WPA/WPA2/WPA 3等认证方式取代。
(3)关联阶段
在完成扫描和认证阶段之后,设备必须通过关联阶段,才能与无线接入点 (Access Point, AP) 建立正式的连接,并开始进行数据通信。在这个阶段,设备与 AP 之间会进行详细的参数交换,确保双方能够兼容并高效地进行后续通信。
(a)关联请求 (Association Request)
在认证通过后, WiFi 设备会发送一个关联请求帧 (Association Request),请求与 AP 建立正式的连接。这个关联请求帧携带了设备的详细信息,以便 AP 了解设备的能力,并确定双方能否以最佳方式进行通信。关联请求帧的主要字段包括:- SSID:所请求连接的网络名称。
- 支持的速率集 (Supported Rates Set):设备所支持的传输速率,AP可以根据这些速率来选择合适的通信速率。
- 扩展速率集 (Extended Supported Rates):用于支持更高的传输速率 (例如802.11n/ac/ax)。
- 信道信息:设备希望使用的信道以及相关的频段信息。
- 安全信息:包括设备支持的加密和认证协议 (如WPA2/WPA3等)。
- 能力信息 (Capability Information):设备的其他功能,如是否支持QoS (Quality of Service)、电源管理等。
- HT/VHT Capabilities:如果设备支持802.11n (HT, High Throughput) 或802.11ac/ax (VHT, Very High Throughput),它会在关联请求中包含这些信息,以允许AP使用更高效的技术来优化传输性能 (如 MIMO、多信道聚合等)。
(b)关联响应 (Association Response)
AP 接收到设备的关联请求帧后,会检查设备的请求信息,评估其是否能够接受设备的连接。通常,AP 会基于设备的能力和当前网络的负载情况作出决定。然后,AP 会通过 关联响应帧 (Association Response) 来通知设备是否成功关联。关联响应帧包括以下重要信息:- 状态码 (Status Code):指示关联是否成功。如果状态码为0,表示关联成功;否则,设备需要重新尝试。
- 关联标识符 (Association ID, AID) 每个成功关联的设备会被 AP 分配一个唯一的 AID,用于区分不同的设备。在后续通信中,AP 使用 AID 来管理每个设备。
- 支持的速率信息:AP 会在响应中确认双方支持的最高传输速率,这些速率会成为后续通信中的基准。
- 可能的信道信息:如果 AP 支持多信道传输或设备的请求中包含特定信道要求,AP 会在响应中确认所选择的信道。
(c) 关联成功后的状态
一旦设备收到关联成功的响应帧,它就会正式成为 AP 的一部分,并可以开始通过AP 访问网络资源。关联成功后的状态有以下几个关键点:- 设备获得AID:设备的 AID 可以用于 AP 管理关联设备的无线资源,例如通过AID 来识别哪些设备可以发送或接收数据。
- 资源分配:AP 可能根据网络条件和设备的能力,分配特定的无线资源 (如信道带宽、时隙等)。
- 准备数据传输:关联完成后,设备与 AP 之间的通信变为数据帧传输,设备可以通过 AP 接入互联网或本地网络资源。
(d) 关联失败的情况
关联过程并非总是成功的,可能的失败原因包括:- AP 超载:如果 AP 已经连接了过多的设备,它可能会拒绝新的关联请求,通常会返回一个“超载”状态码。
- 信道不匹配:设备请求使用的信道可能不在 AP 当前支持的信道范围内。
- 安全协议不兼容:如果设备和 AP 使用不同的安全协议 (例如设备只支持 WPA, 而 AP 要求 WPA2 或 WPA3),关联将会失败。
- 信号质量差:如果设备距离 AP 太远,信号质量过差,AP 可能无法维持稳定的连接,从而拒绝关联请求。
结尾
上面主要介绍了有线网与 WiFi 无线网在物理层的差异、WiFi 介质访问控制原理及其关键技术、无线用户的接入过程。下一篇将介绍 WiFi 空口包抓包、以及各类 WiFi 包的解析。上面内容,如有错误,欢迎评论区提示指出,不胜感激。------------------End------------------如需获取更多内容请关注liwen01公众号