2023年12月23日发(作者:)

Ping命令的使用误区

在网络设备中,Ping几乎是使用频率最高的网络测试命令。本文将详细介绍Ping命令的相关参数、使用技巧及其注意事项。

一、Ping命令的格式和参数

Ping命令格式如下(粗体为关键字,斜体为参数):

ping [-c

number] [-t

number] [-s

number] ip-address

-c: 执行一次Ping命令发出Ping报文的个数,缺省值是5个;

-t: 设置Ping报文的超时时间,以毫秒为单位,缺省值为2000;

-s:设置Ping报文的大小,缺省值是56 byte。

实际上,Ping命令的参数还有很多,本文仅重点介绍这三个最常用的。

二、Ping命令的使用误区

分析此命令ping 202.101.6.21,虽然此命令没有带附加参数,但实际使用的是缺省值,即路由器将发送5个大小为56个字节的ICMP报文,并认为正常的相应时间为2000毫秒,而这些缺省参数通常为我们所忽视。

1、网络正常,但也可能Ping不通

【案例一】工程师小L在配置完一台路由器之后,执行Ping命令检测链路是否通畅,发送了五个报文都没有Ping通,于是检查双方配置命令和路由表,一直没有找出错误。最后无奈之下,重复执行了一遍相同的Ping命令,发现此次的五个报文中,竟有两个Ping通了。原来线路质量不好,存在着严重的丢包现象。

点评:问题在于Ping命令的缺省参数-c。Ping不通的背后可能是ICMP报文被丢包。线路质量不好、网络拥塞、网络设备资源紧张都可能导致ICMP报文被丢包。

解决方法:遇到Ping不通的情况,将Ping命令加上参数:-c 10再执行一遍,这意味着连续Ping10个报文来避免由于ICMP报文被丢包而导致Ping不通。

命令格式:Ping -c 10 ip-address

【案例二】工程师小L配置完一台路由器之后,执行Ping命令访问internet某站点IP地址 ,没有Ping通。有了上次教训,小L再一次Ping了10个报文,仍没有响应,于是小L断定为网

络故障,在费劲周折检查了配置、链路后,仍没有发现任何可疑之处。最后小L采取逐段检测法,对链路网关进行逐级测试,发现每段都可Ping通,但响应时间越来越长,最后一个网关的响应时间已达到1800ms左右,会不会是由于超时而导致显示为Ping不同呢?受此启发,小L将Ping命令 时间改为4000ms,Ping通了,观察发现,所有报文响应时间都在2100ms左右。

点评:问题在于Ping命令的缺省参数-t。Ping不通的背后可能是超时的原因。系统缺省认为Ping报文应该在2000ms内有回应,如果超出该时间,即使有回应报文送达,也认为Ping不通。

解决方法:遇到Ping不通的情况,将Ping命令加上参数:-c 10

-t 4000再执行一遍,这意味着连续Ping10个报文、每个报文的超时设置为4000ms, 以此防止由于丢包和响应时间过长等现象导致Ping不通。

命令格式:Ping -c 10 -t 4000 ip-address

2、能够Ping通,但网络仍存在问题

【案例一】工程师小L在一次工程中,需要在ATM接口上运行OSPF协议,由于该ATM接口只有一个对端,便将OSPF接口类型

改为point-to-point。ATM顺利调通之后,可以Ping通对端地址,但是OSPF却无法正常运行。

系统配置如下:

interface Atm2/0/0.100

ip address 202.111.128.214 255.255.255.252

map-group atmzz

atm pvc 1 163 199 aal5snap ipoa ubr 155000 155000 32

ip ospf network point-to-point

map-list atmzz

ip 202.111.128.213 atm-vc 1

查看调试信息发现,双方都没有收到对端发来的Hello报文,打开Debug开关,发现本端发送的Hello报文由OSPF交给IP层,但IP层交给ATM层时,却被ATM层丢弃了。

细查原因,原来OSPF Hello报文为多播报文(类似广播报文),而ATM的缺省设置不支持发送广播报文,而需要特殊配置 。将配置改为:ip 2.111.128.213 atm-vc 1 broadcast,增加broadcast参数后,支持广播报文的发送,问题解决。

【点评】:

Ping命令只能用于测试单播报文,而不能测试广播和多播报文。

【案例二】小L在一次工程中,需要在NE路由器和JUNIPER

路由器之间通过POS接口相连, 并运行OSPF路由协议。配置完成后,一切正常,割接后设备运行稳定,未出现任何故障。但两个月之后,用户突然反馈网络中断。

小L登录路由器后,观察POS接口连接正常,可以Ping通对端地址,但OSPF协议中断,接着按照以下步骤进行查询:

查看邻居状态STATE处于exstart状态,打开NE路由器Debug 开关,查看相应报文信息, 发现相互之间可以收到Hello报文。但是,NE发送DD报文后,却一直没有收到对方回应的DD

报文。 开JUNIPER路由器Debug开关,发现对方收到NE DD报文后,发送了相应DD报文予以回应,但是NE没有收到。

初步断定,NE没有接收到这个报文,但对方确实发送出来了。既然可以接收到Hello报文,说明链路通畅,而且多播报文收发也正常。有一种可能就是对方发送的DD报文有错误, 导致NE拒收。查看相应信息,NE并没有报告接收到错误的DD报文。仔细查看对端路由器调试 信息,发现该DD 报文很大,有2000多字节。

会不会是由于报文太大导致的问题呢?小L试着Ping了一个2000字节的报文,竟然不通 !仔细察看发现,双方的MTU设置不一致,导致大包不通所致。JUNIPER路由器的MTU为4000 多,而NE为1500,将JUNIPER MTU改为1500,问题解决。为什么工程初期没有问题,这是因为后来网络扩容, 导致路由信息过多,使DD报文长度超过了1500字节。

点评:这一次,问题在于Ping命令的缺省参数-s。由于Ping缺省报文为 56个字节,所以显示Ping通的信息只表示56字节的报文可以通,并不表示其他大小的报文都可以通。这并不意味我们必须从56个字节逐级向上Ping,通常如果大包可以Ping通,则小包一定会通。

解决方法:在Ping通的情况,将Ping命令加上参数:-s 8000再执行一遍,以测试一下大包是否能通。

命令格式:Ping -s 8000 ip-address

3、特殊的例子:路由器A能Ping通相连的路由器B,则B可能Ping不通A

小L在学习了Ping的工作原理之后,一直这样认为:如果A能够Ping通B,则B也一定能够 Ping通A(不考虑防火墙因素)。但是在一次工程实践中,却发现并非如此。

在路由器A上Ping路由器B以太网地址2.2.2.2,显示可以正常Ping通,但在路由器B上Ping路由器A以太网地址3.3.3.3时,却返回无法Ping通。仔细察配置发现,路由器A配置了一条指向2.0.0.0/8网段的静态路由,但在路由器B上却没有相应配置到3.0.0.0/8的路由,因此路由器B Ping不通3.3.3.3。但是,为什么路由器A可以Ping通2.2.2.2呢?同样

没有返回路由,小L百思不得其解。打开路由器IP报文调试开关后,终于真相大白,原来从路由器A上发出的ICMP报文的源地址填写的是路由器A连接路由器B的送出接口1.1.1.1,而不是3.3.3.3,由于两台路由器的s0接口处于同一网段,所以响应的报文可以顺利送达路由器A。

点评:A能够Ping通B,则B一定能够Ping通A(不考虑防火墙的因素),这句话本身并没有错,关键是这里的A、B究竟指的是什么?如果是指两台主机或两个IP地址,那么这句话是正确的。但是如果指两台路由器,那就不一定了,比如这个例子,因为路由器通常都含有多个IP地址,现在就有如下问题 ,当从一台路由器上执行Ping命令,它发出的ICMP报文的源地址究竟选择哪一个呢?实际上 路由器选择的是发出报文的接口IP地址