LabHub
学习 学习路径 课程

网络排障

ping 通了,服务也可能不通

在 LabHub 中继续学习

一句话总结

ping只证明了到达IP层的可达性。它甚至不能证明上面端口、上面应用程序,甚至大型数据包是否可以通过。

概念图: 到达 · IP层 · 正常状态 · ping 失败也可能不会影响服务。

为什么需要这个?

“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响应。判断规则是这样的。

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怎么样,制成表格。