ping 通了,服务也可能不通
一句话总结
ping只证明了到达到IP层的可达性。它甚至不能证明上面端口、上面应用程序,甚至大型数据包是否可以通过。
为什么需要这个?
“ping可以,但无法连接”不是矛盾,而是正常状态。ping只是交换ICMP echo。TCP 8080是否打开是完全不同的问题,即使该端口打开,应用程序也可以输出5xx。
相反的方向也很重要。**ping 失败也可能不会影响服务。**因为很多组织都会阻止 ICMP echo。所以判断“ping 失败了,服务器死了”是很危险的。
怎么行动
这三个工具的作用不同。
| 工具 | 看什么 | 在这个环境中的注意事项 |
|---|---|---|
ping |
是否可以从IP到目的地往返 | 运行(允许ping_group_range) |
traceroute |
能走多远 | 仅限UDP模式 运行(ICMP模式需要raw socket) |
mtr |
持续观察跳变损失率和延迟 | --udp必要 |
traceroute的原理是将TTL从1开始递增发送。TTL变成0的点的路由器会返回ICMP time exceeded,那个出发地地址就是那个跳转的身份。所以traceroute不是“查询路径”,而是“故意失败收集响应”的工具。
*** * *不是障碍。**只是那个跳转的路由器没有限制或生成ICMP响应。判断规则是这样的。
- 只有在中间跳转处才会看到损失,如果在最终目的地没有损失,那么ICMP rate limiting的可能性很高。
- 如果从特定啤酒花开始延迟急剧增加,那么那个部分就是瓶颈。
- 如果最后几跳中损失增加的话,很有可能就是实际问题。
ping忽略的东西:路径MTU
最恶劣的案例是MTU黑洞。ping的基本数据包是56字节,总是通过。但是,响应稍微变大的API就停止了。这不是错误,只是停止了。因为只有超出临界值大小的数据包才会消失,所以症状取决于大小。
确认是通过设置禁止碎片化的比特的ping进行。
ping -M do -s 1472 -c 1 10.20.0.5
# From 10.0.1.1 icmp_seq=1 Frag needed and DF set (mtu = 1420)
-s价格加上28(ICMP 8 + IP 20)就是实际的MTU。通过二分查找找到通过最大值,就会得到路径MTU。
使用隧道的话,实际MTU减少到同等于头顶的程度。
| 胶囊化 | 追加头衔 | 实际MTU | 推荐MSS钳子 |
|---|---|---|---|
| PPPoE | 8 | 1492 | 1452 |
| GRE | 24 | 1476 | 1436 |
| VXLAN (IPv4) | 50 | 1450 | 1410 |
| WireGuard (IPv4) | 60 | 1440 | 1400 |
| IPsec ESP + NAT-T | 约81 | 1419 | 1379 |
在现场相遇的样子
**“打开VPN后只有特定网站无法打开。”**由于隧道占用率降低了实际MTU,但没有MSS阈值的典型情况。小页面打开,大页面停止。ping100%成功。
**在云端全部阻止ICMP并运行traceroute时。**全部* * *很容易得出结论是“路径中断了”。这时,TCP模式traceroute(-T -p 443)我nc -zv直接敲击目标端口比较准确。
在哪里睡觉改变了答案
用同样的工具重新重新对同一对象,根据在哪里看到的不同,结论也会不同。这个 如果不注意的话,就会在不同的地方摆出不同的价格进行争论。
我在笔记本电脑上测量的值不是我们服务的值。办公室线路、VPN、家 共享器全部堵在路径上。与用户经历的不一样,服务器之间的 和通信也不一样。所以在和问题发生的地方一样的位置睡觉**是第一原则, 不能做到的时候,将测量的位置一起写在结果上。
**只在一边再面就是一半。**就像在前一个赛道上看到的那样,有直走的路,但回来的
没有路的情况很常见,当时从一边看到的traceroute看起来是正常的。
从两边向对方看时,不对称就会显现出来。
**路线每次都不一样。**在有多个路线的区间,每条流线都会走不同的路。
去,所以traceroute转两圈的话,啤酒花会出不同的样子。损失是确定的
只出现在流动的问题一次测量无法捕捉到。
**测量本身会产生负载。**在已经饱和的链接上mtr加上的话,那个就会
增加损失。而且正如在前一个赛道上所说,在已经生病的系统中,诊断命令
培养障碍实际上会发生。
最后**写下最后一次使用的时间。**网络问题随着时间而出现。 因为会消失,所以没有视力的测量值几天后就没有任何依据了。正常时的 提前重新计算价格也是出于同样的原因,所以价格很高。如果没有可比的东西,现在的价格是 无法判断是否是坏的。
下次实习要做的事情
确认接口和路由,在ping统计中读取丢失率和RTT,运行UDP模式traceroute和mtr。最后直接比较ICMP和TCP怎么样,制成表格。