页面能打开但 VPN 上传卡住:哪个原因胜出
与大小相关的卡顿既符合路径 MTU 故障,也符合 DNS、应用限制或隧道抖动。四项观察决定究竟是哪一个。
页面能打开,VPN 显示已连接,而文件上传每次都卡在同一个位置。有四种解释符合这一描述:数据包大小问题、名称解析问题、应用限制,以及不断重置的隧道。每一种都能通过不同的观察来确认或排除,所以关键在于选对测试,而不是猜测原因。
四个候选与一种形态
先看故障的形态,因为它能在打开任何工具之前排除掉大部分选项。在固定大小处卡住,在被证伪之前应视为大小问题。在随机位置卡住是丢包或稳定性问题。连接尚未建立就失败,是名称问题。
第四个候选是应用本身。上传上限、请求超时和代理的请求体大小上限都会造成失败,这些失败从浏览器看起来像网络故障,而且通常表现为拒绝,而不是挂起。
在测试任何东西之前,先把观察到的形态写下来。“每次都停在差不多的字节数,且隧道处于连接状态”比“上传不工作”是强得多的出发点。
然后测试时保持路径不变。同时更换出口、协议和服务器,得到的结果无法归因于其中任何一项。每次运行只改一个变量,并记录下来。
在改动策略之前先对半切分大小
最便宜的判别方法是只改变一个数字的探测。向目的地发送逐渐增大、禁止分片的 ping,再把你控制的文件上传到同一服务,然后比较两者各自停在哪里。
ping -M do -s 1472 203.0.113.9
curl -T ./probe.bin -o /dev/null -w '%{size_upload} %{time_total}
' https://example.net/upload第一条命令报告全尺寸数据包究竟能否通过路径。在 1500 字节的 MTU 下,不分片的最大 ICMP 载荷是 1472 字节,而隧道在内层数据包开始之前还要从这份预算里拿走更多。第二条给出应用层传输的大小和耗时,那才是真正重要的数字。
| Candidate | Observation that confirms it | Observation that rules it out |
|---|---|---|
| Path MTU or blocked ICMP feedback | Stall at a consistent size; large do-not-fragment probes fail | Small and large transfers both complete |
| Name resolution | The connection never opens for that name | The connection opens and then stalls mid-transfer |
| Application or proxy limit | A clean rejection at a documented size | No log entry on the server at all |
| Tunnel instability | Reconnects or rekeying during the transfer | The tunnel uptime is unchanged across the failure |
把两者放在一起读。探测在某个阈值之上失败,而上传停在同一阈值附近,这是一个自洽的故事。如果探测全部成功,上传却卡在路径显然能承载的字节数上,那指向应用或服务器,再怎么折腾 MTU 也不会改变。这个否定结果和肯定结果一样有价值。它砍掉了调查中最昂贵的一条分支。
接着检查传输期间的稳定性,因为在大文件上传中途重新协商密钥的隧道,会造成看起来与大小相关、实际并非如此的失败。读取运行时间是确认这一点最便宜的办法。
在修复与绕行之间做选择
如果证据指向大小,有两种诚实的应对和一种不诚实的。诚实的是允许必要的 ICMP 反馈以恢复路径 MTU 发现,或者钳制通告的段大小,让对端发送更小的段。不诚实的是把接口 MTU 改成从论坛抄来的值,却从不验证它改变了什么。
选择取决于你能控制什么。在你自己运营的网络上,允许 ICMP 报文是更干净的修法,因为它让该机制对每种协议都继续有效。在你无法控制的路径上,钳制是务实的选项,而且应当小范围应用,而不是整台服务器。
如果证据指向应用,就修应用或其代理配置。413 响应和挂起的连接是不同的失败,后者通常是包含自带限额的代理的链条中某处的超时。
无论哪种,都保留原始值,并在回滚后重新测试。与一次成功传输同时发生的改动,并不能证明是它导致成功;能够撤销,正是诊断与巧合的分界。
把结论记录下来,让它活过下一次故障
四个事实就够了:观察到的故障形态、探测结果、你做的改动,以及复测结果。有了这些,下一个人就能判断是同一个问题,还是症状相同的新问题。
也要记下路径背景,因为 MTU 的结论只对特定链路成立。一台在家正常、在酒店失败的笔记本电脑有两条路径,针对其中一条的修正对另一条什么也说明不了。
最后,别接受“VPN 弄坏了上传”这种总结。隧道在正常和失败的两种情形下都存在;真正改变的是路径必须承载的数据包大小,或者传输被中止的位置。点明真正的机制,这条记录才有用。