打开终端,网站敲下 `ping www.baidu.com`,地址几秒后屏幕上跳出四行响应,网站每行都带着一个毫秒数。地址这就是网站最直接的网络体检——看你的机器和对方服务器之间,数据包跑一个来回要多久,地址路上有没有丢。网站
很多人第一次接触这个命令是地址在Windows的cmd里。Win+R,网站输入cmd,地址回车,网站黑框弹出来,地址光标一闪一闪。网站输入ping加空格再加域名,地址比如 `ping www.qq.com`,网站回车。默认情况下Windows会发4个ICMP包,每个32字节,然后给你统计结果。你会看到类似“来自 121.14.77.221 的回复: 字节=32 时间=8ms TTL=54”这样的行。时间越小越好,个位数说明你离服务器很近或者线路质量高,上百毫秒就有点拖了,要是出现“请求超时”,那基本就是不通。
Mac和Linux上默认会一直ping下去,不会自己停。想让它停,按Ctrl+C。这时候它会给你一份汇总:发了多少个包,收了多少,丢包率百分之几,最小/平均/最大往返时间。丢包率比延迟更值得盯——偶尔一个包丢了无所谓,要是丢包率超过5%,刷网页可能就会感觉到卡顿,视频通话会断断续续。
ping的本质是ICMP协议,属于网络层。它不依赖TCP或UDP,所以有些服务器会禁掉ICMP响应。你ping过去没反应,不代表网站打不开。我遇到过好几次,ping某个云服务商的IP全是超时,但浏览器访问完全正常。反过来也有:能ping通,但网站挂了。这时候ping只能证明网络可达,证明不了服务可用。想测端口通不通,得用telnet或者nc,那是另一回事。
有人问,为什么我ping域名得到的IP和实际访问的IP不一样?大概率是CDN在起作用。你ping `www.taobao.com`,返回的IP可能离你所在城市很近,但实际HTTP请求经过CDN调度后,可能落到另一个节点。所以ping出来的延迟只能作为粗略参考,不能完全代表网页加载速度。网页加载还涉及DNS解析、TCP握手、TLS协商、服务器处理、资源下载,任何一个环节慢都会拖后腿。
Windows下有个实用参数:`ping -t` 可以一直ping,直到你按Ctrl+C。想边上网边观察网络稳定性,就开一个窗口挂着 `ping -t 8.8.8.8`。打游戏时如果突然卡一下,切出来看看是不是有请求超时。还有个 `-l` 参数可以指定包大小,比如 `ping -l 1472 -f www.xxx.com` 用来探测路径MTU,1472加上28字节的IP和ICMP头正好1500。如果返回“需要拆分数据包但设置DF”,说明路径MTU小于1500,可能影响某些VPN连接。这个用法偏进阶,普通用户知道有这么回事就行。
Linux下有个更顺手的工具叫 `mtr`,把ping和traceroute合在一起,能持续显示每一跳的丢包和延迟。排查“到底是本地网络问题还是运营商问题还是对方服务器问题”时,mtr比单纯ping好用得多。不过那是另一个话题了。
说回ping本身。它简单、直接、几乎每台联网设备都支持。遇到网络问题,第一反应不该是重启路由器,而是先ping一下。ping本地网关,ping公网IP,ping域名,三步下来基本能定位故障在哪一段。这比盲目拔插网线高效得多。
最后提一句:有些公司内网会封ICMP,ping不通不代表没网。这时候可以试试 `ping` 加 `-p` 参数指定协议?不行,ping本身不支持换协议。换 `tcping` 或者 `curl -v` 看TCP层更靠谱。工具是死的,思路是活的。