丢包从哪来:一步步定位丢包发生在哪一段链路
丢包为什么比延迟更麻烦
延迟高只是慢,数据最终还是会到。丢包意味着数据直接消失,必须依赖上层协议重传。重传带来的延迟是不确定的,而且会连带影响后续数据包的发送节奏(拥塞窗口收缩),所以丢包对体验的影响往往是延迟的数倍。
更麻烦的是,丢包通常不是均匀分布的,而是集中在链路的某一段。找到这一段,问题就解决了一半。
用 traceroute 定位
traceroute(Windows 上是 tracert)会显示数据包到达目标所经过的每一台路由器,以及每一跳的响应时间。逐跳观察超时和延迟突增的位置,就能大致判断问题出在本地网络、运营商骨干还是国际出口。
注意一个常见误判:中间某跳显示超时,并不一定代表那里真的丢包。有些路由器被配置为不响应探测包,但正常转发流量没问题。要确认丢包,需要看从该跳之后的所有跳是否都持续出现丢包。
常见丢包场景与对策
无线链路丢包:集中在第一跳,伴随延迟抖动。对策是换有线或改善无线环境。
运营商线路拥塞:在晚高峰时段的特定跳数出现规律丢包。对策是切换加速节点绕开这段拥塞链路,这也是加速工具最擅长的场景。
对端服务器限流:只有最后一跳丢包,且换其他目标就正常。这种情况没有解法,只能接受。(示例数据,上线前请替换)