首页 / 云服务器

VPS ping 不通怎么排查:双源实测拆开 ICMP 层

阅读 10

封面:ICMP 层与 TCP/TLS 层的双源对照

VPS ping 不通怎么排查,先别急着重启机器。上周有张工单:网站能打开,后台也能登,ping 却全红,20 个包一个没回,提单人怀疑 IP 被封,问要不要换机房。VPS ping 不通怎么排查,多半不是宕机,而是 ICMP 被单独丢掉了,网站走的 TCP/TLS 没受影响。把两个中国大陆不同运营商出口对同一批公开目标的真实读数摊开,这件事就看得很清楚。

ping 不通,先别急着重启机器

VPS ping 不通怎么排查,动作其实很短:先确认是不是只有 ICMP 这一层没回,再决定要不要往下查。ping 不通给人的第一反应常是机器没了,可 ICMP Echo 只是网络里最容易被单独关掉的一种报文,把它和网站访问划等号,是这类工单里最常见的拐错弯。看到 ping 不通就重启、就提工单换 IP,往往白忙一轮。

直接答案放这里:ping 不通不等于宕机,ping 通也不等于网站能开,两者测的不是同一件事。后面每一节都拿两个出口的真实读数把这句话拆开。

只处理 ICMP 这一层,端口是另一回事

ping 不通归 ICMP 这一层管。TCP 端口不通是另一码事,安全组、系统防火墙、服务有没有监听、上游有没有拦,那一套拆法在 端口不通怎么排查 里已经按四层写过,这里不重复。两篇标题都带不通怎么排查,但一个查 Echo 回显,一个查端口握手,命令别混着用。ping 不通的时候先跑 ping,端口不通的时候先跑端口探测,第一步就不一样。

看到这里如果只是想挑台机器,可以先去 选机器前先学会看网络这一层 翻翻按层归过的实测记录,心里有个底再回来敲命令,比一上来就换 IP 省事。

先分层:ping 不通测的是 ICMP,网站走 TCP/TLS

VPS ping 不通怎么排查,绕不开一件事:ping 和网站根本不在同一层。把协议分层摆清楚,后面那些反常的读数才不会看拧。

ping 到底测了什么

ping 发的是 ICMP Echo Request,对端愿意回就回一个 Echo Reply,这一来一回拿到一个耗时。它不建 TCP 连接,不做 TLS 握手,不取网页内容。很多主机、很多中间设备会把 ICMP 单独限速或者直接不回,业务端口照常开着。所以 ping 不通只能说明这一来一回没成,说明不了网站能不能开,也说明不了机器还在不在。反过来,ping 通只证明 Echo 有人回,跟 443 端口有没有人应答、证书能不能验过、页面吐不吐得出来,一点关系都没有。

网站打开要过哪几段

网站这一侧要过好几段:域名解析到 IP、TCP 建连、TLS 握手、等到首字节、把响应收完。curl 用 -w 能把这几个累计时间点一次打出来,变量怎么写可以翻 curl 官方手册 和 writeout 变量清单。DNS 段怎么拆见 DNS 解析慢怎么排查,握手与首字节那几段见 网站打开慢按五段拆。ping 不通的时候,这几段可能一段都没受影响。

表 1 把两个出口对三个公开 HTTPS 目标的 curl -w 读数摊开,单位是秒,code 是 HTTP 状态码,全丢或没建连的行不往里塞。

表 1 curl -w 五段累计计时双源读数(秒)

目标 探测源 code dns tcp tls ttfb total
www.baidu.com 广东 cn-probe-1 200 0.000916 0.031019 0.159992 0.191253 0.191487
www.baidu.com 北京 cn-probe-2 200 0.004000 0.007000 0.099000 0.103000 0.103000
www.tkvps.com 广东 cn-probe-1 200 0.064946 0.067900 0.181362 0.198438 0.368767
www.tkvps.com 北京 cn-probe-2 200 0.509000 0.547000 0.704000 0.788000 0.985000
ipinfo.io 广东 cn-probe-1 200 0.031562 0.282145 0.543769 0.909062 0.909299

curl 五段计时的双源读数

要留意这几列是 curl -w 打出来的累计时间点,从请求发起算起,一路只增不减。相邻两列相减才是各段净耗时,把 time_starttransfer 直接当成首字节耗时、把 time_total 当成传输耗时,都是常见的读错法。ping 不通的场合拿这张表看服务还在不在,比盯着一个 Echo 有用得多。看 www.baidu.com 广东那行,dns 0.000916、tcp 0.031019、tls 0.159992、ttfb 0.191253、total 0.191487,code 200;北京那行 dns 0.004000、tcp 0.007000、tls 0.099000、ttfb 0.103000、total 0.103000,也是 200。再看 www.tkvps.com,广东 tls 0.181362、total 0.368767,北京 tls 0.704000、total 0.985000,同一个域名两源在握手这一格的累计读数差得很明显。ipinfo.io 广东那行 total 0.909299,code 仍是 200,后面还会用到。

双源实测:ping 不通的那个 IP,服务照常

VPS ping 不通怎么排查,最好用一组能把两层同时照出来的数据。选的是 114.114.114.114,两个中国大陆不同运营商出口、同一批 20 包、同一条命令。

表 2 是这次 20 包 ICMP 的双源全表,发 20 包,丢包列写百分比,avg 列写平均回显耗时,全丢的格子照实写未取得。

表 2 两台探测源 20 包 ICMP 双源读数

目标 广东电信 cn-probe-1 丢包 / avg ms 北京阿里云 cn-probe-2 丢包 / avg ms
114.114.114.114 100.0% / 未取得 100.0% / 未取得
223.5.5.5 0.0% / 4.792 0.0% / 2.394
119.29.29.29 0.0% / 9.740 0.0% / 6.731
1.1.1.1 0.0% / 52.181 0.0% / 202.057
8.8.8.8 0.0% / 161.265 0.0% / 176.003
www.baidu.com 0.0% / 27.140 0.0% / 2.653
www.tkvps.com 0.0% / 1.907 0.0% / 38.901
ipinfo.io 15.0% / 251.729 0.0% / 193.478
hnd-jp-ping.vultr.com 0.0% / 234.123 5.0% / 110.333
lax-ca-us-ping.vultr.com 0.0% / 274.475 0.0% / 168.654
one.one.one.one 0.0% / 51.996 100.0% / 未取得
lg-lin1.justhost.asia 100.0% / 未取得 100.0% / 未取得

广东电信与北京阿里云 20 包 ICMP 原始读数

114.114.114.114:两台源都 100% 丢包

两台源对 114.114.114.114 都是 20 发 0 收、100.0% 丢包,输出里没有 rtt 那一行,min、avg、mdev、max 四格全是未取得。这里写清楚:未取得延迟,未做任何估算。不拿 223.5.5.5 的 4.792 或 2.394 去反推它的延迟,也不写大概几百毫秒这类没影的数。ping 不通到 100.0% 丢包,能记的只有这一个出口这一刻没收到 Echo Reply。

同一个 IP 仍能解析域名

同一个 114.114.114.114,广东这台源用 53 端口问了一次 www.baidu.com,拿到了完整应答。下面是从原始回显里逐字节选的几行。

Server:     114.114.114.114
Address:    114.114.114.114#53

Non-authoritative answer:
www.baidu.com   canonical name = www.a.shifen.com.
Name:   www.a.shifen.com
Address: 180.101.51.73
Name:   www.a.shifen.com
Address: 180.101.49.44

Server 和 Address 都指向 114.114.114.114 的 53 端口,www.baidu.com 先转到 www.a.shifen.com,再给出 A 记录 180.101.51.73 与 180.101.49.44。有人把 114.114.114.114 填进 resolver,顺手 ping 了一下,看到 ping 不通就以为 DNS 配错了,回头改了半天配置。其实解析一直正常,ICMP 全丢和 53 端口能答是两件事,114DNS 丢包照样解析那篇 的标题早就埋过这个伏笔。北京这台源没装 nslookup,DNS 侧就以广东这台的应答为准,不替它补一段解析结果。

对照组 223.5.5.5:ICMP 通、有 RTT

对照组挑 223.5.5.5:广东 20 发 20 收、0.0% 丢包、avg 4.792 ms,北京 20 发 20 收、0.0% 丢包、avg 2.394 ms。同一个出口,一个目标 ping 不通、一个目标有回显,说明这台源本身会不会发 ICMP、命令对不对都没问题。ping 不通的那个目标只是不回 Echo,不是这台源坏了。看到这里可以顺手去 换个出口复测差多少 对照一下同类记录,延迟怎么测才准 那篇把回显耗时的读法写得更细。

两个源的标签写死,方便逐条回溯。cn-probe-1 是 103.39.226.31,中国广东电信 AS4816 单线,采样 2026-11-15 09:21:36 CST;cn-probe-2 是 8.140.30.240,中国北京阿里云 AS37963 BGP 多线,采样 2026-11-15 09:24:54 CST。两台都在中国大陆,命令统一 ping -c 20 -i 0.2 -W 2,curl 走 curl -4 -s -o /dev/null -w 五段变量、带 --max-time 12。表 1 表 2 里每个数都能在这两个时间点、这两台源上逐条对上,别把它读成更多出口的结论。

换个出口,快慢会翻过来

VPS ping 不通怎么排查,还有一格最容易被忽略:同一个目标换个出口,读数会整个翻过来。表 2 横着读就能看到。

1.1.1.1 广东 avg 52.181 ms,北京 avg 202.057 ms,差 149.876 ms,北京这一侧明显偏大。8.8.8.8 反过来更接近,广东 161.265 ms、北京 176.003 ms。www.tkvps.com 差得更开,广东 1.907 ms,北京 38.901 ms。Vultr 东京的 hnd-jp-ping.vultr.com 是另一个方向:广东 234.123 ms,北京 110.333 ms,这一回广东偏大,而且北京这一源 20 发 19 收、5.0% 丢包。同一个目标,广东快还是北京快,没有统一答案。ping 不通也一样,one.one.one.one 广东 0.0% 丢包、北京 100.0% 丢包,换个出口结论就反了。只看一个出口就下判断,很容易把出口差异当成目标的问题。去程路由怎么查 里按路径拆过这一类差异。

逐跳看丢在哪:tracepath -n 怎么读

VPS ping 不通怎么排查,光看终点丢不丢还不够,逐跳能看出回显停在哪一段。tracepath -n 这两个出口都能跑,下面贴的是原始行,不补跳数、不猜中间设备是谁。

 1?: [LOCALHOST]                      pmtu 1500
 1:  192.168.247.30                                       13.722ms
 1:  192.168.247.30                                        3.418ms
 2:  no reply
 3:  no reply
 4:  103.45.0.53                                           2.053ms
 5:  no reply
 6:  no reply
 7:  219.133.32.133                                        2.610ms
 8:  119.147.223.157                                       5.013ms
 9:  no reply
10:  202.102.69.50                                        27.964ms
11:  no reply
12:  58.217.192.202                                       29.908ms
13:  no reply
14:  no reply
15:  no reply
16:  no reply
17:  no reply
18:  no reply
19:  no reply
20:  no reply
     Too many hops: pmtu 1500
     Resume: pmtu 1500

广东这台对 114.114.114.114,头几跳有回显,4 跳 103.45.0.53 是 2.053ms,10 跳 202.102.69.50 跳到 27.964ms,12 跳 58.217.192.202 是 29.908ms,从 13 跳起一路 no reply 到 20 跳,末尾 Too many hops: pmtu 1500。北京那台对同一目标,5 跳 10.216.130.94 是 30.333ms,7 跳 183.207.67.109 是 22.798ms asymm 6,10 跳之后同样全是 no reply,也是 Too many hops: pmtu 1500。20 跳上限内没走到终点,逐跳回显里这种孤立偏大的单点,多见于中间设备对 ICMP 限速排队,不能拿它判定那一跳拥塞,更不能拿它给目标补一个延迟。ping 不通到全丢包时,逐跳没回显的那一段同样未取得延迟,未做任何估算。分片与 MTU 该在哪一步核对,见 MTU 检查那一篇。

两个反例:ping 通照样打不开,ping 不通照样服务在

VPS ping 不通怎么排查,还有两个反例得摆上来,它们把通和能打开彻底拆开。

反例 A:one.one.one.one

表 2 里 one.one.one.one 广东 0.0% 丢包、avg 51.996 ms,按 ping 的标准算通得很正常;北京 100.0% 丢包,算 ping 不通。可两台源对它的 HTTPS 请求都是 code=000:广东这台 dns 0.031350,tcp、tls、ttfb 全是 0.000000,total 卡在 12.002542;北京这台 dns 0.012000,total 8.010000,remote_ip 解析到 1.1.1.1 也没建成连接。广东这边 ping 通,网站照样打不开。ping 通不等于网站能打开,这一组是最直接的证据。

反例 B:ipinfo.io

ipinfo.io 广东 15.0% 丢包、avg 251.729 ms,20 发只收回 17 个,按很多人的习惯已经该判链路不行了。可同一台源对它的 HTTPS 请求 code=200,dns 0.031562、tcp 0.282145、tls 0.543769、ttfb 0.909062、total 0.909299 s,一次页面事务完整跑完。部分丢包不等于服务不可用。ping 不通或者丢一部分包,跟业务能不能用,中间还隔着好几层。

什么时候 ping 不通是真的坏了

VPS ping 不通怎么排查,真正要警惕的是 ICMP 和 HTTPS 同时没回响的那种。单看 ping 全丢就慌,往往慌早了。

反例 C:lg-lin1.justhost.asia

lg-lin1.justhost.asia 是商家官方的 LG 域名,两台源对它都是 20 发 0 收、100.0% 丢包,HTTPS 也都是 code=000,广东 total 12.001843、北京 total 12.000000,后者 remote_ip 还解析到了 132.243.255.166 却没建成连接。从这两个出口看过去,这个域名既没有 ICMP 回显,也没有一次成功的 HTTPS 事务。能写的就到这一句为止:这是本次实测里两个出口的读数,不能据此说机房出了故障,也不能说这家服务整体不可用。

我第一次拉到这组数,差点照着两源全红去给商家提工单,说它 LG 挂了。回头看才明白,官方 LG 域名禁掉 ICMP 是常见做法,两个出口既 ping 不通、又拿不到 200,只能说明这两个出口到这个域名这一段没通,撑不起机房层面的判断。

改用 TCP 端口验证

ping 不通的时候换个层验证更实在:直接对业务端口建连,或者跑一次带状态码的 curl,看的是真正承载业务的那条路通不通。ICMP 被安全组或系统防火墙单独丢掉,是很多机器的默认状态,不影响网站、不影响 SSH。安全组要放行什么、端口那套怎么拆,归 四层拦截那篇的用法。真要按商家核对 LG 入口和 ICMP 策略,按商家查 LG 与安全组策略 里按家归过,比对着一次 ping 全红猜省事。

一步到位的 ping 不通排查顺序

VPS ping 不通怎么排查,把上面的动作串成一条顺序,照着走一遍基本能定位到层。

表 3 把每一步的命令、正常长什么样、异常该往哪一层走列在一起,编号只是顺序,不是重要性排名。

表 3 ping 不通按层排查的动作顺序

步骤 敲什么 正常长什么样 异常往哪走
1 对 223.5.5.5 跑 ping -c 20 -i 0.2 -W 2 20 发 20 收、0.0% 丢包、有 rtt 行 本机出站或命令写法,先自查
2 对目标跑同一条 ping 有回显、有 avg ms 全丢包先记未取得延迟,未做任何估算
3 nslookup 或 dig 问目标域名的 53 端口 拿到 A 记录 解析链路,见 DNS 层
4 curl -4 -w 带状态码请求目标 code 200、五段有读数 业务层,按五段拆耗时
5 对业务端口建连或 tcping 端口握手成功 安全组与端口那层
6 tracepath -n 逐跳看回显 20 跳内有逐跳读数 结合去程路径,孤立大值别当拥塞
7 换第二个出口对同一目标复测 两源结论对得上才下判断 出口差异,不当成目标故障

顺序的关键是别跳步。先在同一台源上换个已知会回 Echo 的目标,确认命令和本机出站没问题;再看目标是不是只有 ICMP 全丢、业务端口还活着;然后才轮到逐跳和商家策略。ping 不通就改 DNS、就换 IP、就重启,三步都跳过了业务层还在不在这一问。时间对不对、MTU 合不合适,会分别影响证书校验和分片,时间不准怎么排查 与 MTU 检查那一篇各管一格,跟 ICMP 层不是一回事,这里只点一句。

常见问题

VPS ping 不通怎么排查,网站能打开是不是就没宕机?

不能只凭 ping 下结论。ping 不通测的是 ICMP Echo 这一来一回,网站要过 DNS、TCP、TLS、首字节好几段。表 2 里 114.114.114.114 两源 100.0% 丢包,同一个 IP 在 53 端口照样解析出域名,就是分开的证据。全丢包只写未取得延迟,未做任何估算,再拿带状态码的 curl 验一次业务路。

为什么 114.114.114.114 ping 不通,却还能拿来解析域名?

ICMP 和 DNS 是两套协议、两个端口。广东这台源对它 ping -c 20 -i 0.2 -W 2 是 20 发 0 收,可 nslookup www.baidu.com 114.114.114.114 拿到了 114.114.114.114#53 的应答和 A 记录 180.101.51.73、180.101.49.44。不回 Echo 不等于 53 端口不服务,把 ping 不通当成 DNS 配错是最常见的误判。

云厂商默认禁 ICMP 吗,安全组要放行什么?

各家策略不一样,别按记忆里的一句默认来。能验证的动作是两步:先看业务端口和 HTTPS 状态码正不正常,再看 ICMP 是不是单独被丢。生意不受影响时,ping 不通不一定要放行任何东西;真要放,是安全组和系统防火墙里针对 ICMP Echo 的那条规则,不是把端口全开。

两台探测源都 100% 丢包,能算出延迟大概多少吗?

算不了。114.114.114.114 两源输出里没有 rtt 行,min、avg、mdev、max 四格全是未取得,这里写清楚:未取得延迟,未做任何估算。不拿 223.5.5.5 的 4.792 或 2.394 反推,也不写大概几百毫秒。ping 不通到全丢,能记的只有没收到 Echo Reply。

ping 通了但 SSH 连不上,该查哪一层?

查 TCP 端口那一层。ping 通只说明 Echo 有人回,SSH 的 22 端口有没有监听、安全组放没放、系统防火墙拦没拦,ping 一概照不见。one.one.one.one 广东 0.0% 丢包、avg 51.996 ms,ping 通得很正常,HTTPS 却是 code=000,就是同一类分离。端口那套怎么拆,归端口不通那一篇。

用 tcping 或 curl 代替 ping 判断通不通靠谱吗?

看要答什么。想验业务路通不通,tcping 对业务端口握手、curl 带状态码取一次页面事务,比 ping 贴题得多,表 1 的五段读数就是这么来的。想看 ICMP 这一层本身丢不丢,还得回到 ping。两者不是替代关系,ping 不通的时候换一层验,正好把问题分开。

tracepath 全是星号,是不是说明链路断了?

不说明。tracepath 里 no reply 常常只是那一跳的设备不回 ICMP,20 跳上限内的输出末尾写着 Too many hops: pmtu 1500,意思是没在 20 跳内走到终点,不是链路断了。广东那台 10 跳 27.964ms、12 跳 29.908ms 这种孤立偏大的单点,多见于中间设备对 ICMP 限速排队,别拿它判定拥塞,更别拿它补目标的延迟。

结语:把 VPS ping 不通怎么排查收成一句话

回到开头那张工单。把 114.114.114.114 填进 resolver 的那位,后来只改了一处:不再拿 ping 全红当配错,改看 53 端口有没有应答,解析一直好好的。VPS ping 不通怎么排查,说到底就一句:先把 ICMP 这一层和 DNS、TCP、TLS 分开,再用带状态码的请求去验真正承载业务的那条路,两源都测过才下结论。ping 不通不代表宕机,ping 通也不代表网站能开,这两句能记住,多数工单不用提。

真到排障无果、想换台机器重测那一步,优惠券与在售套餐 按预算挑就行,别急着按某一次 ping 全红下单;按层归好的实测归档 和 按网络与机房归的商家清单 可以顺着找同一层的其它记录。

V P S , p i n g 不 通 , I C M P , 网 络 排 查 , 双 源 实 测 , 丢 包 1 0 0 % , t r a c e p a t h , c u r l - w

🔍猜你喜欢