Ping 是Windows自带的一个DOS命令。利用它可以检查网络是否能够连通,用好它可以很好地帮助我们分析判定网络故障。该命令可以加许多参数使用,键入Ping按回车即可看到详细说明。Ping 命令可以用来验证与远程计算机的连接。
ping的参数
ping [-t] [-a] [-n count] [-l length] [-f] [-i ttl] [-v tos] [-r count] [-s count] [[-j computer-list] | [-k computer-list] [-w timeout]
【参数说明】
-t :不停的ping指定的计算机,直到按下Ctrl+C中断。
-a :将地址解析为计算机NetBios名。
-n :发送count指定的ECHO数据包数。通过这个命令可以自己定义发送的个数,对衡量网络速度很有帮助。能够测试发送数据包的返回平均时间,及时间的快慢程度。默认值为 4。
-l :发送指定数据量的ECHO数据包。默认为 32 字节;最大值是65500byt。
-f :在数据包中发送“不要分段”标志,数据包就不会被路由上的网关分段。通常你所发送的数据包都会通过路由分段再发送给对方,加上此参数以后路由就不会再分段处理。
-i :将“生存时间”字段设置为TTL指定的值。指定TTL值在对方的系统里停留的时间。同时检查网络运转情况的。
-v :tos 将“服务类型”字段设置为 tos 指定的值。
-r :在“记录路由”字段中记录传出和返回数据包的路由。通常情况下,发送的数据包是通过一系列路由才到达目标地址的,通过此参数可以设定,想探测经过路由的个数。限定能跟踪到9个路由。
-s :指定 count 指定的跃点数的时间戳。与参数-r差不多,但此参数不记录数据包返回所经过的路由,最多只记录4个。
-j :利用 computer-list 指定的计算机列表路由数据包。连续计算机可以被中间网关分隔(路由稀疏源) IP 允许的最大数量为 9。
-k :computer-list 利用 computer-list 指定的计算机列表路由数据包。连续计算机不能被中间网关分隔(路由严格源)IP 允许的最大数量为 9。
-w:timeout 指定超时间隔,单位为毫秒。
一般情况下,通过ping目标地址,可让对方返回TTL值的大小,通过TTL值可以粗略判断目标主机的系统类型是Windows还是UNIX/Linux,一般情况下Windows系统返回的TTL值在100-130之间,而UNIX/Linux系统返回的TTL值在240-255之间。因为TTL的值在对方的主机里是可以修改的,故此种方法可作为参考。Windows系列的系统可以通过修改注册表以下键值实现修改PING命令TTL值:
[HKEY_LOCAL_MACHINE\sys tem\CurrentControlSet\Services\Tcpip\Parameters]
"DefaultTTL"=dword:000000ff
255---FF
128---80
64----40
32----20
一、Ping工作原理
提到Ping命令,就不能不介绍ICMP(Internet Control Messages Protocol),因特网控制信息协议。ICMP通常被认为是IP层的一个组成部分,用于传递差错报文和其它需要注意 的信息。ICMP报文是在IP数据包内部传输的。
ICMP报文格式类型字段可以有15个不同的值,描述特定类型的ICMP报文。Ping报文实际 上是类型为0的“回显应答”和类型为8的“请求回显”报文。
二、Ping命令的格式和参数
在Quidway系列路由器上,Ping命令格式如下,粗体为关键字,斜体为参数:
Ping [-c number][-t number][-s number] ip-address
-c: 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通了。原来 线路质量不好,存在着严重的丢包现象。
【点评】小L被Ping命令的缺省参数-c给迷惑了。Ping不通的背后可能隐藏着丢包现象,毕竟配置错误和线路质量不好的解决方法大相径庭。有了此次教训之后,小L再遇到Ping不 通的情况,都会将命令多执行一遍,并加上参数:-c 10,这意味着连续Ping10个报文来检 验是否存在丢包现象。
命令格式:Ping -c 10 ip-address
【案例二】工程师小L配置完一台路由器之后,执行Ping命令访问internet某站点IP地址 ,没有Ping通。有了上次教训,小L再一次Ping了10个报文,仍没有响应,于是小L断定为网 络故障,在费劲周折检查了配置、链路后,仍没有发现任何可疑之处。最后小L采取逐段检 测法,对链路网 关进行逐级测试,发现每段都可Ping通,但响应时间越来越长,最后一个网关的响应时间已 达到1800ms左右,会不会是由于超时而导致显示为Ping不同呢?受此启发,小L将Ping命令 时间改为4000ms,Ping通了,观察发现,所有报文响应时间都在2100ms左右。
【点评】这一次,小L被Ping命令的另一个缺省参数-t 给迷惑了。Ping不通的背后可能隐 藏着超时处理,系统缺省认为Ping报文应该在2000ms内有回应,如果超出该时间,即使有回 应报文送达,也认为Ping不通。有了这次教训之后,小L再遇到Ping不通的情况,都要把命 令再敲一遍,并 加上参数:-c 10、-t 4000,这意味着连续Ping10个报文、每个报文的超时设置为4000ms, 以此检验是否存在丢包和响应时间过长等现象。
命令格式: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字节。
【点评】这一次,小L是被Ping命令的另一个缺省参数-s 给迷惑了。由于Ping缺省报文为 56个字节,所以显示Ping通的信息只表示56字节的报文可以通,并不表示其他大小的报文都 可以通。这并不意味我们必须从56个字节逐级向上Ping,通常如果大包可以Ping通,则小包 一定会通。有 了这次教训之后,小L在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上Pi ng路由器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报文 的源地址填写的是1.1.1.1,而不是3.3.3.3,由于两台路由器的s0接口处于同一网段,所以 响应的报文可以顺利送达路由器A。
【点评】A能够Ping通B,则B一定能够Ping通A(不考虑防火墙的因素),这句话本身并没 有错,关键是这里的A、B究竟指的是什么?如果是指两台主机或两个IP地址,那么这句话是 正确的,但是如果指两台路由器,那就不一定了,因为路由器通常都含有多个IP地址,现在 就有如下问题 ,当从一台路由器上执行Ping命令,它发出的ICMP报文的源地址究竟选择哪一个呢?实际上 路由器选择的是发出报文的接口IP地址。
原文地址http://www.china125.com/os/Windows/3878.htm