精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>网络专区>>● Network>>基础知识>>ping 应用几则(转)

主题:ping 应用几则(转)
发信人: horsearmor(马甲)
整理人: terryh(2004-03-19 15:09:00), 站内信件
关于Ping的小文章

作者: 李劲松 
  Ping这个词源于声纳定位操作,本意是指来自声纳设备的脉冲信号。在网络设备中,Pi 
ng几乎是使用频率最高的网络测试命令。本文将详细介绍Ping命令的基本原理、相关参数、
使用技巧及其注意事项。 


一、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地址。 



----

[关闭][返回]