当前位置:首页 > 技术与方案 > 网络管理相关

“ping”出来的故障解决

(2012-09-03 20:47:28)

Ping是一个验证网络上的两个主机之间连通性的分析工具。它发送网间控制报文协议(ICMP)的回应请求(Echo_Request)报文到一个远程IP地址,然后准备接收返回的ICMP应答报文。Ping程序的最初版本的作者是Mike Muss。自该程序诞生以来,已有许多人修改和重写它,并在不同程度上沿用了Ping这一思想。
一般情况下,Ping是检测机器收发IP报文能力的一个很好的指示器。如果你能Ping一个主机,那么你也能建立一个FTP或HTTP连接。目前,由于安全原因而被广泛采用的报文过滤方法,使得Ping的能力受到了限制。基于如下两个原因,许多防火墙通常不允许ICMP报文的通过。

1.通常人们没有必要知道你的内部网络是什么样子的。
2.任何协议都可能被用来作为发起攻击的工具,即使是ICMP也不例外。
决定是否允许让ICMP通过你的防火墙是一件较难权衡的事,因为有人会正当地利用ICMP的功能和能力,但也有人会利用ICMP来进行攻击行动(比如:“Ping of Death”就是利用特大的报文来Ping,从而导致目标主机的IP栈过载——常造成严重的后果)。如果你选择允许ICMP进入你的网络,则必须确信你已考虑到这一后果。

Linux系统中Ping的使用

Ping最常用的方式是不加任何参数。它的运行结果形式如例1所示。

例1
 $ ping mango
 PING mango (192.168.1.1) from 192.168.1.10 : 56(84) bytes of data.
 64 bytes from mango (192.168.1.1): icmp_seq=0 ttl=255 time=0.5 ms
 64 bytes from mango (192.168.1.1): icmp_seq=1 ttl=255 time=0.3 ms...
--- mango ping statistics ---
6 packets transmitted,6 packets received,0% packet loss round-trip
min/avg/max=0.3/0.3/0.5 ms
该结果输出内容被分为三个部分:该命令的概述;收到应答的运行时间;对结果的总结。在本例中,检测的结果是好的,没有丢失的报文。该例子也显示了一个要点——你不能仅仅依赖一个报文来分析你的网络状况。一个有5个或10个报文的序列检测效果才有可能真实地反映你的网络状况。因为,当网络发生拥塞时很有可能导致多达40%的数据被遗失,甚至,你要检测那端的主机碰巧很忙时也可能会丢失你的整个报文。
Ping命令有好几个有用的参数。下面是linux系统下Ping命令参数的概要描述。
-c count在收发指定的count个数目的报文后停止
-d 在套接口设置SO_DEBUG
-f 尽可能快地发送报文
-i wait设置连续报文发送时报文间的发送时间间隔(单位为秒)
-I ?device?设置输出接口
-l preload尽可能快地发送预载的报文,然后再返回到正常发送模式
-n 不查寻主机名,仅仅给出IP地址值
-p pattern定义随同报文一起被发送的便笺内容(便笺最长为16个字节)
-q 仅输出结果的总结内容
-r 不使用路由表来发送报文,而是直接把报文发到主机
-R 设置记录路由选择功能,即记录报文传送经过的路径
-s packetsize设置要发送的报文大小(单位为字节,最大长度是64K,缺省长度是64)
-T tsonly发送一个带有时间戳的Ping报文
-T tsandaddr收集时间戳和地址
-T tsprespec[host1 [host2 [host3 [host4]]]]  收集来自预定的网络段的时间戳和地址

这些参数被组合使用可能会使Ping的输出内容更有用处。比如,例1的执行可能要花好几秒钟才能返回输出结果,但如果使用了-f参数则将会减少运行时间。把该参数和-c 5和-q参数组合使用将会很快使你获得运行结果,并且输出结果清晰易读。输出形式如下所示:
# ping -c 5 -fq mango
 PING mango (192.168.1.1) from 192.168.1.10 : 56(84) bytes of data.
--- mango ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 0.2/0.2/0.9 ms

注意:-f和-l参数仅能由root用户使用,因为,滥用它们可能会引起严重的网络性能下降。
有些时候,可能需要用较大的报文来测试。你可以使用:ping -c 5 -s 1024 -qf来发送较大的报文。当你怀疑问题可能出现在报文分段和重组方面的时候,采用这一策略可能特别有用。
为了查看你的报文被传递的路由情况,你可以使用:ping -c 5 -R。注意:由-R定义的记录路由功能并不一定被所有的路由器和主机所支持,并且,它只有一段有限的空间来存放路由地址。要确定报文流经网络的路由路径,用一个效果更好的工具traceroute(Windows系统中是tracert程序)将更合适。

Windows系统中Ping的使用

在Windows系统中使用Ping的方法与前述的在Linux系统中的使用方法基本一致,只是参数有些差异。另外,在Windows中允许报文长度超过64KB,而不像Linux系统中因遵循Internet标准而把报文长度限制在64KB内,且它的缺省报文长度是32bytes。此处仅列出它的命令格式和参数的基本含义。
 ping命令格式:
 ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS] [-r count] [-s count] [[-j host-list] | [-k host-list]] [-w timeout] destination-list
-t不断地向指定的主机发送报文,直到组合键Ctrl-C终止反复按Ctrl-Break可以查看统计信息或继续运行
-a解析主机名的IP地址
-n count指定要发送的请求应答报文的数目
 -l size设置发送缓冲区大小
 -f在报文中设置不分段标志
 -i TTL设置报文在网络中的生存时间(Time to Live)
 -v TOS服务类型(Type Of Service)
 -r count记录指定个数的路由段的路由情况
 -s count指定个数的路由段的时间戳
 -j host-list由指定的路由发送报文,但不强求一致
 -k host-list严格按指定路由发送报文
 -w timeout指定等待每个响应的最长时间(单位是毫秒)
 destination-list指定要Ping的目标主机名或IP地址
在Windows中使用Ping得出的输出结果样式框架基本,与Linux中的Ping输出结果相似,在此就不再细加解释。

问题分析方法

连通性问题是由许多原因引起的,如本地配置错误、远程主机栈失效等,当然还包括设备等造成的故障。遇到连通性问题时,作为一个有经验的用户首先想到的诊断工具就应该是Ping。Ping命令最适合于判断故障是否由配置、路由或物理故障引起的,而不太适合于判定应用层引起的故障。
使用Ping测试连通性时,如果在指定时间内没有收到ICMP应答报文,则Ping就认为该主机不可达,然后向用户屏幕发送“host unreachable”信息(在Windows系统中信息是“Request time out”)。该信息可能是由一台主机故障引起的,也可能是目标主机关机了,或其通信协议栈不能响应远程用户请求。要确定目标主机是否有故障,只需向同一网段中的其它主机发Ping命令,如果可达,则可以确定是目标主机发生了故障;否则,故障就可能是由本地配置错误、物理故障或路由问题引起的。如果问题是由路由配置不当引起的,建议你使用Traceroute或Windows系统的Tracert程序来跟踪一个数据报文在主机间传送所经过的路径,以检测问题到底出在哪个环节上。如果Ping成功,则问题很可能是出在网络系统配置方面。
总之,Ping命令是一个在故障处理方面很有用的且很便于使用的工具,你不应该忽视它的存在。

更多
关闭窗口 打印 
网站首页    -    联系我们    -   收藏本站    -    网站地图                                                               客户服务热线:0571-85023000
本网站所有网页信息已申请知识产权和著作权保护,版权归四海光纤公司所有,未经授权禁止任何人复制或镜像,违者必究。
公司主营:杭州光纤光缆视频会议系统,是专业的通信网络工程、视频会议系统建设专家

中华人民共和国备案号:浙ICP备10018243号