咖啡馆的 WiFi 慢,通常不是「宽带太小」,是「几十个人分一条空口」。 这里有两层「分」:出口被分一次,空口再被分一次,很多人只算了一层。
3.4 讲过 802.11 本身的效率问题,这一节把「人多」这个变量加进去。 3.7.6 的收敛比在这里又出现一次:公共 WiFi 就是「收敛比极大」的家宽。
一、第一层:出口被分
先把「出口带宽除人数」算一遍:
| 同时在线 | 出口 100M | 出口 1000M |
|---|---|---|
| 5 人 | 20.0 Mbps | 200.0 Mbps |
| 20 人 | 5.0 Mbps | 50.0 Mbps |
| 50 人 | 2.0 Mbps | 20.0 Mbps |
| 100 人 | 1.0 Mbps | 10.0 Mbps |
第三行 50 个人分 100M,每人 2 Mbps:这个数连「刷短视频」都不够(高清要 5 Mbps 以上)。 所以「咖啡馆 WiFi 卡」的第一层原因,就是出口太小加人太多。 第四行更明显:100 人分 100M,每人 1 Mbps。 这个速率连「打开一个带图的网页」都要等。 而店主往往觉得「我拉了 100M 宽带啊」——他没算「100M 是给大家分的」。
二、第二层:空口还要打对折
出口之外还有一层:无线本身的效率:
| 同时在线 | 理想均分 | 打对折后 |
|---|---|---|
| 5 人 | 200.0 Mbps | 100.0 Mbps |
| 20 人 | 50.0 Mbps | 25.0 Mbps |
| 50 人 | 20.0 Mbps | 10.0 Mbps |
| 100 人 | 10.0 Mbps | 5.0 Mbps |
第三列才是「实际体感」:50 个人时每人只有 10 Mbps,看视频够、传文件就等。 为什么打对折? 因为无线是共享介质,同一时刻只能有一个人在发(3.2.2 讲过的共享总线), 而且每次发送都要加退避、加帧间隔、加确认——3.4 算过,WiFi 的实际效率大约就是标称的一半。 这还没算上「一个人在下 BT,把整个空口占满」的情况。 所以公共 WiFi 的真实瓶颈常常是「一个行为不端的客户端」:它不停发大包,别人就得排队。 而无线没有「公平调度」这种机制——谁抢到算谁的,抢得凶的占便宜。
三、看不见的成本
还有一笔开销不体现在「速率」上,但体感最明显:
| 环节 | 走哪条路 | 后果 |
|---|---|---|
| Portal 登录页 | 也走同一条空口 | 请求排在队尾 |
| 短信验证码 | 要等移动网络 | 首连体验极差 |
| 每用户限速 | 路由器做策略 | 一个人拖不死全场 |
第一行是最常见的投诉: 「连上了但打不开登录页」——不是网断了,是登录页那个请求排在了几十个人的队尾。 所以稍微正规一点的场所都要做「登录页白名单 + 优先转发」。 第三行是解决办法:「每用户限速」不是舍不得带宽,是怕一个人把所有人拖死。 技术上叫「按客户端做流量整形」,家用路由器里的「设备限速」就是这个功能。 它的代价是「单用户峰值变低」,收益是「所有人的体验变稳」。 这套取舍和 3.6.5 的「需求优先」是一回事:共享介质上,只要不做调度,就一定有人吃亏。 做的调度越细,体验越均匀,但开销也越大。
四、动手 Demo:公共 WiFi 为什么总是慢
把「出口除人数」和「空口打对折」两层分开算。 注意 50 人那一行:千兆出口也只落到 10 Mbps。
for users in (5, 20, 50, 100):
print('%3d 人:出口 100M 每人 %5.1f,出口 1000M 每人 %6.1f'
% (users, 100.0 / users, 1000.0 / users))
print('空口效率按五成折算:')
for users in (5, 20, 50, 100):
print('%3d 人(千兆出口):理想 %6.1f,打对折 %6.1f'
% (users, 1000.0 / users, 500.0 / users))
实跑输出:
--------------------------------------------------------------------
公共 WiFi 为什么总是慢
--------------------------------------------------------------------
**咖啡馆的 WiFi 慢,通常不是「宽带太小」,是「几十个人分一条空口」。**
**这里有两层「分」,很多人只算了一层。**
**第一层:出口带宽被分**
同时在线人数 出口 100M 时每人 Mbps 出口 1000M 时每人 Mbps
------------------------------------------------------------------
5 20.0 200.0
20 5.0 50.0
50 2.0 20.0
100 1.0 10.0
**第二层:空口本身还要打对折**
人数(千兆出口) 理想均分 Mbps 再打对折后 Mbps
-------------------------------------------------------
5 200.0 100.0
20 50.0 25.0
50 20.0 10.0
100 10.0 5.0
**第三列才是「实际体感」**:**50 个人时每人只有 10 Mbps,看视频够、传文件就等了。**
**而这还没算上「一个人在下 BT,把整个空口占满」的情况。**
**所以公共 WiFi 的真实瓶颈常常是「一个行为不端的客户端」**:**它不停发大包,别人就得排队。**
**这也是为什么稍微正规一点的场所都要做「每用户限速」**——
**不是舍不得带宽,是怕一个人把所有人拖死。**
**还有一个「看不见的成本」**:**人一多,认证(Portal 页面、短信验证)也要走同一条空口**,
**于是「连上了但打不开登录页」成了最常见的投诉**——**不是网断了,是登录页那个请求排在了队尾。**
「空口效率五成」是个经验值,不是常数:3.4 算过一帧 WiFi 的时间构成,效率大约 47.6%。 人越多、包越小,效率还会更低(每次发送的固定开销摊不薄)。 所以「打对折」是乐观估计,人多的时候实际可能只剩三成。 「5 GHz 比 2.4 GHz 快」这件事,在人多的场合更明显: 2.4 GHz 只有 3 个不重叠信道,几十个人挤在那几条上;5 GHz 有十几个,可以分给不同的 AP。 所以「同一个地方 5G 更快」不是频段本身快,是「信道多、人分得开」。 还有一个「设备端」的因素:老手机只支持 2.4 GHz,而且 802.11n 的单流速率只有 72 Mbps。 所以「同一个 AP,别人的手机快、我的慢」很可能是「终端能力不同」。 排障时先看「这台设备的协商速率」,再看 AP。
30 秒实验
- 算一下:30 个人分 500M 出口,每人多少?再打对折呢?
- 想一下:为什么「一个人下 BT」会拖慢所有人?
- 在你手机上看一眼当前 WiFi 的「连接速率」是多少。
常见误区
- 以为「WiFi 慢就是宽带不够」。 还有一层空口效率,而且人越多掉得越多。
- 以为「连上了就该能用」。 登录页也走同一条空口,人多时它排在队尾。
- 以为「5 GHz 只是频率更高所以更快」。 它信道多、干扰少,人多时优势才明显。
自测三问(点开对答案)
1. 公共 WiFi 的「两层分」是哪两层? —— **出口带宽被人数分一次,空口效率再打一次折**,两层是相乘的关系。 2. 为什么空口要打对折? —— **无线是共享介质,同一时刻只有一个人在发**,再加上退避、帧间隔、确认,效率大约只有五成。 3. 「每用户限速」是为什么? —— **防止一个人占满空口**,用「单用户峰值变低」换「所有人体验变稳」。下一节看卫星上网:延迟是算出来的。
- ☐ (本节完,下一节 3.7.9 其他公共无线通信服务)