网络ping测试工具
晚上十一点,网络路由器指示灯闪了两下,测试网页转圈转到人想砸键盘。工具你打开命令行,网络敲下四个字母:ping。测试屏幕上一行行跳出来的工具数字,比任何测速软件都诚实——延迟多少、网络丢没丢包,测试一目了然。工具这玩意儿从1983年诞生到现在,网络四十多年了,测试依然是工具排查网络问题最趁手的工具,没有之一。网络
很多人对ping的测试理解停留在“通不通”这个层面。能ping通就万事大吉,工具ping不通就骂运营商。但实际情况远比这复杂。我见过一个案例:用户说公司网站打不开,ping域名超时,但ping IP地址正常。问题出在DNS解析上,跟网络连通性半毛钱关系没有。反过来,有时候ping域名能通,但打开网页奇慢无比,那可能是DNS返回了错误的IP,或者服务器本身负载爆了。ping只能告诉你“路通不通”,不能告诉你“路上堵不堵”。
所以得学会看ping的输出。拿Windows举例,敲ping example.com,返回大概是这样的:
正在 Ping example.com [93.184.216.34] 具有 32 字节的数据: 来自 93.184.216.34 的回复: 字节=32 时间=28ms TTL=52 来自 93.184.216.34 的回复: 字节=32 时间=27ms TTL=52 来自 93.184.216.34 的回复: 字节=32 时间=29ms TTL=52 来自 93.184.216.34 的回复: 字节=32 时间=28ms TTL=52 时间那一栏,单位是毫秒。28ms意味着数据包从你电脑到目标服务器再回来,花了28毫秒。这个数值在同城或国内骨干网范围内算正常。如果突然跳到200ms以上,要么是路由绕了远路,要么是中间某个节点在丢包重传。TTL值也值得看一眼——每经过一个路由器TTL减一,初始值通常是64或128。TTL=52说明中间经过了12跳,还算合理。要是TTL只剩个位数,那路由路径可能出了大问题。
丢包才是真正致命的。偶尔丢一两个包,可能是网络抖动,重传一下就过去了。但如果丢包率超过5%,视频会议会卡成PPT,SSH连接会频繁断开,游戏里人物会瞬移。我自己的经验是,连续ping个一两百次,看丢包率。Windows下用ping -n 100 example.com,Linux和macOS用ping -c 100 example.com。一百个包足够看出趋势了。如果丢包集中在某几个时间点,那可能是对端服务器在限速或者过载;如果丢包均匀分布,问题多半出在你本地网络或者运营商骨干网上。
还有个常被忽略的参数:包大小。ping -l 1472 example.com(Windows)或ping -s 1472 example.com(Linux/macOS)。1472字节加上28字节的ICMP头,正好是1500字节,以太网的标准MTU。如果这个大小的包ping不通,但默认的32字节能通,说明路径上某个设备的MTU小于1500,可能是PPPoE拨号或者VPN隧道。这时候网页能打开但大文件下载卡死,就是典型的MTU问题。把包大小降到1400再试,通了的话,基本可以确诊。
ping工具本身也在进化。Linux上的ping支持-f参数做洪水ping,用来做压力测试,但别对公网服务器用,容易被封。还有mtr(My Traceroute),把ping和traceroute揉在一起,能实时看到每一跳的延迟和丢包,排查中间节点问题比单纯ping高效得多。Windows用户可以用pathping,虽然慢,但数据更细。
最后说个反直觉的事:ping通不代表服务正常。很多服务器防火墙直接禁了ICMP,你ping它永远超时,但HTTP服务跑得好好的。反过来,有些服务器ICMP放行,但应用层挂了,ping照样通。ping只是网络层的一个探针,别把它当万能药。真正排查问题,还得结合traceroute、telnet端口测试、curl看响应头,一套组合拳打下来,才能定位到根因。
下次网络出问题,别急着重启路由器。先ping一下,看看数字怎么说。