📚 第三章 数据链路
📄 一句话概括

咖啡馆的 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 秒实验

  1. 算一下:30 个人分 500M 出口,每人多少?再打对折呢?
  2. 想一下:为什么「一个人下 BT」会拖慢所有人?
  3. 在你手机上看一眼当前 WiFi 的「连接速率」是多少。

常见误区

  1. 以为「WiFi 慢就是宽带不够」。 还有一层空口效率,而且人越多掉得越多。
  2. 以为「连上了就该能用」。 登录页也走同一条空口,人多时它排在队尾。
  3. 以为「5 GHz 只是频率更高所以更快」。 它信道多、干扰少,人多时优势才明显。
自测三问(点开对答案) 1. 公共 WiFi 的「两层分」是哪两层? —— **出口带宽被人数分一次,空口效率再打一次折**,两层是相乘的关系。 2. 为什么空口要打对折? —— **无线是共享介质,同一时刻只有一个人在发**,再加上退避、帧间隔、确认,效率大约只有五成。 3. 「每用户限速」是为什么? —— **防止一个人占满空口**,用「单用户峰值变低」换「所有人体验变稳」。

下一节看卫星上网:延迟是算出来的。

相关笔记