liwen01 2024.09.22
前面介绍了 WiFi 的工作原理和 WiFi 的接入过程,这里将通过分析 WiFi 具体数据包结构,让你对 WiFi 工作原理和接入过程有一个更进一步的了解。
前面文章可以通过下面连接查看:
802.11 无线 WiFi 有 数据帧,管理帧、控制帧 三种类型帧。
这些帧由 9 个部分组成:Frame Control,Duration ID,Address1,Address2,Address3,Seq-ctl,Address4,Frame Body,FCS。
需要注意的是,有些组成部分在有些帧里并不是必须的。
九个部分的功能简介如下:
指定协议的版本号。当前的 802.11 标准使用版本号 00,即 0。
定义帧的主要类型。
定义帧的子类型,不同的主类型有不同的子类型
对于管理帧:
对于控制帧:
对于数据帧:
指示该帧是否发送到分布式系统 (即无线接入点AP)
取值:
指示该帧是否来自分布式系统。
取值:
0:帧不是来自 DS (通常是 AP 发送给 STA 的帧) 1:帧是来自 DS (通常是 STA 发送给 AP 的帧)
指示当前帧是否有更多的片段。如果一个数据帧被分片发送,那么除最后一个片段外,所有片段的此位都置为1。
取值: 0:这是最后一个片段; 1:后续还有片段
指示当前帧是否为重传帧。如果之前发送的帧没有被正确确认,帧会被重传,此位会置为1。
取值: 0:首次发送; 1:重传帧
指示站点的电源管理状态。
取值:0:站点处于活动模式; 1:站点处于省电模式
由AP设置,用于指示站点是否有更多的数据帧等待接收。
取值: 0:没有更多数据;1:有更多数据
指示帧的内容是否加密,使用的是 WEP、TKIP、CCMP 等加密协议。
取值:0:帧未加密; 1:帧已加密
指示该帧是否以严格顺序处理,通常用于 QoS 数据帧。
取值:0:不需要严格顺序处理; 1:需要严格顺序处理
上面 802.11 Beacon frame 帧,版本号为 0;帧类型为 00 为管理帧;子类型为1000 为Beacon 帧。
Duration/ID 字段的功能因帧的类型和上下文而异,主要有以下两种主要用途:网络分配向量 (NAV)持续时间 和 AID (Association ID)
对于大多数数据帧和管理帧,Duration/ID字段表示剩余的帧传输时间。它告诉网络中的其他设备该帧将占用通信介质多长时间,从而更新它们的网络分配向量 (NAV)。NAV是一个计时器,指示设备在特定时间内不应访问通信介质,避免冲突。
单位:微秒 (µs)
数据帧: Duration/ID 字段表示从当前帧开始,到ACK帧结束所需的时间。这包括数据帧传输时间、SIFS (短帧间隙)时间和ACK传输时间。
RTS/CTS帧 在RTS (Request to Send) 和 CTS (Clear to Send) 帧中,Duration/ID 字段表示整个传输会话的剩余时间,包括数据帧和相应的ACK帧传输。
在某些帧 (如 Power Save Poll 帧)中,Duration/ID 字段包含的是站点的 Association ID (AID),这是一个由接入点 (AP) 分配给每个关联站点的唯一标识符。当字段被用于此目的时,字段的高两位通常设置为 11 以表示 AID,而剩余的14位表示实际的 AID 值。
上面的 CTS 帧,Duration 为 134 ms,表示该传输会持续134 ms,在这期间同信道的其它设备需要保持安静。
Sequence Control 字段用于管理帧的序列化和片段化。这个字段有助于确保数据帧能够按正确的顺序组装,并检测和处理重传的帧。
Sequence Control 字段分为两个部分: Fragment Number (片段号):4位 和 Sequence Number (序列号):12位
片段号用于标识帧的分片部分。由于无线传输可能会受到干扰,大型帧在传输前可能会被分割成多个小片段,每个片段都有唯一的片段号
取值范围:0 到 15 (即2^4 - 1)
Fragment Number 的主要功能
片段管理: 当一个帧被分片时,片段号用于标识每个片段的顺序,以便接收端正确重组原始帧。
重传管理:在某些情况下,如果一个片段由于传输错误而丢失,只有丢失的片段需要重传,而不是整个帧。片段号帮助识别需要重传的具体片段。
序列号用于标识发送方发出的帧的顺序,以便接收方能够检测丢失的帧并正确重组数据。
取值范围:0 到 4095 (即2^12 - 1)
Sequence Number 主要功能:
帧顺序管理:序列号帮助接收端按正确的顺序排列接收到的帧。如果接收到的帧序列号不连续,说明有帧丢失或需要重传。
重传检测:当帧重传时,序列号保持不变,但片段号可能变化。接收方通过序列号识别重传的帧,并决定是否丢弃或处理该帧
分片传输: 当一个大数据帧被分片时,所有片段使用相同的序列号,但片段号递增。例如,假设序列号为100,片段号为 0,表示第一个片段;片段号为 1,表示第二个片段,依此类推。
帧重传: 如果帧在传输过程中丢失或被接收端判断为错误,发送端会重传该帧。重传帧的序列号与原帧相同,但片段号可能发生变化,具体取决于传输的片段。
查看上面的数据帧,被分开了多个数据帧,当前 Sequence Number 为 1144 。
WiFi 是通过无线电报在空中进行数据交互,所以称为空中接口包(Air Interface Packet),也简称为空口包。它包含了无线 WiFi 网中传输的所有信息。
在有线网中,我们一般使用 Wireshark 来抓取网卡的所有数据,但是在无线 WiFi 中,无线口空包数据一般使用 Omnipeek 来抓取。
Omnipeek 需要搭配一个数据分析网卡来使用,可以在不建立链接的前提下,直接抓取到 802.11 无线数据,一般用于研究开发 WiFi 协议、分析无线连接过程、监控无线网络等。
关于 Omnipeek 的使用,网上介绍比较多,我这里就简单概括一下使用方法。
通过上面方式就可以抓取到某个信道的所有无线信号,具体使用与 Wireshark 类似。抓取到的数据帧如下:
管理帧有:Beacon 信标帧、Probe Request 检测请求帧、Probe Response 检测应答帧、Authentication 认证帧、De-Authentication 解除认证帧、Association Request 连接请求帧、Re-Association Request 重新连接请求、Association Response 连接应答帧
这里我们主要介绍:Beacon 信标帧、Association Request 连接请求帧 和 Association Response 连接应答帧。
Beacon 的 Subtype 为1000,所以整个帧类型为:001000b,也就是 0x08。
使用过滤条件为:wlan.fc.type_subtype == 0x08
可以刷选出所有的 beacon 帧。
Beacon 由无线接入点 (AP)定期广播,用于宣布无线网络的存在,并向附近的客户端设备提供必要的网络信息,以便它们能够加入和管理连接。
网络发现:Beacon 帧包含了无线网络的SSID (Service Set Identifier),帮助客户端设备发现和识别无线网络。
同步:Beacon 帧携带时间戳,客户端设备通过接收 Beacon 帧可以同步其时钟与AP的时钟,这对于协调设备的定时和节能至关重要。
传递网络配置信息:Beacon 帧包含网络的配置信息,如支持的速率、加密方法、信道信息等,帮助客户端设备配置和优化其连接。
信号广播:Beacon 帧还帮助客户端设备确定信号强度,从而选择合适的 AP 进行连接。
定期广播: AP按照设定的 Beacon 间隔 (通常为100 TU,即102.4毫秒)定期发送Beacon帧,以宣布其存在和提供网络信息。
客户端扫描: 无线客户端设备定期扫描信道,接收不同 AP 发送的 Beacon 帧,通过这些帧中的信息来选择合适的 A P进行连接。
网络加入和管理: 客户端设备一旦选择了合适的 AP,便通过 Beacon 帧中的信息来配置连接参数,例如信道、速率、加密方法等。
节能管理: 当设备进入节能模式时,它会依赖 Beacon 帧中的 TIM 字段来判断何时需要唤醒接收数据,减少不必要的能耗。
Frame Control (帧控制):类型字段为管理帧,子类型字段为Beacon
Duration/ID (持续时间/ID) 表示帧传输需要的时间,Beacon 帧一般设为 0,表明没有后续操作需要保留介质。
Address 1 (Destination Address,目的地址) :通常设置为广播地址 (FF:FF:FF:FF:FF),因为Beacon帧是广播帧,面向所有设备。
Address 2 (Source Address,源地址):AP的MAC地址,标识发送Beacon帧的无线接入点。
Address 3 (BSSID,基本服务集标识符): 网络的BSSID,通常与Address 2相同,除非是中继的场景。
Sequence Control (序列控制): 包含序列号和片段号,用于管理帧的顺序和重组。
Frame Body (帧主体) :Beacon帧的主要内容,包含网络的配置信息和时间同步信息。以下是Frame Body中的关键字段:
Association Request 帧是802.11无线WiFi网中用于建立客户端设备(例如笔记本电脑、智能手机等)与无线接入点 (AP) 之间连接的管理帧之一。
这个帧由客户端设备在选择了一个 AP 后发出,表示它希望加入这个无线网络。
使用参数 wlan.fc.type_subtype == 0x00
可以过滤出所有的 Association Request 帧
加入网络:客户端设备使用 Association Reques t帧请求加入一个 AP 管理的无线网络。
传递客户端能力:帧中包含了客户端设备的能力信息,例如支持的速率、加密方法、QoS 功能等。
获取网络资源:通过关联请求,客户端能够获取到网络分配的资源,例如 IP 地址、网络权限等
扫描与发现: 客户端设备通过主动或被动扫描(如发送探测请求帧或接收信标帧)发现可用的 AP。
发送关联请求: 在选择目标 AP 后,客户端设备发送 Association Request 帧给AP,请求加入网络。
AP处理请求: AP 收到请求后,会检查客户端设备的能力和配置是否与网络兼容,并确定是否允许其加入。
发送关联响应:如果 AP 同意请求,它将返回一个 Association Response 帧,指示关联的成功与否,并分配一个关联 ID (AID)。如果不成功,AP 会给出拒绝原因。
建立连接: 关联成功后,客户端设备和AP之间的连接建立,客户端设备可以开始数据传输。
Frame Control (帧控制) :类型字段为管理帧 (00)子类型字段为 Association Request (0000)。
Duration/ID (持续时间/ID):指定传输此帧所需的时间,或包含关联ID。
Address 1 (目的地址) 目标 AP 的 MAC 地址 (即接收地址)。
Address 2 (源地址) 发送 Association Request 的客户端设备的 MAC 地址。
Address 3 (BSSID,基本服务集标识符) 目标网络的 BSSID,通常与 Address 1 相同。
Sequence Control (序列控制) :包含帧的序列号和片段号,用于管理帧的顺序和重组。
Frame Body (帧主体) Association Request 帧的核心部分,包含客户端设备的能力和配置参数。帧主体包含以下子字段:
Capability Information (能力信息) 描述客户端设备的能力,如是否支持加密、短前导码、QoS、功率管理等功能。
Listen Interval (侦听间隔) 客户端设备与 A P通信时的间隔,表示客户端设备多长时间侦听一次信标帧。值越小,客户端越频繁地检查 AP 发送的信标,消耗的功率越大。
SSID (服务集标识符) 客户端设备请求加入的无线网络的 SSID (网络名称)。如果客户端设备明确指定要加入哪个网络,就会包含这个字段。
Supported Rates (支持的速率) 客户端设备支持的数据传输速率列表。AP 会根据这个列表判断是否可以支持客户端的请求,并选择最佳传输速率。
Extended Supported Rates (扩展支持速率) 如果客户端设备支持的速率超过了 8 个,则会使用这个字段来传递更多速率信息。
RSN Information (RSN信息) 如果网络启用了 WPA/WPA2 加密,客户端会在这个字段中发送其支持的安全功能和加密方法。
Power Capability (功率能力) 客户端设备的最小和最大传输功率,通常在需要节能或具有特定功率要求的设备中使用。
Supported Channels (支持的信道) 客户端设备支持的信道范围,用于 AP 选择适当的信道进行通信。
Vendor Specific (厂商特定) 一些厂商特有的扩展字段,允许客户端和 AP 传递特定于设备的附加信息。
Association Response 由无线接入点 (AP) 在收到客户端设备 (例如笔记本电脑、智能手机等) 发送的 Association Request 帧后,作为响应发出。
这个帧的作用是通知客户端设备其关联请求是否成功,并在成功的情况下分配一个关联 ID (AID) ,允许其加入网络。
使用参数 wlan.fc.type_subtype == 0x01
可以过滤所有的 Association Response 帧
确认关联请求:AP 通过 Association Response 帧确认客户端设备的关联请求。
提供关联状态:该帧告知客户端设备其关联请求的结果 (成功或失败) ,如果失败,还会提供失败的原因。
分配资源:如果关联成功,AP会为客户端设备分配一个关联 ID (AID) ,并可能提供其他必要的网络参数。
接收关联请求: AP 首先接收到来自客户端设备的 Association Request 帧。
处理请求: AP 根据自身的能力、当前网络状态、客户端设备的能力信息等因素,决定是否允许客户端设备加入网络。
生成关联响应: AP生成一个 Association Response 帧,其中包含关联请求的结果和相关信息。
发送关联响应: AP 将 Association Response 帧发送回客户端设备。
关联成功:如果请求成功,客户端设备将接收到 AID ,并可以开始正常的数据传输。
关联失败:如果请求失败,客户端设备会接收到一个错误状态码,告知失败的原因,并可能需要重新发送关联请求或进行其他处理。
建立连接:如果关联成功,AP 和客户端设备之间的连接正式建立,客户端可以进行数据传输和进一步的网络交互
Frame Control (帧控制) 类型字段为管理帧 (00) 子类型字段为 Association Response (0001) 。
Duration/ID (持续时间/ID) 指定传输此帧所需的时间,或包含关联 ID。
Address 1 (目的地址) 发送关联请求的客户端设备的 MAC 地址 (即接收地址) 。
Address 2 (源地址) AP的MAC地址,表示发送该响应帧的设备。
Address 3 (BSSID,基本服务集标识符) 网络的 BSSID,通常与 Address 2 相同。
Sequence Control (序列控制) 包含帧的序列号和片段号,用于管理帧的顺序和重组。
Frame Body (帧主体) Association Response 帧的核心部分,包含关联结果和配置参数。以下是 Frame Body 中的关键字
Capability Information (能力信息) 描述 AP 的能力,如支持的加密方法、短前导码、QoS、功率管理等功能。这个字段的内容与 Association Request 帧中的 Capability Information 字段相似,但由 AP 决定。
Status Code (状态码) 指示关联请求的处理结果。常见的状态码包括:0 (成功) :关联请求成功。1-65535 (失败原因) :如资源不足、AP 不支持客户端请求的功能、认证失败等。
Association ID (AID,关联ID) 如果关联成功,AP 为客户端设备分配一个唯一的关联 ID (AID) 。AID 是一个用于标识客户端设备的短标识符,在 AP 和客户端之间进行通信时很常用,尤其是在节能模式下。
Supported Rates (支持的速率) AP 支持的数据传输速率列表,通常包含在响应帧中以确认客户端设备和 AP 之间的速率匹配。
HT Capabilities (高吞吐量能力,可选) 如果 AP 支持802.11n 或更高标准 (如802.11ac) ,可能会包含这个字段来描述 AP 的高吞吐量能力。
控制帧包括:ACK(应答)、RTS(请求发送)、 CTS(允许发送)、PS-Poll省电模式-轮询帧。
由于这些帧都不带实体部分,所以相对是比较简单的。
ACK帧 (Acknowledgement Frame) 用于确认接收到的数据帧或管理帧。
这是确保可靠数据传输的重要机制,尤其在无线网络中,因为无线信道易受干扰和数据丢失的影响。ACK帧由接收方发送给发送方,表示已成功接收到数据,无需重传。
确认接收:当设备成功接收到数据帧或管理帧后,发送 ACK 帧以告知发送方帧已被接收。
减少重传 :通过及时确认接收,ACK 帧帮助减少不必要的重传,优化网络效率。
保障可靠性:ACK 机制是 802.11 协议提供可靠数据传输的重要部分,确保发送方知道数据是否成功到达。
发送数据帧: 设备 A 向设备 B 发送数据帧 (如 Data 帧) 。
接收并处理数据帧: 设备 B 接收到数据帧,并检查数据的完整性 (通过 FCS 字段) 。
发送ACK帧: 如果数据帧无误,设备 B 在一个短的时隙 (称为SIFS,Short Interframe Space) 后,向设备 A 发送 ACK 帧。
确认接收: 设备 A 接收到 ACK 帧后,知道设备 B 已成功接收到数据帧,因此可以继续发送下一个数据帧。如果没有收到 ACK 帧,设备 A 会在规定的重传次数内重发数据帧。
类型字段为控制帧 (01),子类型字段为ACK (1101),通过 wlan.fc.type_subtype == 0x1d
可以筛选出 ACK 帧
RTS 帧 (Request to Send Frame) 与 CTS 帧 (Clear to Send Frame) 用于解决无线通信中可能发生的信道争用和隐藏节点问题。
RTS 帧通过请求信道占用权,确保发送方可以独占信道进行数据传输,从而减少数据帧的碰撞。
避免碰撞:在多个设备共享同一无线信道的环境下,RTS 帧帮助协调设备之间的通信,减少同时发送数据导致的帧碰撞。
解决隐藏节点问题:当两个设备无法直接彼此通信,但都能与 AP 通信时,RTS 帧有助于确保这些设备不会同时发送数据,从而避免信道争用。
控制信道访问:通过RTS/CTS (Clear to Send) 机制,设备可以请求短暂占用信道的权限,确保其数据传输不会受到其他设备的干扰。
RTS帧与CTS帧 (Clear to Send) 共同工作,形成RTS/CTS机制。这是802.11协议中一种用于解决信道争用和碰撞的问题的协议。其工作步骤如下:
发送 RTS 帧:设备 A 准备发送一个较大的数据帧时,首先向设备 B 发送 RTS 帧,请求占用信道的许可。RTS 帧中包括目的地址 (设备B) 和信道占用时间。
接收 CTS 帧:如果设备B接收到 RTS 帧,并且信道空闲,它会在一个短暂的 SIFS (Short Interframe Space) 后,向设备 A 发送 CTS 帧。CTS 帧中包括允许占用信道的时间。
其他设备等待:在设备 A 和设备 B 进行 RTS/CTS 交换的过程中,其他设备 (能够听到 CTS 帧的设备) 会进入等待状态 (NAV,网络分配向量) ,不占用信道,直至数据传输完成。
发送数据帧:收到 CTS 帧后,设备 A 确认信道已被分配给它,开始向设备 B 发送数据帧。
ACK确认:设备 B 成功接收到数据帧后,发送 ACK 帧确认数据的接收。
解决隐藏节点问题:在无线网络中,隐藏节点是指两个无法彼此直接通信的设备,但它们可以与同一个 AP 通信。RTS/CTS 机制通过要求所有设备在发送数据前先进行 RTS/CTS 交换,确保没有隐藏节点干扰数据传输。
减少碰撞概率:通过 RTS/CTS 机制,设备在传输大型数据帧前先进行握手,确保信道已被预留。这样,大大减少了因为碰撞而重传数据的需求,提高了网络效率。
优化信道使用:虽然 RTS/CTS 机制本身会增加一些控制帧的开销,但在高流量或高干扰环境中,它能有效地减少碰撞,从而提高整体网络的吞吐量和效率
PS-Poll帧 (Power Save Poll Frame) 用于设备在省电模式下与接入点 (AP) 通信时,轮询接收缓存的帧。
它的主要目的是帮助处于省电模式的设备高效管理电源,同时确保不会错过重要的数据帧。
省电模式下的帧获取:当设备处于省电模式时,它会定期进入活动状态,通过发送PS-Poll 帧请求 AP 发送缓存的数据帧。
优化电池使用: 通过减少设备的活动时间,PS-Poll 帧帮助设备在尽可能少消耗电能的情况下获取数据。
信道效率: PS-Poll 帧确保只有在设备准备好接收数据时,AP 才会发送缓存的帧,从而提高了信道的使用效率。
PS-Poll 帧的工作流程涉及设备和AP之间的交互,确保省电模式下的设备能够有效接收数据帧。具体步骤如下:
设备进入省电模式:设备定期进入省电模式,关闭大部分的无线功能以节省电能。
AP 缓存数据帧:当 AP 有数据帧需要发送给处于省电模式的设备时,它会缓存这些帧,并在 Beacon 帧中设置标志,表明有数据帧等待发送。
设备轮询 AP:设备周期性地唤醒,并发送 PS-Poll 帧给 AP,询问是否有数据帧待接收。
AP响应PS-Poll 帧:收到 PS-Poll 帧后,AP 会根据缓存情况,立即发送数据帧。如果有多帧需要发送,AP 会继续缓存剩余的帧,直到设备再次发送 PS-Poll 帧。
设备接收数据帧:设备接收到 AP 发送的帧后,如果 AP 指示还有更多帧待接收,设备可以选择继续轮询或返回省电模式。
延长电池寿命:PS-Poll 帧的使用使得设备能够最大限度地减少无线功能的开启时间,从而有效延长电池寿命。
信道占用优化:PS-Poll 机制确保AP只在设备请求时发送数据帧,避免了不必要的信道占用,从而提高了网络效率。
适用于移动设备:在移动设备 (如智能手机和笔记本电脑)中,PS-Poll 帧机制尤其重要,因为这些设备依赖电池供电,电量管理对用户体验至关重要。
类型字段为控制帧 (01),子类型字段为 PS-Poll (1010),整合类型为:0x1a
注意,在 PS-Poll 帧中,Duration 字段通常用来表示设备 ID,以帮助 AP 识别是哪台设备正在轮询帧。所以上面截图的这个 Duration 实际是解析错了,它不是表示时间,而是表示 ID。
上面内容主要是对 WiFi 的部分控制帧和管理帧做了简单的介绍,如有错误,欢迎评论区提示指出,不胜感激。
下一篇将介绍 WiFi 漫游与路由器的串并联、 Mash、AC+AP 组网相关知识