1、通过ping检测网络故障的典型次序
正常情况下,当你使用Ping 命令来查找问题所在或检验网络运行情况时,你需要使用许多Ping 命令,如果所有都运行正确,你就可以相信基本的连通性和配置参数没有问题;如果某些Ping命令出现运行故障,它也可以指明到何处去查找问题。下面就给出一个典型的检测次序及对应的可能故障:
1、ping127.0.0.1——这个Ping命令被送到本地计算机的IP软件, 该命令永不退出该计算机。如果没有做到这一点,就表示TCP/IP的安装或运行存在某些最基本的问题。
2、ping本机 IP ——这个命令被送到你计算机所配置的IP地址,你的计算机始终都应该对该Ping 命令作出应答,如果没有,则表示本地配置或安装存在问题。出现此问题时,局域网用户请断开网络电缆,然后重新发送该命令。如果网线断开后本命令正确,则表示另一台计算机可能配置了相同的IP地址。
3、ping局域网内其他IP——这个命令应该离开你的计算机,经过网卡及网 络电缆到达其他计算机,再返回。收到回送应答表明本地网络中的网卡和载体运行正确。但如果收到0 个回送应答,那么表示子网掩码(进行子网分割时,将IP地址的网络部分与主机部分分开的代码)不正确或网卡配置错误或电缆系统有问题。
4、ping网关 IP ——这个命令如果应答正确,表示局域网中的网关路由器正 在运行并能够作出应答。
5、ping远程 IP ——如果收到4 个应答,表示成功的使用了缺省网关。对于 拨号上网用户则表示能够成功的访问Internet (但不排除ISP 的 DNS会有问题)。
6、ping localhost —— localhost 是个作系统的网络保留名,它是127.0.0.1的别名,每太计算机都应该能够将该名字转换成该地址。如果没有做到这一带内,则表示主机文件(/Windows/host)中存在问题。
7.pingwww.yahoo.com——对这个域名执行Ping地址,通常是通过DNS 服务器如果这里出现故障, 则表示 DNS服务器的 IP地址配置不正确或DNS服务 器有故障(对于拨号上网用户,某些ISP已经不需要设置DNS服务器了)。顺便说一句:你也可以利用该命令实现域名对IP 地址的转换功能。
如果上面所列出的所有Ping 命令都能正常运行,那么你对你的计算机进行本地和远程通信的功能基本上就可以放心了。但是,这些命令的成功并不表示你 所有的网络配置都没有问题,例如,某些子网掩码错误就可能无法用这些方法检测到。
Ping 命令的常用参数选项
ping IP -t ——连续对IP 地址执行Ping 命令,直到被用户以Ctrl+C中断。
ping IP -l 2000——指定Ping 命令中的数据长度为2000 字节,而不是缺省的32字节。
ping IP -n——执行特定次数的Ping命令。
Netstat——Netstat用于显示与IP 、TCP、UDP和 ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。
如果你的计算机有时候接受到的数据报会导致出错数据删除或故障,你不必感到奇怪, TCP/IP可以容许这些类型的错误,并能够自动重发数据报。但如果累计的出错情况数目占到所接收的IP数据报相当大的百分比,或者它的数目正迅速增加,那么你就应该使用Netstat查一查为什么会出现这些情况了。
2、Ping程序在TCP/IP中的应用
我们称发送回显请求的ping 程序为客户,而称被 ping 的主机为服务器。大多数的 TCP/IP 实现都在内核中直接支持Ping服务器—这种服务器不是一个用户进程(在第6 章中描述的两种ICMP查询服务,地址掩码和时间戳请求,也都是直接在内核中进行处理的)。
ICMP回显请求和回显应答报文如图1 所示。
对于其他类型的I C M P查询报文,服务器必须响应标识符和序列号字段。 另外,客户发送的选项数据必须回显,假设客户对这些信息都会感兴趣。
Unix系统在实现ping程序时是把ICMP报文中的标识符字段置成发送进程的ID号。这样即使在同一台主机上同时运行了多个ping程序实例,ping程序也可以识别出返回的信息。
序列号从0开始,每发送一次新的回显请求就加1,ping程序打印出返回的每个分组的序列号,允许我们查看是否有分组丢失、失序或重复。IP 是一种最好的数据报传递服务,因此这三个条件都有可能发生。
旧版本的 ping 程序曾经以这种模式运行,即每秒发送一个回显请求,并打印出返回的每个回显应答。但是,新版本的实现需要加上-s选项才能以这种模式运行。默认情况下,新版本的ping 程序只发送一个回显请求。如果收到回显应答,则输出“host is alive”;否则,在20秒内没有收到应答就输出 “no answer (没有回答)”。
3、Ping命令应用实例三则
Ping命令是我们日常网管工作中使用频率最高的工具之一,主是用来测试网络连接的。 在实际平时解决网络故障的过程中,一般应该遵循“先软后硬”的步骤来进行。其中“软”就是指使用Ping 命令大概判断出网络故障位置。今天我们就向大家介绍Ping命令的三个典型应用。
一、验证网卡工作状态
Ping最简单的一个应用就是验证网卡工作状态是否正常,这也是电脑出现 不能上网等故障最简单的判断手段。
在命令提示符下输入“ ping 127.0.0.1”并回车,如果返回四行“ Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 ”那么则说明本地网卡是安装正常的,若返回“ Request timed out. ”则说明本地网卡工作不正常(如下图)。
小提示:用户也可以直接使用“Ping本地计算机的IP 地址”,以验证是否IP是否设置成功。二、判断网络连接状态。判断网络连接时,我们通常的做法就是ping网关地址和远程主机地址,以此判断出网络故障所发地。
如果“ ping网关地址”出现“Request timed out.”,那么则说明是内部网络出现了问题,本地网卡发出的数据包不能到达网关;如果Ping 网关连接正常,那么可以执行“ping远程主机”,这时若出现“Request timed out.”, 则可能是外部连接的问题了。
在实际的应用中还会出现这样的情况,在ping执行过程中,会同时包含 “Requesttimedout. ”和 “Reply from192168.0.1:bytes=32time<1ms TTL=128”这样的信息,这种情况则表示网络不太稳定,存在丢包现象,对此大家可以使用“ ping IP地址 - t ”即在原有的命令后加上“- t ”参数,这样ping 就会连续尝试与目标主机进行连接,以此观察网络的稳定性。当然从返回信息的 “time<1ms”也是一个很重要的信息,如果网络很畅通, 例如测试与内网主机的连接,一般都会是“time<1ms”,若该数值比较大,同样说明网络不够稳定,可能是设备不兼容,可能是节点接触不好,也可能是网络内有大量病毒导现堵塞等。
三、验证 DNS服务器
DNS服务器负责将域名(网址)转换成IP 地址,我们可以使用ping 命令判 断其配置是否正确以及工作是否正常。
其方法很简单,只需要在命令提示下输入“ping域名地址”,例如“ping www.itedit.cn”,如果出现“ unknown Host Name”则表明不能到达,返回提示 “Reply from 222.191.251.34: bytes=32 time=27ms TTL=120”则证明DNS服务器能够成功将域名转换为IP地址。借助这个方法,我们也可以查看知名网站所使用的IP地址(如下图)。
掌握Ping命令的正确使用, 对于我们快速判断网络故障有着非常大的帮助。
4、如何正确使用Windows的Ping命令
对于Windows下ping命令相信大家已经再熟悉不过了,但是能把ping 的功能发挥到最大的人却并不是很多,当然我也并不是说我可以让ping发挥最大的功能,我也只不过经常用ping这个工具,也总结了一些小经验,现在和大家分享一下。
现在我就参照ping 命令的帮助说明来给大家说说我使用ping 时会用到的技巧, ping 只有在安装了TCP/IP 协议以后才可以使用:
ping [-t] [-a] [-n count] [-l length] [-f] [-i ttl] [-v tos] [-r count] [-s count] [[-j computer-list] | [-k computer-list]] [-w timeout] destination-list
Options:
-tPingthespecifiedhostuntilstopped.Toseestatisticsand continue - type Control-Break;To stop - type Control-C.
不停的ping地方主机,直到你按下Control-C 。
此功能没有什么特别的技巧,不过可以配合其他参数使用,将在下面提到。
-a Resolve addresses to hostnames.
解析计算机NetBios 名。
示例: C:\ >ping -a 192.168.1.21
Pinging iceblood.yofor.com [192.168.1.21] with 32 bytes of data: Reply from 192.168.1.21: bytes=32 time<10ms TTL=254
Reply from 192.168.1.21: bytes=32 time<10ms TTL=254
Reply from 192.168.1.21: bytes=32 time<10ms TTL=254
Reply from 192.168.1.21: bytes=32 time<10ms TTL=254
Ping statistics for 192.168.1.21:
Packets:Sent = 4,Received = 4,Lost= 0 (0% loss),Approximateround trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
从上面就可以知道IP为192.168.1.21的计算机NetBios名为
iceblood.yofor.com。
-n count Number of echo requests to send.
发送 count 指定的 Echo 数据包数。
在默认情况下,一般都只发送四个数据包,通过这个命令可以自己定义发送的个数,对衡量网络速度很有帮助,比如我想测试发送50个数据包的返回的平均时间为多少,最快时间为多少,最慢时间为多少就可以通过以下获知:
C:\ >ping -n 50 202.103.96.68
Pinging 202.103.96.68 with 32 bytes of data:
Reply from 202.103.96.68: bytes=32 time=50ms TTL=241
Reply from 202.103.96.68: bytes=32 time=50ms TTL=241
Reply from 202.103.96.68: bytes=32 time=50ms TTL=241
Request timed out.
,,,,,,
Reply from 202.103.96.68: bytes=32 time=50ms TTL=241
Reply from 202.103.96.68: bytes=32 time=50ms TTL=241
Ping statistics for 202.103.96.68:
Packets:Sent = 50, Received = 48, Lost = 2 (4% loss),Approximateround trip times in milli-seconds:
Minimum = 40ms, Maximum = 51ms, Average = 46ms
从以上我就可以知道在给202.103.96.68发送50个数据包的过程当中,返回了48个,其中有两个由于未知原因丢失,这48个数据包当中返回速度最快为40ms,最慢为 51ms,平均速度为46ms。
-l size Send buffer size.
定义 echo 数据包大小。
在默认的情况下windows 的 ping发送的数据包大小为32byt ,我们也可以自己定义它的大小,但有一个大小的限制,就是最大只能发送65500byt ,也许有人会问为什么要限制到65500byt ,因为Windows 系列的系统都有一个安全漏洞(也许还包括其他系统)就是当向对方一次发送的数据包大于或等于65532 时,对方就很有可能挡机, 所以微软公司为了解决这一安全漏洞于是限制了ping的数据包大小。虽然微软公司已经做了此限制,但这个参数配合其他参数以后危 害依然非常强大,比如我们就可以通过配合-t参数来实现一个带有攻击性的命 令:(以下介绍带有危险性,仅用于试验,请勿轻易施于别人机器上,否则后果自负)
C:\ >ping -l 65500 -t 192.168.1.21
Pinging 192.168.1.21 with 65500 bytes of data:
Reply from 192.168.1.21: bytes=65500 time<10ms TTL=254
Reply from 192.168.1.21: bytes=65500 time<10ms TTL=254
,,,,,,
这样它就会不停的向192.168.1.21计算机发送大小为65500byt 的数据包,如果你只有一台计算机也许没有什么效果,但如果有很多计算机那么就可以使对 方完全瘫痪,我曾经就做过这样的试验,当我同时使用10 台以上计算机ping 一台 Win2000Pro 系统的计算机时,不到5 分钟对方的网络就已经完全瘫痪,网络严重堵塞, HTTP和 FTP服务完全停止,由此可见威力非同小可。
-f Set Don't Fragment flag in packet.
在数据包中发送“不要分段”标志。 在一般你所发送的数据包都会通过路由分段再发送给对方,加上此参数以后路由就不会再分段处理。
-i TTL Time To Live.
指定TTL值在对方的系统里停留的时间。 此参数同样是帮助你检查网络运转情况的。
-v TOS Type Of Service.
将“服务类型”字段设置为tos指定的值。
-r count Record route for count hops.
在“记录路由”字段中记录传出和返回数据包的路由。 在一般情况下你发送的数据包是通过一个个路由才到达对方的,但到底是经过了哪些路由呢?通过此参数就可以设定你想探测经过的路由的个数,不过限制在了9个,也就是说你只能跟踪到9个路由, 如果想探测更多,可以通过其他命令实现,我将在以后的文章中给大家讲解。以下为示例:
C:\ >ping -n 1 -r 9 202.96.105.101(发送一个数据包,最多记录9个路由)
Pinging 202.96.105.101 with 32 bytes of data:
Reply from 202.96.105.101: bytes=32 time=10ms TTL=249
Route: 202.107.208.187 ->
202.107.210.214 ->
61.153.112.70 ->
61.153.112.89 ->
202.96.105.149 ->
202.96.105.97 ->
202.96.105.101 ->
202.96.105.150 ->
61.153.112.90
Ping statistics for 202.96.105.101:
Packets: Sent = 1, Received = 1, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 10ms, Maximum = 10ms, Average = 10ms
从上面我就可以知道从我的计算机到202.96.105.101一共通过了202.107.208.187, 202.107.210.214,61.153.112.70,61.153.112.89,202.96.105.149 , 202.96.105.97这几个路由。
-s count Timestamp for count hops.
指定 count指定的跃点数的时间戳。
此参数和-r差不多,只是这个参数不记录数据包返回所经过的路由,最多也只记录4个。
-j host-list Loose source route along host-list.
利用 computer-list指定的计算机列表路由数据包。连续计算机可以被中 间网关分隔(路由稀疏源)IP允许的最大数量为9 。
-k host-list Strict source route along host-list.
利用 computer-list指定的计算机列表路由数据包。连续计算机不能被中间网关分隔(路由严格源)IP允许的最大数量为9 。
-w timeout Timeout in milliseconds to wait for each reply.
指定超时间隔,单位为毫秒。
此参数没有什么其他技巧。
ping 命令的其他技巧: 在一般情况下还可以通过 ping 对方让对方返回给你的TTL值大小,粗略的判断目标主机的系统类型是Windows系列还是UNIX/Linux 系列,一般情况下Windows 系列的系统返回的 TTL值在100-130之间,而 UNIX/Linux 系列的系统返回的TTL值在240-255 之间,当然TTL的值在对方的主机里是可以修改的, Windows系列的系统可以通过修改注册表以下键值实现:
[HKEY_LOCAL_MACH\INSEYSTE\M CurrentControlSet\Services \Tcpip \Parameters] "DefaultTTL"=dword:000000ff
255---FF
128---80
64----40
32----20
5、如何使用ping和tracert命令检测丢包
如何测试丢包 ?我知道ping 一个网站的信息和跟踪路由的信息。但是,我曾经听一些人说他们的宽带网连接上有丢包的问题。我怀疑我也许遇到了丢包的问题,因为当我进行速度测试的时候,速度比以前慢了。 我没有改变硬件或者使用任何新的应用软件。
从家里测试宽带网连接的丢包是一项非常困难的工作。丢包可以发生在从你 的计算机到你在互联网上正在连接的目的地之间的线路上的任何一个地方。引起丢包的原因包括: 网络阻塞、路由器或者交换机超过工作负荷、信号往返时间缓 慢以及服务提供商或者托管你访问的网站的公司使用的通信优先等级。
没有主动测量实际重复传输的 TCP流量 ( 对于家庭宽带网连接来说,这类产品太昂贵了) ,很难确定是否真的发生了重复传输。你指出的机制ping 和跟踪路 由对于帮助家庭用户确定互联网上哪里的速度慢是最有用的工具。Ping测量你的计算机和你要连接的IP地址之间的信号往返时间。跟踪路由是测量路由器在 你的计算机和你正在跟踪的路由的IP 地址之间的通道的反应时间。
使用 Ping
使用 Ping测量丢包的最佳方法是向一个IP地址发送大量的Ping命令,然后检查没有应答的那些Ping 命令。如果你快速地发出50次Ping 命令,你可以检查没有没有应答的次数,并把没有应答的次数作为丢包。 没有应答的次数超过 5%可能就值得担心了。
在一台 Windows计算机上,在命令提示符后面输入如下命令就可以完成这个任务 :
Ping -n 50(IP 地址或者域名,如www.website.com) 这个命令中的“ - n”开 关告诉发送ping 命令的次数,“ 50”是发送的次数。
然后,你将得到一个测试总结。这个总结将包括丢失的数量和百分比:
199.181.132.250 地址 Ping 的统计结果 : 包: 发送 = 6, 接收 = 6, 丢失 = 0 (0%) 大约往返时间以毫秒 (ms) 显示 :
最小 = 26ms,最大 = 29ms,平均 = 27ms
如果你看到平均往返时间较高( 超过 100ms),这也会降低你的网络下载速度。设法消除某些引起丢包的网络某些部分的故障的一种方法是在通道的各个部分进行ping 测试。我首先开始进行测试的地方是本地的“缺省网关”。这是你所有的数据传输到网络上经过的第一个路由器。如果在这一部分的丢包率很高, 那么问题就在你的服务提供商的网络上。
在Windows 命令提示符后面输入“ipconfig”命令你就可以发现你的缺省 路由器的IP 地址。这个结果显示如下:
以太网接口本地区域连接:
具体连接的DNS后缀 :domainname.com
IP 地址 . . . . . . : 192.168.2.189 子网掩码. . . . . : 255.255.252.0 缺省网关. . . : 10.10.0.1
你在这里要查看的是缺省网关的IP 地址。在上述例子中就10.10.0.1。
使用跟踪路由在Windows 命令提示符后面使用跟踪路由命令就可以实施跟踪路由。在Windows XPZH中这个命令是 :tracert (IP地址或者主机名 )虽然结果不能向你显示丢包,但是,可以向你显示在路径中路由器反应速度减慢的情况。这个输出结果将显示所有的路由器的反应时间。下面是一个例子:
5 ms 2 ms 3 ms malibu.domain.com [10.10.0.1]
10 ms 6 ms 7 ms 10.60.0.6
9 ms 7 ms 7 ms 10.20.0.1
6 ms 7 ms 7 ms x130.cd9e68.sj.concentric.net [205.158.104.130]
7 ms 7 ms 8 ms ge9-0.dcr2.dc-fremont-ca.us.xo.net [205.158.60.169]
7 ms 7 ms 7 ms ge2-0.dcr1.dc-fremont-ca.us.xo.net [65.106.2.205]
10 ms 7 ms 8 ms p5-1-0-2.rar2.sanjose-ca.us.xo.net [65.106.2.153]
10 ms 9 ms 11 ms p1-0.ir1.paloalto-ca.us.xo.net [65.106.5.178]
9 ms 10 ms 15 ms 206.111.12.114.ptr.us.xo.net [206.111.12.114]
9 ms 10 ms 10 ms svl-core-03.inet.qwest.net [205.171.205.29]
29 ms 28 ms 29 ms stl-core-02.inet.qwest.net [205.171.5.85]
30 ms 29 ms 29 ms sea-edge-03.inet.qwest.net [205.171.26.42]
* * * Request timed out.
* * * Request timed out.
28 ms 28 ms 29 ms sam.abcnews.go.com [199.181.132.250]
如果你看到在路径中跟踪路由往返时间有超过100ms(十分之一秒) 的,这就可能引起网络上传输的时间减慢。
从上述例子中, 你可以看到数据在很多不同的网(XO, Qwest, ABC)上传输。这是互联网美妙的一部分。 不利的方面是一个用户无法解决反应时间减慢的问题。 最佳的出发点就是确认你和你的服务提供商之间没有出现丢包。
6、使用Ping命令细节点特别提醒
使用 Ping 命令,有时会出现一个奇怪的现象。Ping是 Windows自带的运行于命令行程序,它是TCP/IP 环境下用于检测网络连接性、可到达性和名称解析 的疑难问题的主要命令。Ping 最主要的用处就是检测目标主机是不是可连通,其实质就是发送一个ICMP回显请求报文给目的主机,并等待回显的ICMP应答, 然后打印出回显的报文。关于Ping 命令的应用不用本文详细讨论,在此指出一 个不为人注意的细节,提醒大家要特别注意。
在 Windows2000/XP命令提示符状态输入ping 127.0.0.1回车,会出现回显信息表示ping通了。有趣的是如果你输入ping 127.0..1回车(注意不是127.0.0.1,中间少输入一个0),同样可以Ping 通!Windows会自动在IP 地址 中填充上一个“ 0”,组成127.0.0.1,如图所示(图1)。
在 Windows98/Me下执行这个命令也是同样结果!换个方式,在命令行下输 入命令:ping 127..0.1,同样可以 Ping 通,系统还是会自动补充上一个“0”, 变为完整的形式。之所以会这样,是因为在使用Ping命令 Ping 某个IP地址时, 可以省略IP 地址中的空值即为“0”的部分,而使用“ .. ”这种格式可以在其中自动加入空值,于是我们就可以省略其中的“0”了。
如果我们在命令行下分别输入Ping 202.108.36.172 (这是网易的IP 地址)
和Ping 202.108.036.172 ,其回显的结果会不会是一样的呢?开始我以为是一 样的,然而命令执行后的结果大大出乎我的意料——与我想像的完全不一样。在输入Ping 202.108.36.172回车后显示的结果一切正常, 和我们预想的完全一样。 而 Ping 202.108.036.172时在命令提示符窗口中显示的竟然是在Ping 另外一个 IP 地址: 202.108.30.172 (图 2)!
更有趣地是,如果你输入Ping 202.108.044.172回车,此时在命令提示符 窗口中显示的是我们在Ping 地址 202.108.36.172(图 3) !
这是不是也很出乎预料?除了Windows系统以外,在 FreeBSD上测试的结果也是一样的。
为什么会这样呢?这是因为系统将上述IP地址中的“ 036”当成八进制而 非十进制数字了,八进制数值“036”转换为十进制正好是“30”(你可以用 Windows 自 带 的 计算器来验算),所以系统才会以为我们Ping的是202.108.30.172。在IP地址的十进制数字前面加上0就表示这是八进制数,如果加上0x 则表示这是十六进制数值。我们可以验证一下,在命令提示符下输入Ping 0x7f.0.0.1,回车之后你会发现我们 Ping 的是127.0.0.1 。因为0x7f正是十进制数值127的十六进制表示方式。再试试输入Ping 0x7f.0..1,猜猜看会怎么样?没错,这样输入 Ping的还是127.0.0.1这个IP地址。
注意,在使用 Ping命令Ping某IP地址时,在IP地址的四部分中只能有一部分可以采用八进制或十六进制才输入,其余部分必须还得是十进制数值,否则会出错 。比方说 ,你要是将IP地址202.108.36.172转为八进制0312.0154.044.0254 ,然后去Ping ,系统会报告错误(图4),同样的,如果将点分十进制IP地址的各个部分全部转为十六进制, 然后去Ping系统也会报告出错,无法Ping 通。所以还是老老实实采用十进制的IP地址去Ping的好。