公众号旧文
Ping 丢包超过 5%,线路就一定垃圾吗?
最近看到有人分享自己的买机标准:

乍一看,这个标准似乎很合理。
毕竟,谁都不希望自己买到一台经常丢包的 VPS。
但是,如果丢包指的是 Ping丢包,那么这个判断并不严谨。
甚至有时候,会误杀一台本来网络质量不错的机器。
很多人都会这样测试 VPS:
ping 目标IP
然后看到:
100 packets transmitted
95 received
5% packet loss
于是得出结论:这线路垃圾,不买。
问题就在这里。
Ping 使用的是 ICMP 协议,而绝大多数业务使用的是 TCP。
例如:
- SSH
- HTTP
- HTTPS
- 下载
- Git
- Docker
- 数据库
它们全部都是 TCP。
但 ICMP 和 TCP 并不是同一个协议。
一、ICMP 丢包,不等于 TCP 丢包
很多运营商、云厂商都会对 ICMP 做限速(Rate Limit)。
因为 Ping 对业务没有实际价值,却可能被用于扫描、探测或者攻击。
因此很多设备都会这样处理:
TCP 包
↓↓↓↓↓↓↓↓↓↓↓↓↓↓
全部正常转发
ICMP 包
↓↓↓↓↓↓↓↓↓↓↓↓↓↓
超过一定数量开始丢弃
于是你看到:
Ping
5% Loss
但是与此同时:
SSH 正常
HTTP 正常
下载 正常
甚至:
iperf3
Retrans = 0
TCP 根本没有发生重传。
二、真正影响体验的是 TCP 重传
TCP 有一个特点:
如果数据包真的丢了,它一定会重传。
例如:
客户端
│
DATA│─────────────X
│
服务器
数据包丢失以后,服务器收不到。
客户端一直等不到 ACK。
于是:
TCP Retransmission
开始重发数据。
真正影响下载速度、网页打开速度、SSH 卡顿的,不是 Ping,而是:
TCP 重传。
三、举两个例子
第一种情况
Ping
5% Loss
↓
iperf3
Retrans = 0
↓
SSH 正常
↓
下载满速
这种机器能买吗?
我认为完全可以买。
因为 Ping 丢的是 ICMP。
真正的 TCP 根本没问题。
第二种情况
Ping
5% Loss
↓
iperf3
Retrans 很多
↓
SSH 卡顿
↓
下载掉速
这种机器能买吗?
我认为最好不要。
因为这说明真正的 TCP 数据包已经开始丢失。
四、还有一种情况
Ping
0% Loss
但是:
iperf3
Retrans
200+
为什么?
因为 Ping 只是 ICMP。
TCP 数据包和 ACK 包仍然可能发生丢失。
所以 Ping 不丢,也不代表 TCP 没问题。
五、买 VPS,到底应该看什么?
如果让我评价一台机器,我不会只看 Ping。
我更愿意看下面几项:
- Ping(ICMP)
- MTR(看丢包发生在哪一跳)
- iperf3(实际吞吐)
- TCP Retrans(是否大量重传)
- 下载速度是否稳定
- SSH 是否流畅
只有这些指标结合起来,才能真正反映线路质量。
六、一个更合理的标准
很多人把 Ping 丢包 > 5%
直接等同于线路垃圾。
中间少了一步。
真正应该问的是:这个 Ping 丢包,有没有导致 TCP 重传?
如果没有。
那它很可能只是:
- ICMP 被限速
- ICMP 优先级较低
- 路由器主动丢弃 Echo Request 或 Echo Reply
这种情况下,对实际业务几乎没有影响。
如果导致了大量 TCP 重传。
那这条线路才真正值得警惕。
最后
Ping 是一个很好的网络探测工具,但它不是线路质量的最终裁判。
对于一台 VPS 来说:
- Ping 丢包,只能说明 ICMP 没有全部收到。
- TCP 重传,才能说明真正的数据传输受到了影响。
所以,与其问 Ping 丢了几个包?
不如再多问一句 TCP 有没有重传?
很多时候,这个问题比前一个更能说明一条线路到底好不好。