一次“2.2秒SSL握手”的校园网“探案”:从账号差异到MTU迷局

道锋潜鳞
2025-10-30 / 0 评论 / 1 阅读 / 正在检测是否收录...

一次“2.2秒SSL握手”的校园网“探案”:从账号差异到MTU迷局

我的校园网(百兆带宽)访问任何 HTTPS 网站都像“便秘”一样,浏览器总要在“建立安全连接”时卡顿2-3秒,但一旦连上,下载速度又飞快。更诡异的是,我室友的账号在我的电脑上却快如闪电。这背后,竟然隐藏着一个关于路由策略、MAC地址和 MTU 的“精准惩罚”...

一、诡异的现象:2.2秒的SSL延迟

故事的开始很简单:我发现我的校园网(百兆带宽,锐捷 Web 认证)访问任何 HTTPS 网站时,浏览器都会卡顿几秒钟。而我室友的账号却快如闪电

最诡异的是,这不是网速慢——一旦连接建立(SSL握手完成),下载速度飞快,跑满百兆。这也不是丢包——看视频、打游戏都非常流畅。

这到底是怎么回事?一个2.2秒的延迟,就像一个幽灵,只在“握手”的那一刻出现。

二、初步调查:18ms的“完美误导”

作为一名有基本素养的网民,我祭出了第一个法宝:ping

Ping:一切正常得反常

我打开 PowerShell,输入了 ping www.baidu.com -n 20,结果如下:

PS C:\> ping www.baidu.com -n 20

正在 Ping www.a.shifen.com [157.148.69.186] 具有 32 字节的数据:
...
来自 157.148.69.186 的回复: 字节=32 时间=18ms TTL=51
...
157.148.69.186 的 Ping 统计信息:
    数据包: 已发送 = 20,已接收 = 20,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 18ms,最长 = 19ms,平均 = 18ms

平均 18ms!

这个结果让我陷入了沉思。18ms 的延迟(RTT)是极品中的极品,按理说 SSL 握手(2-3个 RTT)最多 60ms 就能搞定。

为什么 18ms 的 ping 延迟,会导致 2200ms 的 SSL 握手延迟?

结论只有一个:ping 使用的 ICMP 协议,和浏览器访问网页使用的 TCP 协议,走的不是一条路,或者说,它们被校园网的设备区别对待了。

三、锁定证据:F12 与 Wireshark 的“双重曝光”

ping 靠不住了,我转向了浏览器(问题的直接受害者)。

关键证据:F12 开发者工具

我按下 F12,打开“网络(Network)”面板,访问了B站。
结果触目惊心:

  • Initial Connection (初始连接): 2.24 秒
  • SSL (SSL握手): 2.22 秒

unnamed2.png

这说明,在真正开始加密(SSL)之前,光是建立 TCP 连接(三次握手)就已经被卡了 2.24 秒!

这几乎可以肯定是防火墙或**DPI(深度包检测)**设备在“审查”我的连接。为了抓住“现行”,我祭出了终极武器:Wireshark

决定性铁证:Wireshark 抓包

我刚开始抓包并访问网页,一个 ICMP 报文就跳了出来,它完美地解释了那 2.2 秒的延迟:

10.1.1.9 -\> 192.168.1.153 Destination unreachable (Fragmentation needed)

“目标不可达(需要分片)”!

unnamed (1).jpg

翻译一下就是:我的路由器(192.168.1.153)向校园网关(10.1.1.9)发送了一个数据包,但这个包太大了。网关拒绝了它,并回了条消息:“兄弟,你这包太大了,我这儿过不去,你得分成小块再发。”

我的路由器/电脑在收到这个“坏消息”后,就必须停下当前的握手,花时间去重新协商和计算一个新的、更小的包尺寸(这个过程叫 "Path MTU Discovery",路径MTU发现)。

这个“停下、协商、重试”的过程,就是那 2.2 秒延迟的来源!

四、最后的谜题:为什么换号/换设备就好了?

到这里,案情已经明了:MTU 不匹配

我的路由器(一台刷了 LEDE/OpenWrt 的设备)默认 MTU 是 1500,而校园网关(10.1.1.9)要求一个更小的值。

最大的谜题也随之而来:

  1. 为什么我朋友的账号,用我的路由器登录,就一切正常?
  2. 为什么我的账号,用手机直连WiFi,也一切正常?
  3. 为什么只有 [我的账号] + [我的路由器] 这个组合会出问题?

我进行了最后的 A/B 对比测试,真相大白:

  • [我的账号] + [我的路由器MAC] = SSL 延迟 2.2 秒
  • [朋友的账号] + [我的路由器MAC] = SSL 正常
  • [我的账号] + [手机MAC] = SSL 正常

结论已经不言而喻。

锁定元凶:锐捷的“精准惩罚”

校园网的锐捷(Ruijie)准入系统,它“拉黑”的不是我的账号,也不是我的路由器,而是 [我的账号] + [我的路由器MAC] 这个“组合”

锐捷系统通过路由策略,故意把这个“组合”的流量导向了那台有问题的、MTU 值很低的网关(10.1.1.9),以此作为一种(可能因为检测到路由器而施加的)“惩罚”或“限制”

而我朋友的账号、我的手机,都被分配了正常的、MTU 为 1500 的高速路由。

五、技术深潜:“惩罚路由”与MTU迷局

要理解这一切,我们必须认识网络通信中的几个关键“角色”:

角色1:MTU (最大传输单元)

  • MTU (Maximum Transmission Unit): 想象成“快递包裹的尺寸上限”。
  • 以太网(你的网线、路由器)的标准尺寸上限是 1500 字节。任何超过这个尺寸的包裹都必须被“拆包”。
  • 你的路由器默认以为它可以用 1500 字节的包裹发货。

角色2:PMTUD (路径MTU发现)

  • Path MTU Discovery: 这是一个“自动试探”机制。
  • 你的电脑很聪明,它不知道从你到百度服务器中间要经过多少个路由器,它只知道“我先按 1500 字节发,看看路上谁有意见”。
  • 为了实现这个“试探”,它会给所有发出的“大包裹”贴上一个标签...

角色3:DF 位 (不准分片)

  • DF (Don't Fragment) Bit: 这就是那个“标签”,意思是“不准拆我的包!
  • 你的电脑会给所有 TCP 包(比如 SSL 握手包)都贴上这个 DF 标签。
  • 这似乎很傻,为什么要“不准拆包”?这是为了配合 PMTUD。如果中间有哪个路由器觉得包太大了(比如它只支持 1492 字节),它就不能擅自拆包,而是必须把包丢弃,然后给你的电脑回一个“差评”...

角色4:ICMP “Fragmentation Needed” (需要分片)

  • ICMP (Type 3, Code 4): 这就是那个“差评”,也就是你在 Wireshark 里抓到的关键证据!
  • 这个“差评”的内容是:“你刚才那个包太大了,我给扔了。我这里的尺寸上限是 XXXX 字节,你自己拆好了再发!

“2.2秒延迟”的剧本重演

现在,我们把你所有的证据串起来,重演一遍“犯罪过程”:

  1. (0.00 秒) 初始连接: 你的浏览器(电脑)想和B站服务器建立 TCP 连接(即 F12 里的 Initial Connection)。
  2. (0.01 秒) 第一次尝试: 你的电脑发送了一个 TCP SYN 包。这个包很大(因为它想协商很多参数),并且贴着 DF(不准拆包)标签,它自信地以为路径 MTU 是 1500。
  3. (0.03 秒) 撞墙: 包裹到达了校园网的“惩罚路由” (10.1.1.9)。
  4. (0.03 秒) 收到“差评”: 这个网关发现包裹是 1500,但它只支持 1492。因为它看到了 DF 标签,所以它不能拆包,只能丢弃它,并回了一个 ICMP - Fragmentation needed 的“差评”。(这就是你 Wireshark 抓到的!
  5. (0.03 秒 \~ 2.20 秒) 陷入沉思: 你的电脑收到了“差评”,陷入了沉思。它知道了路径 MTU 不是 1500,但它可能因为各种原因(比如防火墙、系统设置)没有立刻处理这个“差评”,或者在等待一个“超时”。
  6. (2.24 秒) 协商超时: 浏览器等了 2.2 秒,发现 TCP 连接还没建立,它认为第一次尝试“超时失败”了。
  7. (2.25 秒) 第二次尝试: 浏览器(或操作系统)终于反应过来,用一个更小的包(或者已经接受了 1492 的新 MTU)重新发送了连接请求。
  8. (2.27 秒) 连接成功: 这次的小包裹成功通过了 10.1.1.9,B站服务器收到了,连接建立。
  9. (2.28 秒) SSL 握手: 开始 SSL 握手,但这个握手包同样很大,于是再次触发了上述的“撞墙 -\> 丢包 -\> 超时 -\> 重试” 的过程。
  10. (4.50 秒) 握手成功: 最终,SSL 握手也超时重试成功。

这就是你那两个 2.2 秒延迟的来源! 它本质上是一个“尝试-失败-超时-重试”的过程。

六、收网:两种方案,完美解决

既然知道了是 MTU 不匹配,那我们只需要“服从”它的规则就行了。

我用 ping 命令做了最后的测试,以找到那个“正确”的 MTU 值:
(原理:-f 是“不准分片”,-l 是包大小。1500 MTU = 1472 + 28 字节的包头)

# 测试 MTU 1500
PS C:\> ping www.baidu.com -f -l 1472
Packet needs to be fragmented but DF set.
# 果然,失败了!

# 测试 MTU 1492 (1492 - 28 = 1464)
PS C:\> ping www.baidu.com -f -l 1464
来自 157.148.69.186 的回复: 字节=1464 时间=19ms TTL=51
# 成功了!

这证明了那条“惩罚路由”的 MTU 上限就是 1492


方案一 (推荐):MAC 地址克隆 (“骗”过锐捷)

这是“上兵伐谋”。你没有去解决 MTU 问题,你解决了“提出问题的人”。

  1. 在 LEDE 路由器后台 -\> 网络 -\> 接口 -\> WAN口 (修改)
  2. 进入 “高级设置”
  3. 找到 Override MAC address (覆盖 MAC 地址)
  4. 填入你电脑网卡的 MAC 地址(在 CMD/PowerShell 中用 ipconfig /all 查看“物理地址”)。
  5. 保存并应用,然后重启路由器
  6. 重启后,用你的账号重新登录 Web 认证。你的延迟应该就消失了。
  7. 原理: 你让锐捷系统以为你是“另一台电脑”。锐捷查询策略,发现这个“新组合”没有黑历史,于是给你分配了正常的(MTU 1500)高速路由。

方案二 (我用的):修改 MTU = 1492 (“服从”锐捷)

这是“以正合”。你选择“服从”惩罚路由的规则。

完美解决:修改路由器 MTU

我登录了我的 LEDE 路由器后台(192.168.1.1):

  1. 导航到 网络(Network) -\> 接口(Interfaces)
  2. 找到我的 WAN 接口,点击 “修改(Edit)”
  3. 切换到 “高级设置 (Advanced Settings)” 标签页。
  4. 找到 Override MTU (覆盖 MTU) 这一行。
  5. 在输入框里填入 1492
  6. 点击 “保存并应用 (Save & Apply)”,并重启路由器。

重启后,再次用我的账号登录,打开网页—— 2.2 秒的延迟彻底消失,所有网站丝般顺滑!

七、结案陈词

结案陈词

这次排查的收获是:

  1. ping 没问题不代表 TCP 没问题。ping (ICMP) 包太小,很容易被“放行”,是网络测试中最具迷惑性的“好人卡”。
  2. 校园网(锐捷)的策略远比想象的复杂,它可以实现非常精准的“个性化限制”,甚至精确到 (账号 + MAC 地址) 的组合。
  3. Destination unreachable (Fragmentation needed) 是 MTU 问题的经典标志。
  4. 遇到诡异的网络问题时,F12WiresharkA/B交叉测试 永远是你的破案三神器。
0

评论 (0)

取消