WiFi 基础知识全解析:802.11、信道、SSID 与抓包排障
简介:面向无线网络初学者、网络运维入门者与物联网/嵌入式开发者的WiFi基础知识整理文档,围绕IEEE 802.11协议族搭建从基本概念到常用术语的认知框架,适合课程复习、设备配置前补基础以及无线抓包排错时查阅。压缩包内共1个doc文件,约88KB,以文字笔记形式对比有线与无线网络在连接建立、半双工通信、帧重传、抓包安全与功耗上的差异,并说明无线吞吐量相对有限但正随协议演进改善。正文按概述、协议、术语展开:梳理802.11a/b/g/n的频段、最大速率及802.11n在MAC层的改进,提及HT-40信道合并与MIMO/OFDM对性能的提升;解释LAN、WAN、WLAN、AP、Station、Associate、SSID、BSSID、BSS、DS等概念,并补充BSS基本组件、基础结构型网络Station<->AP<->Station的通信路径、分布式系统借助以太网骨干转发帧以及48位MAC地址等实践参数。已有280人学习,适合希望快速建立知识索引并查漏补缺的读者。
1. WiFi 到底是什么:一根线换成看不见的电波,麻烦就来了
插上网线就能上网,这件事几乎不用动脑;换成 WiFi,同一个房间、同一台路由器,有时刷视频很顺,有时连条消息都发不出去。多数人第一反应是"路由器不行了",可真正的原因往往更朴素:WiFi 把一根线换成了一片大家共用的空气,所有设备都得在这片空气里排队说话,谁先开口、说多快、说错了怎么办,全靠一套约定撑着。
WiFi 基础知识说到底就一句话:它是一套让设备用无线电波在局部范围内互相通信的规则集合。这套规则决定了连接怎么建立、数据怎么排队、出错了谁负责重传、陌生人怎么被挡在外面。搞懂这套规则,你再看路由器后台那些看不懂的开关,就不是玄学了,而是能对上号的取舍。
2. 802.11 协议族:WiFi 的"普通话"是怎么一代代升级的
2.1 有线走 802.3,无线走 802.11:两套规则的分工
有线网络里最有名的是以太网,它用的标准是 IEEE 802.3;WiFi 用的是 IEEE 802.11。这两个编号看着像兄弟,其实分工很清楚:它们都只管网络层以下的事,网络层以上——IP、TCP、HTTP 这些——两者基本一样。换句话说,网页、视频、聊天软件并不知道自己跑在线上还是空气里,真正需要重新设计的,是"怎么把一段数据可靠地送到对面那台设备"。
正因为这一层被换掉了,无线才凭空多出一堆有线没有的麻烦。有线是插上就通,双方之间有一条物理线缆,天然就是独占的;无线要先"建立连接",双方得先互相确认身份和意愿,才能开始传数据。有线可以同时收发,也就是全双工;无线在同一时刻只能有一方在说,是半双工,说完了才轮到你。
更麻烦的是出错率。空气里什么都有,微波炉、蓝牙耳机、隔壁的另一个路由器,都在往同一片频率里灌能量,所以无线帧在网络层以下出错的概率远高于有线。这就逼着 802.11 在链路层自己就带一套重传机制,而不能指望上层 TCP 的超时重传来兜底——那样一次重传要等好几百毫秒,体验会烂到没法用。此外,无线信号是广播出去的,谁都能听,抓包异常容易,所以加密是刚需而非可选项;发射信号要耗电,对电池是考验;吞吐量相对有线也偏低,尽管 802.11n 已经能做到 600Mbps 的理论速率。
提示:这六条差异——要建连、半双工、易出错、易被抓包、耗电、吞吐低——是后面所有复杂机制的源头。看到任何一条看不懂的 WiFi 设计,先回头想想它在补救哪一条,通常就通了。
2.2 从 a 到 n:频率、带宽、速率之间的取舍
802.11 不是一个协议,而是一个家族。按时间顺序,最常被提到的四个成员是这样的:
| 协议 | 制定时间 | 工作频段 | 频段宽度 | 最大理论速率 |
|---|---|---|---|---|
| 802.11a | 1999 年 9 月 | 5GHz | 325MHz | 54Mbps |
| 802.11b | 1999 年 9 月稍晚 | 2.4GHz | 83.5MHz | 11Mbps |
| 802.11g | 2003 年 6 月 | 2.4GHz | 83.5MHz | 54Mbps |
| 802.11n | 2009 年获批 | 2.4GHz 与 5GHz | 双频均可 | 600Mbps |
这张表里藏着一个很有意思的现象:802.11a 和 802.11b 几乎是同一时间制定的,a 的速率是 b 的五倍,可当年真正普及的是又慢又"土"的 b。原因不在于技术优劣,而在于频率。5GHz 频率高、波长短,绕过障碍物的能力弱,穿透一堵承重墙就衰减得厉害,覆盖同样面积需要更多接入点;而 2.4GHz 波长长,绕射和穿透都更好,早期的芯片也便宜。技术史上这种"好的输给合适的"案例不少,802.11a 算是典型的一个。
打个比方,频率就像嗓音:低频的声音浑厚,能穿过墙壁传到隔壁;高频的声音清亮,细节多,但一堵墙就挡住大半。所以 5GHz 更适合同一个房间内的高速传输,2.4GHz 更适合穿墙覆盖,这也是今天双频路由器同时保留两个频段的根本原因。
2.3 802.11n 的两个关键改进:信道捆绑与 MIMO
802.11n 之所以是一次质变,不只是因为它把速率数字拉高了,而是它在 MAC 层动了两个结构性的手脚。
第一个是信道捆绑。传输速率在很大程度上取决于信道有多宽,就像一条路能过多快的车,取决于车道有多少。802.11n 允许在传数据时把两个相邻信道合并成一个来用,这就是常说的 HT-40(high throughput,40MHz)。原本 20MHz 的车道变成 40MHz,速率直接接近翻倍。
第二个是 MIMO,多输入多输出。它让两对天线可以在同一时刻、同一个信道上传输不同的数据流,而彼此不互相干扰,靠的是 OFDM 这种特殊的调制技术把数据分散到多个子载波上。用类比说,原来的路一次只能跑一辆车,现在同一段路面上并排跑两辆,靠"车道线"区分开,而不是靠时间错开。
这两项改进都很好用,但也都有代价。信道捆绑要占用两倍的频谱,在本来就拥挤的 2.4GHz 上,你一开 40MHz,等于把大半条街都占了,别人只能挤剩下的一点点,结果是互相干扰、反复重传,实际速度可能还不如老老实实跑 20MHz。MIMO 则要求设备和路由器两边都有多根天线,单天线的小设备享受不到这份红利。理解了这层代价,你在路由器后台看到"20/40MHz 自动"这个选项时,就不会无脑选"越大越好"了。
3. 一堆缩写到底指什么:SSID、BSSID、AP、Station 与 BSS
3.1 AP 与 Station:一个负责开门,一个负责进屋
无线网络里的设备,最基本的分法是两类。AP 是接入点,Access Point 的缩写,它是那个"特殊节点",负责让其他设备连进来,也负责把内部和外部的流量接通。Station 是工作站,指的是连到无线网络里的终端设备——手机、笔记本、平板、智能音箱都算。
在家庭和小办公室里,AP 和无线路由器通常是同一台设备:对外有一个 WAN 口接宽带,对内既当路由器又当 AP。所以很多人会把"路由器"和"AP"混着叫,严格说路由器是三层设备,负责在不同网段之间转发;AP 是二层设备,负责无线接入。一台家用设备把两个角色塞在了一起而已。
基础结构型网络里,所有 Station 之间的通信都必须经过 AP。A 想给 B 发数据,实际路径是 Station A → AP → Station B,而不是 A 直接对着 B 喊。这一点是理解后面所有帧格式的关键:无线的"直接通信"在基础结构型网络里是不存在的。另一种组网叫 IBSS,也叫 Ad-Hoc,是 Station 直接对 Station 的临时组网,不需要 AP,日常几乎用不到,先放着不管。
3.2 SSID 与 BSSID:给人看的名牌和给机器看的门牌号
SSID 是一个无线网络的名字。你手机里搜到的那一串"某某家的 WiFi",就是 SSID。它的作用只有一个:标识一个子网,让设备在扫描时能认出来该连哪个。
BSSID 则是标识一个 BSS 的地址,格式和 MAC 地址一样,48 位。一般来说,它就是所在接入点的 MAC 地址。二者最本质的区别是受众:SSID 是给人看的,可以重复、可以有中文、可以起得很随意;BSSID 是给机器看的,全球唯一、不会重复。
SSID 允许重复,而且这种重复是有意为之。当你想把一个无线网络的范围扩大,可以给多个路由器设置同一个 SSID,手机在不同位置会自动切到信号更好的那台,这就是漫游的雏形。漫游的时候,SSID 保持不变,但 BSSID 一定会变——因为换了接入点,门牌号自然就换了。所以判断"我到底连的是哪台设备",看 BSSID;判断"我连的是哪个网络",看 SSID。
还有一层容易绕晕的关系:一个 BSSID 在不同信道上可能对应多个 SSID,但在同一个信道上是一一对应的。这通常出现在"多 SSID"的路由器上——同一台设备虚拟出"主人网络"和"访客网络"两个名字,共用同一个物理射频。
3.3 BSS 与 DS:一个接入点管不过来的事交给谁
BSS 是 Basic Service Set,基本服务集,由一组相互通信的工作站组成,是 802.11 网络的基本组件。你可以把它理解成"一个 AP 加上它管辖下的所有 Station"构成的一个小区。
DS 是分布式系统,Distributed System,属于 802.11 的逻辑组件,负责把帧转发到目的地址。它不是一个具体设备,而是一套机制。协议本身并没有规定它的技术细节,大多数商业产品用桥接引擎加上分布式系统媒介来共同构成它。所谓媒介,通常就是以太网——也就是那根把各个 AP 串起来的骨干网线。
打个比方,BSS 是一个个小区,AP 是小区门口的门卫,DS 则是连接各个小区的市政道路系统。你从 A 小区送个包裹到 B 小区,门卫不管跨区的事,得交给市政系统去跑。所以 DS 有三件事必须做到:一是有一条骨干网(比如以太网)当媒介;二是有桥接器,也就是同时具备有线和无线两个接口的接入点;三是接入点之间必须互相传递"我这边的 Station 有哪些"的信息。
第三条最容易被忽略。外部路由只知道 Station 的 MAC 地址,并不知道它躲在哪台 AP 后面,所以必须靠 DS 里的接入点互相通告关联信息,才能把包送到正确的位置。如果 AP 之间不同步这些信息,就会出现"包到了骨干网,却不知道该往哪个 AP 送"的尴尬,表现出来就是间歇性断流。
提示:DS 的媒介不一定是以太网,也可以用无线,也就是常说的 WDS 无线桥接。但无线做骨干会吃掉一半带宽,能不这么干就不这么干。
3.4 Associate 与 Beacon:连上之前到底发生了什么
一个 Station 想加入无线网络,核心动作叫 Associate,关联。但在关联之前,它得先知道有这么个网络存在,这就需要 Beacon 帧。
Beacon 帧由 AP 定时广播,作用是通知"我在这儿"。它除了携带 SSID,还带着省电策略、地区信息等参数。Station 扫描网络有两种方式:被动扫描就是干等着听 Beacon;主动扫描则是自己发 Probe Request 广播出去问"附近有谁",收到的一方回 Probe Response。你在手机上看到的WiFi 列表,基本就是这两种扫描的结果汇总。
扫描到了之后是认证,然后是关联。关联请求里会带上自己需要的信道、数据速率等状态,让 AP 判断要不要收它;关联是否成功,看响应里的 Status code 是不是 Success。
这里有一个历史遗留的坑:早期的 802.11 认证其实是"开放"的,等于不认证。所以抓包时会看到设备一上来就"通过验证"、"关联成功",然后才在后面用 802.1X 之类的协议做真正的身份校验,一旦校验失败,立刻把刚建立的关联断掉。这种"先上车后补票"的顺序,是为了兼容那些不懂新安全机制的老设备。看到这个现象不要以为抓错了包,它就是设计如此。
4. 路由器后台那些开关:Band、Channel、带宽与速率的真实含义
4.1 Band 与 Channel:先选马路,再选车道
Band 指的是频率范围,一般 AP 支持 2.4GHz 和 5GHz 两个频段。如果两个频段可以同时开启而不是互斥,这台设备就能同时建立两个无线网络,各跑各的频段。这个体验类似收音机:长波能收,短波也能收,两套节目并行不冲突。
Channel 是信道的概念,是把频段再往下切分。比如 5GHz 的频段整体有几百兆宽,会被划成若干小段,每一段就是一个 Channel。处于不同信道上、且覆盖范围不重叠的数据,彼此不会干扰。
信道这件事有国际规定。有些信道是免授权的,任何人都能直接用;有些是授权信道,不允许随便发射,否则会干扰该信道上其他业务。哪些信道免授权,各个国家地区的规定不一样,这也是路由器里那个 Region 参数存在的原因——它决定了设备可以用哪些信道、发射功率上限是多少。
除了 WiFi,微波炉、红外设备、蓝牙(走 802.15 协议)也都在 2.4GHz 附近工作。它们和 WiFi 用的不是同一套协议,所以互相把对方的信号识别成噪声,谁也不让谁。这就是为什么微波炉一开,旁边的 2.4G 网络就卡一下。
信道选项里常有个 Auto,意思是 AP 启动时自己扫描周围环境,挑一个干扰最小的信道,选定之后一般就不再变。Auto 挺省心,但它是"开机那一刻"的判断,周围环境后来变了它也不会跟着调整,所以多 AP 场景下还是手动规划更靠谱。
4.2 Channel Width:车道越宽越快,也越容易撞车
Channel Width 是信道宽度,常见取值有 20MHz、40MHz。它表示一个信道片段有多宽。
举个具体的例子会清楚很多。假设 5GHz 的频段总宽 100MHz,平均划成 10 个互不干扰的信道,那每个信道的宽度就是 10MHz(实际信道不一定完全不重叠,这里只是便于理解)。如果你选了 20MHz 的宽度,再选一个以 5.18GHz 为中心的信道,那么占用的就是它前面 10MHz 加后面 10MHz,合起来 20MHz 的频带范围。
这个参数不是随便哪个协议都有的。非 802.11n 的协议可能压根没有 40MHz 选项,因为把两个信道合并成一个正是 n 模式的特性之一。所以你在老设备上找不到这个开关,不是你眼花了。
宽度带来的取舍很直接:越宽越快,但也越容易和别人撞上。屋子里如果只有你一台 AP,40MHz 当然好;如果一层楼有七八台 AP,还全开 40MHz,那就是七八辆车挤在一条街上抢道。协议本身有协调机制,会让它们排队、错开,但排队本身就要花时间,性能不如一开始就别撞。
4.3 Data Rate 与 Throughput:标称 600M 为什么跑不到 600M
这两个词经常被混用,但它们是两回事。Data Rate 是理论最大数据传输速率,是协议在理想条件下算出来的数字,也就是包装盒上印的那个。Throughput 是实际最大吞吐量,是你真的拷文件、测速时看到的数字。
两者的差距来自各种开销:帧头、前导码、确认帧、竞争退避、重传、管理帧占用……每一项都不大,加起来就很可观。粗略的经验是,实际最大吞吐大约只有理论值的 50% 左右。所以一台标称 600Mbps 的 802.11n 设备,实测能跑到 300Mbps 就算合格。
这个比例可以帮你做容量估算。一条高清视频流需要的吞吐大约 30Mbps,普通网络视频大约 4Mbps。用理论值的一半去算能带多少路,比直接拿理论值除要靠谱得多。
设置传输速率时,不同协议(a/b/g/n)可选的范围不一样,而且这个速率是理论值,实际受干扰影响只会更低。所以"把速率锁死在最高档"这件事,在信号不好的时候反而会让体验更差——设备会反复尝试高调制方式然后失败重传,不如让它自动降档。
4.4 RTS/CTS 与分片:两个"减少翻车"的机制
先说 RTS/CTS。RTS 是 Request-To-Send,CTS 是 Clear-To-Send。它们要解决的是一个叫"隐藏节点"的问题。
设想 AP 覆盖范围的两端各有一台 Station,A 和 B。它们离得太远,互相听不到对方,但都能听到中间的 AP。A 想发数据,B 也想发数据,两边都以为自己独占信道,同时开口,结果在 AP 那里撞成一团。这种"互相看不见但会互相干扰"的节点,就叫隐藏节点。
RTS/CTS 的思路是把"我要说话"这件事提前喊出来。A 先广播一个 RTS 给 AP,说"我想发数据";所有能听到 A 的 Station 收到 RTS 后就知道有人要用信道了,先闭嘴;AP 收到 RTS 后广播一个 CTS,告诉覆盖范围内所有 Station(包括听不到 A 的 B)"接下来 A 要说话"。B 收到 CTS,虽然听不到 A,但也知道有人要占用信道,于是老实等着。撞车就避免了。
RTS Threshold 这个参数就是开关阈值:帧长超过这个值才走 RTS/CTS 流程。因为 RTS/CTS 本身也要占时间,小帧走这套流程得不偿失。阈值调低,保护更充分但开销更大;调高,开销小了但隐藏节点问题可能冒头。默认值通常是经过平衡的,没有明确的隐藏节点症状就不要动它。
再说分片,Fragmentation Threshold。它规定一个数据包超过多大就要被切开。切开的道理很简单:无线环境出错率高,一整个长包传错了要整包重传;切成小片之后,哪片坏了只重传哪片,成功率更高。代价是每片都要加头部、都要单独确认、接收端还要重组,开销随片数线性上涨。
这两个参数都属于"知道原理就好,别乱调"的类型。它们是为特定恶劣环境准备的工具,不是性能开关。
顺便说两个相邻的参数。Beacon Interval 是 AP 广播 SSID 的间隔,默认值就行,改小了浪费空中时间,改大了可能让设备扫描不到、莫名掉线。DTIM Interval 和省电有关:Station 休眠时 AP 帮它缓存数据,Station 每隔一段时间醒来问一次有没有自己的包。所以你去 ping 一台正在休眠的机器,响应时间会明显变长,这不是网络坏了,是它在睡觉。
5. 最容易混淆的几组概念:安全标准、帧类型与地址
5.1 WEP、WPA、WPA2 与 RC4、TKIP、AES:标准和算法不是一层东西
第一组易混,是把"安全协议的名字"和"加密算法的名字"当成同一层。它们其实是两层:WEP / WPA / WPA2 是协议套件,规定了认证怎么做、密钥怎么派生、用什么方式加密;RC4 / TKIP / AES 是底层的具体算法和封装方式。
之所以会混,是因为路由器后台把这两层混在一个下拉框里让你选,有时候写"WPA2",有时候写"WPA2+AES",有时候干脆只写"AES",看起来像是三选一,其实不是。
怎么区分?记住这条时间线。WEP 诞生于 1999 年 9 月,是 IEEE 802.11 标准的一部分,用的是 RC4 算法。它有几个结构性弱点,所以在 2003 年被 WPA 淘汰。WPA 是 Wi-Fi 联盟制定的商业化标准,目的是支持 IEEE 802.11i 这个技术标准;它采用 TKIP 算法,而 TKIP 保留了 RC4 的底子,所以弱点并没有彻底解决——当时更好的 CCMP 还没做完,只能先用 TKIP 顶着。2004 年,完整的 802.11i 落地,也就是 WPA2,采用 CCMP 加密协定,设备上常直接写 AES。所以结论很清楚:WPA2 + AES 是这三代里安全性最强的组合。
第二组易混,是 Enterprise 和 Personal。有些设备上写着 WPA-Enterprise / WPA2-Enterprise,以及 WPA-Personal / WPA2-Personal。Enterprise 就是标准的 WPA / WPA2,配合 802.1X/EAP 认证,需要一台专门的认证服务器;Personal 其实就是 WPA-PSK / WPA2-PSK,用预共享密钥(也就是你输的那个 WiFi 密码)来代替服务器认证。家用和小型办公选 Personal 就对了,没有服务器的情况下选 Enterprise 会直接连不上。
第三组易混最实际:WEP 和 802.11n 的关系。WEP 是旧加密方式,工作在 802.11b/g 模式下,802.11n 草案并不支持它。所以一台支持 n 的设备一旦开了 WEP,它会乖乖退回 b/g 模式跑,n 的性能完全发挥不出来。这是很多人"换了新路由器怎么还是那么慢"的血泪经验来源之一。
注意:个别设备的实现不完全按规范来,比如选了 WPA 还能再选 AES,看起来自相矛盾。这种时候以实际能连上、能跑满速为准,别死抠字面。
5.2 WiFi 和 3G/4G:都是无线,但不是一回事
第二组易混,是把"WiFi"和"3G/4G 移动数据"当成同一类东西,因为它们都能让你"不插线上网"。
混淆的原因很直观:手机右上角两个图标挨着放,关掉一个开另一个,效果看起来差不多。但它们从根上就不同。WiFi 属于 WLAN,也就是无线局域网,覆盖范围是几十米,设备是自己家的,用的是免授权频段,谁都可以架一台。3G/4G 属于蜂窝移动网络,覆盖范围是公里级,基站归运营商,用的是授权频段,个人不能私自架设。
区分它们有三个抓手。看覆盖:几十米内自己搭的是 WiFi,走到哪都有信号的是移动网络。看归属:WiFi 由你自己或场所提供,移动网络由运营商提供。看切换方式:移动网络靠基站之间的切换,你在车上打电话不断线就是这个机制;WiFi 靠漫游,SSID 不变而 BSSID 变,切换过程要重新关联,所以走过来的时候会有短暂的卡顿。
顺带一提,前面讲的很多机制——Beacon、关联、信道、RTS/CTS——都是 802.11 这套 WLAN 体系里的东西,别往蜂窝网络身上套,那是另一套完全不同的协议栈。
5.3 管理帧、控制帧、数据帧:ACK 为什么没有源地址
第三组易混,是 802.11 的三种帧类型。
管理帧负责"管理",比如 Beacon 帧通知网络存在、Association 帧负责关联。控制帧负责"协调",比如 RTS、CTS、ACK。数据帧是承载数据的载体,其中 DS 字段用来标识方向,非常关键。
最容易搞混的是 ACK。单播帧都需要 ACK 确认,ACK 本身是在 MAC 层以单播方式发出去的,帧里有接收地址字段,标明这是在确认谁。但它没有源地址,也没有序号。
为什么?因为发送和接收在 802.11 里被视为一个不可分割的整体:A 发了一帧给 B,B 回一个 ACK,这两件事合起来才算一次成功的通信。B 发 ACK 的时候,其他所有设备都知道信道正被占用,不会插话,所以根本不需要写明"这 ACK 是谁发的"——在场的都清楚。这种设计省掉了字段,也省掉了歧义。
另一个易混点是广播帧不需要 ACK。Probe 帧就是广播帧,所以它没有对应的 ACK 确认帧;对 Probe 的回复叫 Probe Response,是另一回事。判断一个帧是广播、组播还是单播,看目的 MAC 地址第一个字节的最低位:为 1 是组播,前两位都是 1 是广播,为 0 是单播。这里要留神,MAC 地址是一串位模式,不是一个数值,所以没有"哪个 MAC 更大"这种说法。
还有 DS 字段,两位组合起来大致是这么个含义:To DS=0、From DS=0,表示 Ad-Hoc 式的 Station 之间通信,或者管理帧、控制帧;To DS=0、From DS=1,是 Station 接收的帧;To DS=1、From DS=0,是 Station 发送的帧;两位都是 1,是无线桥接器上的数据帧。日常最常遇到的是中间两种,可以粗略把 DS 理解成 AP,To DS 就是"让 AP 干活"。但要注意 DS 本身是一个系统,不是某一台设备,从 Station 的角度去理解最不容易绕晕。
5.4 大端与小端、MAC 地址与 BSSID:为什么抓包里的地址总差几位
最后一组易混,也是最容易让人翻车的一组:字节序。
以太网和 802.11 在传输时都按 Little Endian 的方式走,也就是低位字节先传、高位字节后传。注意传输单位是字节,不是位。但在协议标准的文本里描述一个帧的整体格式时,画的往往是 b0、b1、b2……这样最低位在最前面的小端图;而具体解释某个字段的取值时,又改用大端方式写,比如"FLAG=4(即 0100)"。同一个字段,画图时是 0010,取值时是 0100,看着像自相矛盾,其实只是描述视角不同。
还有一层要分清:内存地址是用来标记字节的,位没有地址,所以内存里说大端小端,讲的是字节顺序,不是位顺序。一台小端机器存一个整数 1,在内存里从低地址到高地址依次是 01、00、00、00,低位字节放在低地址。
具体到 MAC 地址,判断单播还是组播,要看第一个字节的最低位。这一步用代码写出来最直观:
def mac_kind(mac: str) -> str: # 取第一个字节,例如 "a8" 转成十进制 168 first_byte = int(mac.split(":")[0], 16) # 字节内最低位(最右边那位)为 1 -> 组播;最低两位都为 1 -> 广播 # 注意:书写时最左边是高位,最右边才是我们要看的最低位 if first_byte & 0b11 == 0b11: return "广播" if first_byte & 0b01 == 0b01: return "组播" return "单播" print(mac_kind("a8:27:26:00:11:22")) # 单播 print(mac_kind("01:80:c2:00:00:00")) # 组播 print(mac_kind("ff:ff:ff:ff:ff:ff")) # 广播这段代码的关键在于first_byte & 0b01这一步:它只保留最低位,其余位全部屏蔽掉。以a8为例,二进制是 10101000,最右边那位是 0,所以是单播。很多人第一次看会盯着最左边的 1 发愣,那就是把书写顺序和传输顺序搞混了。
同一组的另一个坑是 AP 的 MAC 和 BSSID 对不上。抓包时你可能会发现,帧里那个 BSSID 和路由器机身上印的 MAC 只差最后几位,甚至完全不存在于任何标签上。这不奇怪:一台设备可能虚拟出多个 MAC 地址,用于 WAN、LAN、无线等不同接口;机身上通常只标注其中一个。所以看到两个几乎一样的 MAC,大概率是同一台设备;同一个地址上的帧序号是连续的,除非丢包导致重复或缺失。
6. 什么时候该翻这些知识,什么时候纯属折腾
这些内容真正派上用场的地方,其实很集中。
第一种场景是多台 AP 布点。一个会议室、一层办公室,装了三台以上的接入点,这时候信道规划就不是可选项了。做法有固定顺序:先定频段,2.4GHz 负责穿墙覆盖、5GHz 负责近距离高速;再定信道,2.4GHz 上只挑互不重叠的那几个,让相邻的 AP 错开;最后定带宽,2.4GHz 一律压到 20MHz,5GHz 视密度决定要不要开 40MHz 甚至更宽。顺序颠倒过来,先调带宽再选信道,基本等于白调。
第二种场景是排查"标称很快、实际很慢"。排查顺序也有讲究:先分清是 Data Rate 还是 Throughput 的问题,标称 600M 实测 300M 是正常的,不用修;再确认加密方式有没有把设备拖回旧模式,开了 WEP 的 n 设备只能跑 b/g;然后看信道干扰,周围十几台 AP 挤在同一信道,再好的设备也白搭;最后才怀疑硬件。
第三种场景是抓包定位连接失败。这时候前面那些帧类型和关联流程就值钱了:看扫描有没有扫到 Beacon、看认证阶段是不是"先通过后断开"、看关联响应的 Status code 是多少、看数据帧里的 dataprotected 位有没有置起来。有一步对不上,问题范围就缩小一大圈。至于专用嗅探硬件那类工具,价格不便宜,对 40MHz 宽信道的支持也一向不太好,非必要不用碰。
反过来说,什么时候别用?单台路由器、家里三五台设备的环境,默认设置就是最优解。RTS 阈值、分片阈值、Beacon 间隔这些参数,厂商给的默认值是针对海量场景平衡过的,你随手改一个,很可能改出自己都复现不了的问题。也别指望调这些参数能突破宽带本身的瓶颈——入户只有一百兆,路由器调出花来也还是那一百兆。
我自己踩过一次坑。某次在一个会议室里图省事,几台 AP 全设成 Auto 信道加 40MHz 带宽,觉得"自动的肯定最聪明"。结果一开视频会就卡,投屏也断断续续。后来老老实实把 2.4GHz 全部锁成 20MHz、手动错开信道,5GHz 才保留 40MHz,问题当场就没了。从那以后我每次布点都强制走一遍"先定频段、再定信道、最后定带宽"的顺序,再也不敢让 Auto 替我做决定。
这份资料把这些协议、术语、参数和帧结构整理在了一起,当成一本随时能翻的对照手册用,比自己一点点从英文文档里抠要省事得多。希望帮到你。
本文还有配套的精品资源,点击获取