百度知道 百度文库十分钟赚10元内有问必答 立即下载 :编号9999904162的ip地址是多少

怎么找&和查看主机&的MAX硬件地址&Ping程序在TCP/IP中的应用
怎么找 和查看主机 的MAX硬件地址
Ping程序在TCP/IP中的应用&&
16:56:53|&&分类:
|&&标签:&&
|字号大中小&订阅
在开始 的运行命令
输入CMD&& 接着输 IPCONFIG
/ALL& 查看主机&
的MAX硬件地址& 和连接
Ping程序在TCP/IP中的应用
我们称发送回显请求的ping程序为客户,而称被ping的主机为服务器。大多数的TCP/IP实现都在内核中直接支持Ping服务器—这种服务器不是一个用户进程(在第6章中描述的两种ICMP查询服务,地址掩码和时间戳请求,也都是直接在内核中进行处理的)。
ICMP回显请求和回显应答报文如图1所示。
图1 ICMP回显请求和回显应答报文格式
对于其他类型的I C M
P查询报文,服务器必须响应标识符和序列号字段。另外,客户发送的选项数据必须回显,假设客户对这些信息都会感兴趣。
U n i x系统在实现p i n g程序时是把I C M
P报文中的标识符字段置成发送进程的I D号。这样即使在同一台主机上同时运行了多个p i n g程序实例,p i n
g程序也可以识别出返回的信息。
序列号从0开始,每发送一次新的回显请求就加1.p i n
g程序打印出返回的每个分组的序列号,允许我们查看是否有分组丢失、失序或重复。I
P是一种最好的数据报传递服务,因此这三个条件都有可能发生。
旧版本的p i n
g程序曾经以这种模式运行,即每秒发送一个回显请求,并打印出返回的每个回显应答。但是,新版本的实现需要加上-s选项才能以这种模式运行。默认情况下,新版本的p
i n g程序只发送一个回显请求。如果收到回显应答,则输出“host is alive ”;否则,在2 0秒内没有收到应答就输出“no
answer(没有回答)”。
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执行过程中,会同时包含“Request timed out.”和“Reply from
.1: bytes=32 time&1ms
TTL=128”这样的信息,这种情况则表示网络不太稳定,存在丢包现象,对此大家可以使用“ping IP地址
-t”即在原有的命令后加上“-t”参数,这样ping就会连续尝试与目标主机进行连接,以此观察网络的稳定性。当然从返回信息的“time&1ms”也是一个很重要的信息,如果网络很畅通,例如测试与内网主机的连接,一般都会是“time&1ms”,若该数值比较大,同样说明网络不够稳定,可能是设备不兼容,可能是节点接触不好,也可能是网络内有大量病毒导现堵塞等。
三、验证DNS服务器
DNS服务器负责将域名(网址)转换成IP地址,我们可以使用ping命令判断其配置是否正确以及工作是否正常。
其方法很简单,只需要在命令提示下输入“ping 域名地址”,例如“pint
www.itedit.cn”,如果出现“unknown Host Name”则表明不能到达,返回提示“Reply from
222.191.251.34: bytes=32 time=27ms
TTL=120”则证明DNS服务器能够成功将域名转换为IP地址。借助这个方法,我们也可以查看知名网站所使用的IP地址(如下图)。
掌握Ping命令的正确使用,对于我们快速判断网络故障有着非常大的帮助,希望笔者的一点抛砖引玉能够对大家有所帮助。
如何正确使用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
-t Ping the specified host until
stopped.To see statistics and continue - type Control-BTo 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),Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average =
从上面就可以知道IP为192.168.1.21的计算机NetBios名为iceblood.yofor.com。
-n count Number of echo requests to
发送count指定的Echo数据包数。
在默认情况下,一般都只发送四个数据包,通过这个命令可以自己定义发送的个数,对衡量网络速度很有帮助,比如我想测试发送50个数据包的返回的平均时间为多少,最快时间为多少,最慢时间为多少就可以通过以下获知:
C:\&ping -n 50
202.103.96.68
Pinging 202.103.96.68 with 32 bytes of
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),Approximate round trip times in milli-seconds:
Minimum = 40ms, Maximum = 51ms, Average
从以上我就可以知道在给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
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
在数据包中发送“不要分段”标志。
在一般你所发送的数据包都会通过路由分段再发送给对方,加上此参数以后路由就不会再分段处理。
-i TTL Time To Live.
指定TTL值在对方的系统里停留的时间。
此参数同样是帮助你检查网络运转情况的。
-v TOS Type Of Service.
将“服务类型”字段设置为 tos 指定的值。
-r count Record route for count
在“记录路由”字段中记录传出和返回数据包的路由。
在一般情况下你发送的数据包是通过一个个路由才到达对方的,但到底是经过了哪些路由呢?通过此参数就可以设定你想探测经过的路由的个数,不过限制在了9个,也就是说你只能跟踪到9个路由,如果想探测更多,可以通过其他命令实现,我将在以后的文章中给大家讲解。以下为示例:
C:\&ping -n 1 -r 9
202.96.105.101 (发送一个数据包,最多记录9个路由)
Pinging 202.96.105.101 with 32 bytes of
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
从上面我就可以知道从我的计算机到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_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"DefaultTTL"=dword:000000ff
如何使用ping和tracert命令检测丢包
我如何测试丢包?我知道ping一个网站的信息和跟踪路由的信息。但是,我曾经听一些人说他们的宽带网连接上有丢包的问题。我怀疑我也许遇到了丢包的问题,因为当我进行速度测试的时候,速度比以前慢了。我没有改变硬件或者使用任何新的应用软件。
从家里测试宽带网连接的丢包是一项非常困难的工作。丢包可以发生在从你的计算机到你在互联网上正在连接的目的地之间的线路上的任何一个地方。引起丢包的原因包括:网络阻塞、路由器或者交换机超过工作负荷、信号往返时间缓慢以及服务提供商或者托管你访问的网站的公司使用的通信优先等级。
没有主动测量实际重复传输的TCP流量(对于家庭宽带网连接来说,这类产品太昂贵了),很难确定是否真的发生了重复传输。你指出的机制ping和跟踪路由对于帮助家庭用户确定互联网上哪里的速度慢是最有用的工具。Ping测量你的计算机和你要连接的IP地址之间的信号往返时间。跟踪路由是测量路由器在你的计算机和你正在跟踪的路由的IP地址之间的通道的反应时间。
使用Ping测量丢包的最佳方法是向一个IP地址发送大量的Ping命令,然后检查没有应答的那些Ping命令。如果你快速地发出了50次Ping命令,你可以检查没有没有应答的次数,并把没有应答的次数作为丢包。没有应答的次数超过5%可能就值得担心了。
在一台Windows计算机上,在命令提示符后面输入如下命令就可以完成这个任务:
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)上传输。这是互联网美妙的一部分。不利的方面是一个用户无法解决反应时间减慢的问题。最佳的出发点就是确认你和你的服务提供商之间没有出现丢包。
使用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转为八进制4.0254,然后去Ping,系统会报告错误(图4),同样的,如果将点分十进制IP地址的各个部分全部转为十六进制,然后去Ping系统也会报告出错,无法Ping通。所以还是老老实实采用十进制的IP地址去Ping的好。
ping的作用
Ping是潜水艇人员的专用术语,表示回应的声纳脉冲,在网络中Ping
是一个十分好用的TCP/IP工具。它主要的功能是用来检测网络的连通情况和分析网络速度。
Ping有好的善的一面也有恶的一面。先说一下善的一面吧。上面已经说过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] destination-list
Ping 指定的计算机直到中断。
将地址解析为计算机名。
发送 count 指定的 ECHO 数据包数。默认值为 4。
发送包含由 length 指定的数据量的 ECHO 数据包。默认为 32
字节;最大值是65,527。
在数据包中发送不要分段标志。数据包就不会被路由上的网关分段。
将生存时间字段设置为 ttl 指定的值。
将服务类型字段设置为 tos 指定的值。
在记录路由字段中记录传出和返回数据包的路由。count 可以指定最少 1
台,最多 9 台计算机。
指定 count 指定的跃点数的时间戳。
-j computer-list
利用 computer-list
指定的计算机列表路由数据包。连续计算机可以被中间网关分隔(路由稀疏源)IP 允许的最大数量为 9。
-k computer-list
利用 computer-list
指定的计算机列表路由数据包。连续计算机不能被中间网关分隔(路由严格源)IP 允许的最大数量为 9。
-w timeout
指定超时间隔,单位为毫秒。
destination-list
指定要 ping 的远程计算机。
Ping的返回信息有Request Timed Out、Destination
Net Unreachable和Bad IP address还有Source quench received。
Request Timed Out这个信息表示对方主机可以到达到TIME
OUT,这种情况通常是为对方拒绝接收你发给它的数据包造成数据包丢失。大多数的原因可能是对方装有防火墙或已下线。
Destination Net
Unreachable这个信息表示对方主机不存在或者没有跟对方建立连接。这里要说明一下destination host
unreachable和time
out的区别,如果所经过的路由器的路由表中具有到达目标的路由,而目标因为其它原因不可到达,这时候会出现time
out,如果路由表中连到达目标的路由都没有,那就会出现destination host unreachable。
Bad IP address
这个信息表示你可能没有连接到DNS服务器所以无法解析这个IP地址,也可能是IP地址不存在。
Source quench
received信息比较特殊,它出现的机率很少。它表示对方或中途的服务器繁忙无法回应。
怎样使用Ping这命令来测试网络连通呢?
连通问题是由许多原因引起的,如本地配置错误、远程主机协议失效等,当然还包括设备等造成的故障。
首先我们讲一下使用Ping命令的步骤。
使用Ping检查连通性有五个步骤:
1. 使用ipconfig /all观察本地网络设置是否正确;
2. Ping 127.0.0.1,127.0.0.1
回送地址Ping回送地址是为了检查本地的TCP/IP协议有没有设置好;
3. Ping本机IP地址,这样是为了检查本机的IP地址是否设置有误;
Ping本网网关或本网IP地址,这样的是为了检查硬件设备是否有问题,也可以检查本机与本地网络连接是否正常;(在非局域网中这一步骤可以忽略)
Ping远程IP地址,这主要是检查本网或本机与外部的连接是否正常。
在检查网络连通的过程中可能出现一些错误,这些错误总的来说分为两种最常见。
1. Request Timed Out
request time
out这提示除了在《PING(一)》提到的对方可能装有防火墙或已关机以外,还有就是本机的IP不正确和网关设置错误。
①、IP不正确:
IP不正确主要是IP地址设置错误或IP地址冲突,这可以利用ipconfig
/all这命令来检查。在WIN2000下IP冲突的情况很少发生,因为系统会自动检测在网络中是否有相同的IP地址并提醒你是否设置正确。在NT中不但会出现request
time out这提示而且会出现Hardware error这提示信息比较特殊不要给它的提示所迷惑。
②、网关设置错误:这个错误可能会在第四个步骤出现。网关设置错误主要是网关地址设置不正确或网关没有帮你转发数据,还有就是可能远程网关失效。这里主要是在你Ping外部网络地址时出错。错误表现为无法Ping外部主机返回信息Request
2. Destination Host Unreachable
当你在开始PING网络计算机时如果网络设备出错它返回信息会提示destination host
unreachable。如果局域网中使用DHCP分配IP时,而碰巧DHCP失效,这时使用
PING命令就会产生此错误。因为在DHCP失效时客户机无法分配到IP系统只有自设IP,它往往会设为不同子网的IP。所以会出现Destination
Host Unreachable。另外子网掩码设置错误也会出现这错误。
还有一个比较特殊就是路由返回错误信息,它一般都会在Destination
Unreachable前加上IP地址说明哪个路由不能到达目标主机。这说明你的机器与外部网络连接没有问题,但与某台主机连接存在问题。
举个例子吧。
我管理的网络有19台机,由一台100M集线器连接服务器,使用DHCP动态分配IP地址。
有一次有位同事匆忙地告诉我我的OUTLOOK打不开了,我到他机器检查,首先我检查了本地网络设置,我用ipconfig
/all看IP分配情况一切正常。接着我就开始PING网络中的其中一台机器,第一次PING结果很正常,但OUTLOOK还是无法使用其它网络软件和Copy网络文件都可以使用但网络速度很慢,第二次PING我用了一个参数-t(-t可以不中断地PING对方,当时我想PING一次可能发现不了问题)发现有time=30ms和request
time out,从服务器PING这台机就更有趣,request time
out比正常数据还多,在局域中竟然有time=30ms和request time
out太不正常了。开始我认为是网卡的问题但换网卡后故障依旧,重做网线还是不能解决问题,这故障真有趣!最后我没办法了把它插在集线器端口上的另一端的网线换到另一个端口,哈!故障解决了。原来是集线器端口坏了。
如何用Ping命令来判断一条链路的速度?
Ping这个命令除了可以检查网络的连通和检测故障以外,还有一个比较有趣的用途,那就是可以利用它的一些返回数据,来估算你跟某台主机之间的速度是多少字节每秒
我们先来看看它有那些返回数据。
Pinging 202.105.136.105 with 32 bytes
Reply from 202.105.136.105: bytes=32
time=590ms TTL=114
Reply from 202.105.136.105: bytes=32
time=590ms TTL=114
Reply from 202.105.136.105: bytes=32
time=590ms TTL=114
Reply from 202.105.136.105: bytes=32
time=601ms TTL=114
Ping statistics for
202.105.136.105:
Packets: Sent = 4, Received = 4, Lost =
0 (0% loss),
Approximate round trip times in
milli-seconds:
Minimum = 590ms, Maximum = 601ms,
Average = 593ms
在例子中bytes=32表示ICMP报文中有32个字节的测试数据(这是估算速度的关键数据),time=590ms是往返时间。
怎样估算链路的速度呢?举个例子吧。我们把A和B之间设置为PPP链路。
从上面的PING例子可以注意到,默认情况下发送的ICMP报文有32个字节。除了这32个字节外再加上20个字节的IP首部和8个字节的ICMP首部,整个IP数据报文的总长度就是60个字节(因为IP和ICMP是Ping命令的主要使用协议,所以整个数据报文要加上它们)。另外在使用Ping命令时还使用了另一个协议进行传输,那就是PPP协议(点对点协议),所以在数据的开始和结尾再加上8个字节。在传输过程中,由于每个字节含有8bit数据、1bit起始位和1bit结束位,因此传输速率是每个字节2.98ms。由此我们可以估计需要405ms。即68*2.98*2(乘2是因为我们还要计算它的往返时间)。
我们来测试一下33600 b/s的链路:
Pinging 202.105.36.125 with 32 bytes of
Reply from 202.105.36.125: bytes=32
time=415ms TTL=114
Reply from 202.105.36.125: bytes=32
time=415ms TTL=114
Reply from 202.105.36.125: bytes=32
time=415ms TTL=114
Reply from 202.105.36.125: bytes=32
time=421ms TTL=114
Ping statistics for 202.105.36.125:
Packets: Sent = 4, Received = 4, Lost =
0 (0% loss),
Approximate round trip times in
milli-seconds:
Minimum = 415ms, Maximum = 421ms,
Average = 417ms
看是不是差不多啊。^_^
这里大家可能要注意到,这估算值跟实际值是有误差的,为什么呢?因为我们现在估算的是一个理论值,还有一些东西我们没有考虑。比如在网络中的其它干扰,这些干扰主要来之别的计算机。因为在你测试时不可能全部计算机停止使用网络给你做测试,这是不实际的。另外就是传输设备,因为有某些设备如MODEM它在传输时会把数据压缩.
高效排除网络故障 从用好Ping命令开始
对于那些从事网络管理与维护工作或者经常上网的朋友来说,遇到网络故障几乎是一件不可避免的事情。面对稀奇古怪的网络故障,相信不少人会感觉到无从下手,于是他们往往会求助各种专业的故障诊断工具,希望能通过这些专业工具快速找到故障原因,以便及时采取措施进行针对性应对。
事实上,无论是什么类型的故障诊断工具,在一些特殊网络故障面前都会显得无能为力;此时,我们所能做的就是依靠自己,从使用Ping命令开始,手工逐步排查故障原因。
着眼顺序,用好Ping命令
尽管Ping命令平时看上去很平凡稀松,但是在关键时刻使用该命令,它有时能发挥出意想不到的作用。当然,要想让Ping命令有效发挥作用,我们首先需要掌握使用该命令排查故障的一些测试顺序,只要依照顺序依次排查,再难解决的网络故障也能被很快解决掉,下面就是使用Ping命令测试故障原因的具体操作顺序:
首先对本地工作站的循环地址127.0.0.1进行ping测试。当遇到一些无法直接找到故障原因的特殊网络故障时,我们首先需要使用Ping命令测试一下本地工作站的循环地址127.0.0.1能否被正常Ping通,倘若该地址无法被正常Ping通的话,那么说明本地工作站的TCP/IP协议程序受到了破坏,或者网卡设备发生了损坏。
此时,我们不妨打开本地工作站系统的设备管理器窗口,从中找到网卡设备选项,并用鼠标右键单击该选项,从弹出的快捷菜单中执行“属性”命令,打开网卡设备的属性设置窗口,在该窗口的“常规”标签页面中我们就能看到当前的网卡工作状态是否正常了(如下图所示)。
当发现网卡工作状态正常的话,那很有可能是本地工作站的TCP/IP协议程序受到了破坏,此时我们不妨打开本地连接属性设置窗口,选中并删除该设置窗口中的TCP/IP协议选项,之后再重新安装一下TCP/IP协议程序,相信这么一来本地工作站的循环地址127.0.0.1就能被正常Ping通了。
其次对本地工作站的IP地址进行ping测试。在确认127.0.0.1地址能够被Ping通的情况下,我们继续使用Ping命令测试一下本地工作站的静态IP地址是否能被正常Ping通,倘若该地址不能被正常Ping通的话,那么说明本地工作站的网卡参数没有设置正确,或者网卡驱动程序不正确,也有可能是本地的路由表受到了破坏。
此时我们可以重新检查一下本地工作站的网络参数是否设置正确,如果在网络参数设置正确的情况下仍然无法Ping通本地IP地址的话,我们最好重新安装一下网卡设备的原装驱动程序,相信这么一来我们就能正确Ping通本地工作站的静态IP地址了。一旦本地工作站的静态IP地址被顺利Ping通的话,那就表明本地工作站已经能够加入到局域网网络中了。
接着对本地局域网的默认网关地址进行ping测试。由于本地工作站是通过网关与局域网中的其他工作站进行相互通信的,只有本地工作站与默认网关之间连接正常,才能确保本地工作站与其他工作站通信正常。倘若网关地址能被正常Ping通的话,那就表明本地工作站可以与局域网中的其他工作站进行正常通信。
要是Ping命令操作不成功的话,那很有可能是网关设备自身存在问题,或者是本地工作站与网关之间的线路连接不正常,也有可能是本地工作站与网关没有设置成同一个子网中。此时,我们可以先用专业的线缆测试工具测试一下网络线缆的连通性,在线缆连通性正常的情况下,再检查本地工作站的网络参数是否与网关的参数设置成同一个子网中。
倘若网络参数设置正确的话,我们再从其他工作站Ping一下网关地址,以便确认网关自身是否存在原因,如果局域网中的其他工作站也无法Ping通网关的话,那多半是网关设备自身存在问题,这个时候我们只要将故障排查重点锁定在网关设备上就可以了。
下面对局域网中任意一台远程工作站的IP地址进行ping测试,以便检验本地工作站能否通过网关设备与局域网中的其他工作站进行通信。要是我们发现远程工作站的IP地址无法Ping通的话,那很有可能是远程工作站自身无法响应,或者是远程工作站与网关设备之间的线路连接出现了问题,此时我们可以将网络故障的排查重点聚焦到远程工作站上或者是局域网的网络设备上。
最后对局域网的远程工作站主机名称进行ping测试。在确认能够Ping通远程工作站IP地址的情况下,仍然出现无法访问远程工作站内容的时候,我们就有必要进行这一项测试操作。如果该主机名称无法被Ping成功的话,那很有可能是DNS解析出现了问题,而不是网络连接发生了故障,此时我们不妨把故障检查重点锁定在DNS服务器上。
小提示:为了有效地找出网络故障原因,我们在使用Ping命令进行测试检查时,尽量确保局域网中只配置了一个网关,同时确保本地工作站没有启用IP安全设置策略,这样可以保证Ping命令能够获得正确的测试结果。
着眼安全,停用Ping功能
在网络访问一切正常的情况下,我们有时使用Ping命令测试某个地址的连通性时,会出现Ping不通的现象,其实这种现象并不能算是网络故障,因为目前不少病毒程序会通过Ping命令向局域网中发送大量的垃圾包,以便实施ddos攻击,而许多服务器或工作站为了远离这样的非法攻击,常常会采取措施将Ping功能关闭掉,如此一来就会出现在网络访问一切正常的情况下,仍然发生Ping不通的奇怪现象。
为了保护本地工作站的安全,我们在平时可以采取如下措施,确保其他用户无法Ping通本地工作站的IP地址:
首先依次单击“开始”/“设置”/“控制面板”命令,在其后弹出的控制面板窗口中双击“管理工具”图标,再双击“本地安全策略”项目,之后依次选中其后界面中的“安全设置”、“IP安全策略”选项,在对应“IP安全策略”选项的右侧显示区域中,用鼠标右键单击空白区域,并执行快捷菜单中的“创建IP安全策略”命令,打开如下图所示的创建向导窗口;
单击该窗口中的“下一步”按钮,并将IP安全策略的名称设置为“NoPing”,之后按照向导提示逐步单击“下一步”按钮,完成IP安全策略的创建任务。当创建好IP安全策略后,打开本地工作站系统的组策略编辑界面,在该编辑界面的左侧显示区域依次选择“计算机配置”、“Windows设置”、“安全设置”、“IP安全设置,在本地计算机上”选项,并在该选项的右侧显示区域选中“NoPing”IP安全策略,并用鼠标右击该选项,从弹出的右键菜单中执行“指派”命令,如此一来本地工作站的Ping功能就被暂时停止使用了。
小提示:除了通过停用Ping功能来增强本地工作站的安全防范性能外,我们也可以通过伪装Ping命令测试结果的方法,来保护本地工作站或服务器的安全。例如,在进行Ping命令测试时,如果DefaultTTL结果为128的话,我们就能判断目标主机的操作系统类型为Windows系统,如果DefaultTTL结果为64的话,那目标主机的操作系统类型为Linux系统,根据这样的测试结果信息黑客就有可能实施有针对性地攻击,为此我们可以故意伪装DefaultTTL结果信息,以便给黑客返回一个错误的结果,从而让黑客发动的非法攻击偏离方向。
要伪装DefaultTTL结果信息,我们只要先打开系统的注册表编辑窗口,并依次展开“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters”分支,然后在“Parameters”分支下面创建一个“DefaultTTL”双字节值,再将它的数值设置成其他任意一个数字。
例如在Windows系统下,我们可以尝试将DefaultTTL结果信息设置成“64”,那样一来黑客使用Ping命令测试本地工作站时,还认为本地工作站安装了Linux系统,于是他们可能会针对Linux系统发动攻击,但这样的攻击不会对Windows系统工作站造成任何影响,如此一来本地工作站的安全性就得到了一定程度的保证。
着眼网速,用好pathping
2000以上版本的工作站系统中,Ping命令还有一个“兄弟”作伴,这位“兄弟”其实就是平时很少露面的pathping命令,该命令在关键时刻也能帮助我们找到网络故障原因。例如在网络访问速度非常缓慢的情况下,我们使用Ping命令或许根本找不到造成网络访问速度缓慢的故障原因,此时使用pathping命令,我们就能轻易地找到究竟在哪一个网络连接环节出现了数据丢包现象。
当我们发现本地工作站上网速度非常缓慢的时候,可以依次单击“开始”/“运行”命令,在弹出的系统运行框中输入“cmd”字符串命令,单击“确定”按钮后,将系统切换到MS-DOS运行状态;
其次在DOS命令行中,输入字符串命令“pathping
xxx”(其中“xxx”为本地工作站指定的DNS服务器IP地址),单击回车键后,我们就能从随后的结果信息中看到在访问DNS服务器过程中,中途经过了几个中间路由器(如下图所示)。
并且能清楚地知道究竟在哪一个跳转环节发生了数据丢包或网络延时现象。如果我们发现某一个路由器的数据丢包率非常高的话,那么该路由器很有可能出现了意外,此时我们只要将故障检查重点锁定在对应路由器设备上就可以了。
网关无法Ping通故障及解决方法
很多网络故障是常见问题,一般的三板斧方法就能解决问题,但有些故障容易让我们多走弯路,我们不妨拓宽故障排查范围,换换思路。 
在与网络亲密接触的过程中,我们或多或少地会遇到一些网络故障,对于许多网络故障来说,我们只要根据其具体现象就能快速找到故障原因;然而也有一些稀奇的网络故障,简单地依照故障现象往往很难找到故障原因,在排除这类故障时,我们很容易多走弯路。事实上,任何网络故障都会事出有因,在排除了各种可能因素后,仍然无法解决网络故障时,我们不妨拓宽故障排查范围,仔细检查与故障现象相关联的一些细节因素,说不定能很快将网络故障解决掉。 
本文下面的一则网络故障,就是由于在安装过程中不小心选错了网卡类型引起的,如果我们忽略了网卡类型细节,那么网络故障的排除之路就会变得比较复杂! 
故障现象:网关无法Ping通 
为了让单位的两个不同子网都能访问到办公室中Windows
2000服务器系统的内容,领导要求笔者再为Windows
2000服务器所在主机安装一块网卡设备,以便让该服务器同时连接到两个不同子网中。对于这样的小事情,笔者压根就没有放在眼里。说干就干,笔者立即到市场中购买了一块10/100Mbps自适应的网卡设备,并将买来的网卡设备插入到服务器主机的空余插槽中,之后重新启动服务器系统;当系统弹出提示要求安装网卡设备的驱动程序时,笔者依照提示进行了网卡驱动程序的安装操作;整个网卡安装过程很顺利,系统什么错误提示也没有出现。安装好网卡设备后,笔者立即进入到服务器的网络连接列表窗口,找到于新网卡对应的网络连接图标,并用鼠标右键单击该图标,从弹出的快捷菜单中单击“属性”命令,打开了新网络连接属性设置界面,在该界面中笔者将新网卡设备的IP地址设置成10.192.168.11,并将网关地址设置成10.192.168.1,完成了所有网络参数设置操作后,笔者又一次重新启动了服务器系统。待服务器系统重新启动成功后,笔者打开了MS-DOS窗口,并在该窗口的命令行中执行了字符串命令“ping
10.192.168.11”,结果发现本地网卡设备的IP地址能够被ping通,这就意味着网卡驱动的安装是正确的,并且对应该网卡设备的上网参数也是设置正确的;之后笔者又执行字符串命令“ping
10.192.168.1”,可是该命令返回的结果告诉笔者,网关地址无法ping通。 
故障排查:线缆?交换机端口?驱动? 
遇到网关地址无法ping通现象时,笔者想也没想就认为网络线缆肯定存在问题;于是笔者特意找来网线测试仪,对这条网络线缆的连通性进行了测试,测试结果表明网络线缆一切正常。笔者有点不甘心,又找来了一根能够正常工作的网络线缆进行替代,然后重新进行了ping命令测试,结果发现网关地址仍然还无法Ping通。 
会不会是连接新网卡的交换机端口存在故障呢?想到这一点,笔者立即尝试将新网卡连接到交换机的另外一个端口中,再进行Ping测试,可是结果还是一样。不得已,笔者只好将自己使用的笔记本电脑搬来,并使用先前的网络线缆将笔记本电脑与交换机连接在一起,之后再次执行字符串命令“ping
10.192.168.1”,不过这样的努力仍然没有任何效果。 
考虑到服务器系统能够通过已有的一块网卡正常访问另外一个子网,笔者认为服务器系统自身肯定不会存在问题,而且服务器系统平时有各种安全软件的保护,笔者相信该故障与网络病毒也没有什么关系。在排来查去后,笔者开始怀疑新买的网卡设备是否存在质量问题了;但转念一想,本地网卡设备的IP地址是可以Ping通的呀,难道网卡驱动程序版本比较旧?不得已,笔者只好到网上重新下载了最新版本的驱动程序,然后将网卡重新安装了一遍,原以为这次肯定能够解决网络故障;但是,当笔者再次尝试进行网关地址Ping测试时,发现网络故障一切照旧。 
到了这里,笔者简直想放弃了;网络线缆没有问题,交换机连接端口没有问题,网卡设备没有问题,驱动程序的安装设置也没有问题,可是网关地址就是无法Ping通,你说这种网络故障还怎么排除?
真凶原来是:选错了网卡类型 
在万般无奈之下,笔者偶然看到了放在地上的交换机设备,笔者顺手将它拿了起来,并对它进行了仔细观察,发现该设备还是10M标准呢。由于笔者新安装的网卡设备是10/100Mbps自适应标准,会不会是新网卡与交换机之间在通信速度的选择上没有达成一致,从而导致了网关地址无法Ping通? 
基于这样的分析,笔者立即用鼠标右键单击服务器系统桌面中的“我的电脑”图标,从弹出的快捷菜单中单击“属性”命令,进入到服务器系统属性界面;单击该界面中的“硬件”标签,并在对应的标签页面中单击“设备管理器”按钮,打开了服务器系统的设备列表窗口。在该窗口中用鼠标展开“网络适配器”分支,并在该分支下面双击新网卡设备,打开该网卡的属性设置界面;单击该界面中的“高级”标签,进入到网卡设备的高级设置页面,在该页面笔者看到网卡设备的类型不知怎么竟然被设置成了“100M全双工”模式,笔者尝试将它变成“Auto
negotiation”,之后单击“确定”按钮结束网卡类型修改操作,并且又重新启动了一下服务器系统,结果再次进行网关地址Ping测试操作时,笔者看到这一次Ping测试操作竟然成功了。很明显,网关地址无法被Ping通的网络故障,其实就是由于网卡工作类型被设置不当造成的。 
故障总结 
仔细回顾上述网络故障的排除过程,笔者认为之所以会多走弯路,主要是过分相信了网卡驱动的自动安装过程,而没有仔细对网卡的相关设置进行检查。由于这次网卡安装操作,不知道什么原因网卡工作类型竟然被设置成了“100M全双工”模式,而交换机恰好使用的是10M标准,这么一来网卡自然与交换机之间难以达成匹配,从而导致了网关地址无法Ping通的网络故障。因此,当我们日后在排除了各种可能因素后,仍然无法解决网络故障时,不妨拓宽故障排查范围,仔细检查与故障现象相关联的一些细节因素,说不定能很快将网络故障解决掉。
通过ping检测网络故障的典型次序
正常情况下,当你使用Ping命令来查找问题所在或检验网络运行情况时,你需要使用许多Ping命令,如果所有都运行正确,你就可以相信基本的连通性和配置参数没有问题;如果某些Ping命令出现运行故障,它也可以指明到何处去查找问题。下面就给出一个典型的检测次序及对应的可能故障:
127.0.0.1——这个Ping命令被送到本地计算机的IP软件,该命令永不退出该计算机。如果没有做到这一点,就表示TCP/IP的安装或运行存在某些最基本的问题。
本机IP——这个命令被送到你计算机所配置的IP地址,你的计算机始终都应该对该Ping命令作出应答,如果没有,则表示本地配置或安装存在问题。出现此问题时,局域网用户请断开网络电缆,然后重新发送该命令。如果网线断开后本命令正确,则表示另一台计算机可能配置了相同的IP地址。
局域网内其他IP——这个命令应该离开你的计算机,经过网卡及网络电缆到达其他计算机,再返回。收到回送应答表明本地网络中的网卡和载体运行正确。但如果收到0个回送应答,那么表示子网掩码(进行子网分割时,将IP地址的网络部分与主机部分分开的代码)不正确或网卡配置错误或电缆系统有问题。
网关IP——这个命令如果应答正确,表示局域网中的网关路由器正在运行并能够作出应答。
远程IP——如果收到4个应答,表示成功的使用了缺省网关。对于拨号上网用户则表示能够成功的访问Internet(但不排除ISP的DNS会有问题)。
localhost——localhost是个作系统的网络保留名,它是127.0.0.1的别名,每太计算机都应该能够将该名字转换成该地址。如果没有做到这一带内,则表示主机文件(/Windows/host)中存在问题。
7.ping www.yahoo.com——对这个域名执行Pin ……
地址,通常是通过DNS 服务器
如果这里出现故障,则表示DNS服务器的IP地址配置不正确或DNS服务器有故障(对于拨号上网用户,某些ISP已经不需要设置DNS服务器了)。顺便说一句:你也可以利用该命令实现域名对IP地址的转换功能。
如果上面所列出的所有Ping命令都能正常运行,那么你对你的计算机进行本地和远程通信的功能基本上就可以放心了。但是,这些命令的成功并不表示你所有的网络配置都没有问题,例如,某些子网掩码错误就可能无法用这些方法检测到。
Ping命令的常用参数选项
-t——连续对IP地址执行Ping命令,直到被用户以Ctrl+C中断。
ping IP -l
2000——指定Ping命令中的数据长度为2000字节,而不是缺省的32字节。
ping IP -n——执行特定次数的Ping命令。
Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。
如果你的计算机有时候接受到的数据报会导致出错数据删除或故障,你不必感到奇怪,TCP/IP可以容许这些类型的错误,并能够自动重发数据报。但如果累计的出错情况数目占到所接收的IP数据报相当大的百分比,或者它的数目正迅速增加,那么你就应该使用Netstat查一查为什么会出现这些情况了。
通过Ping命令排除路由器故障
在路由器的故障分析中,Ping命令是一个常见而实用的网络管理工具,用这种工具可以测试端到端的连通性,即检查源端到目的端网络是否通畅。
Ping的原理很简单,就是从源端向目的端发出一定数量的网络包,然后从目的端返回这些包的响应,如果在一定的时间内源端收到响应,则程序返回从包发出到收到的时间间隔,根据时间间隔就可以统计网络的延迟。如果网络包的响应在一定时间间隔内没有收到,则程序认为包丢失,返回请求超时的结果。我们经常让
Ping一次发一定数量的包,然后检查收到相应的包的数量,则可统计出端到端网络的丢包率,而丢包率是检验网络质量的重要参数。
在路由器上Ping返回符号的含义如下表所示:
! 收到一个响应。
。  在等待时,网络服务器超时。
U 目标无法到达,受到错误的PDU.
Q 源消失(目标设备太忙)。
M 数据无法分割。
? 包类型未知。
& 报的有效期过了。
在路由器上无法Ping通一个地址的原因有很多种,譬如线路故障,对方路由器的接口没有起来,路由器的路由表中没有该地址的路由信息等等都会造成网络无法Ping通。
网络结构如(图1)示。
Router1#Ping 34.0.0.4
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to
34.0.0.4, timeout is 2 seconds:
Success rate is 0 percent (0/5)
在Router1上无法Ping通Router4的接口,通过使用DEBUG命令来获得更多的信息,便于进一步的分析:
Router1#debug ip packet
IP packet debugging is on
Router1#Ping 34.0.0.4
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to
34.0.0.4, timeout is 2 seconds:
5d21h: IP: s=12.0.0.1 (local),
d=34.0.0.4, Len 100, unroutable.
5d21h: IP: s=12.0.0.1 (local),
d=34.0.0.4, Len 100, unroutable.
Success rate is 0 percent (0/5) 我们看到
“unroutable”的消息,表明在Router1的路由表中不存在该地址的路由信息,Router1不知道该地址向何处转发,现增加一条缺省路由到Router1中:
Router1#configure terminal
Enter configuration commands,
one per line. End with CNTL/Z.
Router1(config)#ip route 0.0.0.0
0.0.0.0 Serial0/0
然后,再在Router1上使用Ping:
Router1#Ping 34.0.0.4
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to
34.0.0.4, timeout is 2 seconds:
Success rate is 0 percent (0/5)
6d03h: IP: s=12.0.0.1 (local),
d=34.0.0.4 (Serial0/0), Len 100, sending
6d03h: ICMP type=8, code=0
6d03h: IP: s=12.0.0.2 (Serial0/0),
d=12.0.0.1 (Serial0/0), Len 56, rcvd 3
6d03h: ICMP type=3, code=1
再看看在Router2上收到了什么信息:
21:56:04: IP: s=12.0.0.1 (Serial1),
d=34.0.0.4, Len 100, unroutable
21:56:04: ICMP type=8,
21:56:04: IP: s=12.0.0.2 (local),
d=12.0.0.1 (Serial1), Len 56, sending
21:56:04: ICMP type=3,
从上面的信息可以看出Router1已经能正确地发送包到Router2,但好象Router2并不知道如何转发地址34.0.0.4,所以
Router2发送了“unreachable”的消息给Router1.因此分别给Router2和Router3加上动态路由协议RIP:
router rip
network 12.0.0.0
router rip
network 12.0.0.0
network 23.0.0.0
router rip
network 23.0.0.0
network 34.0.0.0
然后,在Router1上Ping Router4的接口:
Router1#Ping 34.0.0.4
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to
34.0.0.4, timeout is 2 seconds:
5d21h: IP: s=12.0.0.1 (local),
d=34.0.0.4 (Serial0/0), Len 100, sending.
5d21h: IP: s=12.0.0.1 (local),
d=34.0.0.4 (Serial0/0), Len 100, sending.
Success rate is 0 percent (0/5)
现在情况看起来好点,Router1能发包到Router4,只是收不到任何从Router4返回的信息。看来Router4上也有问题:
Router4#6d23h: IP: s=12.0.0.1 (Serial0/0), d=34.0.0.4 (Serial0/0),
Len 100, rcvd 36d23h: IP: s=34.0.0.4 (local), d=12.0.0.1, Len 100,
unroutable……
Router4收到了ICMP的包,但由于没有到12.0.0.1的路由信息,因此无法响应12.0.0.1所发过来的包。在Router4上增加一条缺省路由:
Router4(config)#ip route 0.0.0.0
0.0.0.0 Serial0/0
这样问题得到了解决: Router1#Ping 34.0.0.4Type
escape sequence to abort.Sending 5, 100-byte ICMP Echos to
34.0.0.4, timeout is 2 seconds:!!!!!Success rate is 100 percent
(5/5), round-trip min/avg/max = 32/35/36 ms
网管应透过现象轻松解决Ping故障
当网络出现连接故障时,很多网管人员都会首先使用Ping来查找问题的根源。但是很多人只要发现Ping不通,那么就判断是网络出现了故障。这样只通过表面现象进行判断,很可能掩盖真相。那么我们在使用Ping命令过程中,到底注意哪些问题呢?还是请大家跟我来吧。
一、Request Timed Out
当Ping指定的对象时,出现“Request Timed
Out”提示信息的频率非常高,这说明对方无法接受发送过来的数据。当然这种情况下,很可能就是网络出现了故障,但并不能就因此而确定网络一定不通。因为它还有可能是其它原因造成的。
主机不在线
如果对方关机、禁用网卡或者拨掉网线,那么无论你怎么操作,都不会有连通的信息返回的。要知道最简单的却往往是最容易被忽视的。
防火墙拦截
当安装了防火墙之后,当防火墙工作时,一般都能自动拦截来自网络的Ping命令,从而让其失去响应。同时安装防火墙后,还会造成共享文件无法访问的故障。因此在检查时应该先让对方关闭防火墙,然后再使用Ping命令来检测。
IP安全策略限制
对于很多有经验的网管人员来说,他们都在服务器上添加了IP安全策略,对ICMP报文进行过滤,使Ping命令无法回应,从而返回“Request
Timed Out”的错误提示。
网关设置错误
这种情况主要出现在Ping外部网络地址时才出现。因为当网关设置错误时,Ping发出的数据包无法经网关进行转发。因此需要检查本机的网关设置以及远程网关的配置是否正确。
一般来说,只有在排除上述原因之外,才能够根据“Request Timed
Out”初步判断网络连接可能有问题。
二、Destination Host Unreachable
出现“Destination Host
Unreachable”错误信息时表示对方主机不存在或者没有跟对方建立连接。看起来好像与“Request Timed
Out”差不多,但两者却有关本质的区别。如果Ping命令所发出的数据包经过路由器,并经路由表到达目标的路由,但是因为其它原因(例如防火墙拦截等)导致不可达,那么就是“Request
Timed Out”的提示了;相反如果路由表中没有到达目标的路由信息,那么就会出现“Destination Host
Unreachable”。
出现这种情况主要有以下一些方面的原因:对于使用DHCP自动分配IP地址的网络,很可能是DHCP服务器出错或不能正常工作,这样客户机无法与DHCP正常通讯并获得正确的IP地址,对此只需要修复DHCP服务器即可;另外则可能是子网掩码设置错误,对此只需要修改成正确的即可。
三、Unknown host
该提示表示无法识别的主机,出现这个问题之后是不是就表示目标主机一定有问题呢?当然不能!因为我们使用Ping命令去连接目标主机名称时,主要使用DNS来负责将名称转换成IP地址。例如“Ping
www.163.com”,我们看到的返回信息是“Reply from 220.181.28.42: bytes=32
time=59ms TTL=54”,而不是“Reply from www.163.com: bytes=32 time=59ms
TTL=54”,这就说明我们IP设置中的DNS服务器将www.163.com成功转换为220.181.28.42。因此当我们看到这样的提示时,就应该检查DNS设置是否正确、DNS工作是否正常。
透过表面的现象,看清真实的问题,只有这样才能够帮助我们找出故障的源头,从而对故障有正确的判断。
检测网络故障的利器!ping命令的使用
网络一旦出现故障,首先就应该想到使用“ping”。该命令是专业人员经常用来查找故障原因的基本命令,用以确认能否通过IP网络与通信对象交换信息。该命令在每当出现无法接入目标服务器的故障时,对于了解故障情况非常重要。下面将结合ping命令的用法对此加以介绍。
ping是一条用于分析能否通过IP网络与特定计算机进行通信的命令。向IP地址所指定的对象发送信息,然后等待对方的应答。  
如果能够正常地收到应答,就说明对方的计算机以及中间的线路是正常的。如果没有收到应答,或者收到应答所需的时间太长,就能推断网络的某个地方存在问题。  
ping命令的基本用法非常简单。在Windows
NT/2000/XP系统中打开命令提示符(Windows
98/Me为MS-DOS提示符),只需在ping提示符后面输入想要调查的能否进行通信的计算机的地址即可。  
比如,要调查与IP地址为192.168.4.100的机器之间的通信情况时,只需在命令提示符后面输入“ping
192.168.4.100”即可。指定对方地址时,除IP地址以外,还可使用“yamada2000”等Windows计算机名称和“nnw.nikkeibp.co.jp”等域名。  
输入ping命令后,就会显示出相应的结果。所显示的结果共有3种。   
如果显示为“Relay
from……”,说明对方的计算机工作正常,中间的线路也正常。显示结果共有4行,后面显示的是测试结果的统计信息。在标准情况下使用ping命令,将反复4次发送IP信息并显示应答结果。
如果显示为“Request timed
out.”,表示在规定时间内因某种原因没有返回ping命令的应答。这种情况说明很可能是对方的计算机没有运行,或者中间线路不通致使信息没有到达对方那里。大多数情况下是企业防火墙等阻挡了ping命令中使用的ICMP信息。在这种情况下即便通信对象正在工作,ping命令的结果也会显示“Request
timed out.”的结果。  
有时在执行ping命令后,也会显示“Destination host
unreachable.”。此错误信息表明执行命令的计算机没能将信息发送到对方那里。大多数情况是自己一方的计算机LAN连接线掉线,或者由于IP设置不对,而无法进行正常通信。
仅依靠这3种结果,就可在一定程度上了解网络信息,如果进一步使用ping命令选项,还能够用于解决网络故障。用户可用命令帮助选项“?”,列表显示可在ping命令中使用那些命令选项。操作方法是“ping-?”或“ping/?”。
比如,如果输入并执行“ping xxx.xxx.xxx.xxx
-t”,在用户按“Ctrl+C”组合键强制结束命令之前机器会连续执行ping命令。这种命令行可用于分析线路连接情况。当由于LAN布线相互缠绕而使人不知道目标计算机到底连接在Hub的哪个端口时,就可以使用-t选项执行ping命令,逐个把每一根连接线抽出插入。查找拔掉插头后而没有应答的连接线。  
除此之外,ping命令还有很多选项。用户可以用身边的机器对每一个选项都测试一下。
启用IP安全策略防Ping
IP安全机制(IP Security)即IPSec 策略,用来配置 IPSec
安全服务。这些策略可为多数现有网络中的多数通信类型提供各种级别的保护。您可配置 IPSec
策略以满足计算机、应用程序、组织单位、域、站点或全局企业的安全需要。可使用 Windows XP 中提供的“IP
安全策略”管理单元来为 Active Directory 中的计算机(对于域成员)或本地计算机(对于不属于域的计算机)定义 IPSec
在此以WINDOWS
XP为例,通过“控制面板”—“管理工具”来打开“本地安全策略”,选择IP安全策略,在这里,我们可以定义自己的IP安全策略。一个IP安全过滤器由两个部分组成:过滤策略和过滤操作。要新建IP安全过滤器,必须新建自己的过滤策略和过滤操作,右击窗口左侧的“IP安全策略,在本地机器”,在弹出的快捷菜单中选择“创建IP安全策略”,单击“下一步”,然后输入策略名称和策略描述。单击“下一步”,选中“激活默认响应规则”复选项,单击“下一步”。开始设置响应规则身份验证方式,选中“此字符串用来保护密钥交换(预共享密钥)”选项,然后随便输入一些字符(后面还会用到这些字符的),单击“下一步”,就会提示已完成IP安全策略,确认选中了“编辑属性”复选框,单击“完成”按钮,会打开其属性对话框。
接下来就要进行此新建安全策略的配置。在“Goodbye Ping
属性”对话窗口的“规则”选项页中单击“添加”按钮,并在打开安全规则向导中单击“下一步”进行隧道终结设置,在这里选择“此规则不指定隧道”。单击“下一步”,并选择“所有网络连接”以保证所有的计算机都Ping不通。单击“下一步”,设置身份验证方式,与上面一样选择第三个选项“此字符串用来保护密钥交换(预共享密钥)”并填入与刚才上面相同的内容。单击“下一步”即打开“IP筛选器列表”窗口,在“IP筛选器列表”中选择“新IP筛选器列表”,单击右侧的“编辑”,在出现的窗口中点击“添加”,单击“下一步”,设置“源地址”为“我的IP地址”,单击“下一步”,设置“目标地址”为“任何IP地址”,单击“下一步”,选择协议类型为ICMP,单击“完成”后再点“确定”,单击“下一步”,选择筛选器操作为“要求安全”选项,然后依次点击“下一步”、“完成”、“确定”、“关闭”按钮保存相关的设置返回管理控制台。
最后在“本地安全设置”中右击配置好的“Goodbye
Ping”策略,在弹出的快捷菜单中选择“指派”命令使配置生效。
经过上面的设置,当其他计算机再Ping该计算机时,就不再Ping通了。但如果自己Ping本地计算机,仍可Ping通。在Windows
2000中操作基本相同。
IPSec安全策略 防Ping还是要慎用
众所周知,Ping命令是一个非常有用的网络命令,大家常用它来测试网络连通情况。但同时它也是把“双刃剑”,特别是在网络高速发展的今天,一些“不怀好意”的人在互联网中使用它来探测别人的机器,以此来达到不可告人的目的。为了保证机器在网络中的安全,现在很多人都非常重视“防Ping”,当然“防Ping”的方法和手段也非常多,如利用IPSec安全策略、Windows内置的防火墙、第三方防火墙工具、路由和远程访问组件等,到底这些“防Ping”方法的效果如何,是不是适合你使用,下面笔者带着你一起来看吧!
IPSec安全策略“防Ping”,还是要慎用
使用IPSec安全策略“防Ping”,是大家常用的一种方法,经过对IPSec安全策略简单的几步配置,就可以实现防Ping的效果。该方法配置比较简单,并且IPSec安全策略是Windows系统内置的一个功能组件,不需要额外安装,因此得到不少用户的喜爱。但这里笔者还是要提醒大家,使用IPSec安全策略“防Ping”,还是要慎用。
为什么这么说呢?首先我们看看IPSec安全策略是如何“防Ping”的,其原理是通过新建一个IPSec策略来过滤掉本机所有的ICMP数据包实现的。这样确实是可以有效的“防Ping”,但同时也会留下后遗症。
因为Ping命令和ICMP协议(Internet Control and
Protocal)有着密切的关系,在ICMP协议的应用中包含有11种报文格式,其中Ping命令就是利用ICMP协议中的“Echo
Request”报文进行工作的。但IPSec安全策略防Ping时采用格杀勿论的方法,把所有的ICMP报文全部过滤掉,特别是很多有用的其它格式的报文也同时被过滤掉了。因此在某些有特殊应用的局域网环境中,容易出现数据包丢失的现象,影响用户正常办公,因此笔者建议大家还是要慎用IPSec安全策略“防Ping”。
使用第三方防火墙工具
大家已经知道了IPSec安全策略“防Ping”的不足之处,为了保证本地机器发出的数据包通过网络被正确的传送给目标主机,大家可以采用别的更加有效的方法,如使用网络防火墙“防Ping”。
对于一般的上网用户来说,使用个人网络防火墙“防Ping”是最简单的一种方法。应用此方法“防Ping”不需要进行复杂的设置,只要你正确配置好防火墙内置的“防Ping”规则,就可以轻松实现“防Ping”的目的。个人网络防火墙的种类较多,几乎都可以有效实现“防Ping”,如天网个人防火墙、瑞星个人网络防火墙、Windows防火墙(或ICF)等,下面笔者以瑞星个人网络防火墙为例,介绍如何配置防火墙实现“防Ping”目的。
运行瑞星个人网络防火墙主程序后,在主窗口中点击“设置→设置规则”选项,弹出“瑞星个人网络防火墙规则设置”窗口,在规则列表中一定要选中“缺省的ICMP入站”规则,接着双击此规则,弹出“规则属性”对话框(如图1),在这里大家可以进行详细参数设置,在“类别”框中选中“系统”选项,“方向”框中选择“接收”选项,“协议”框中一定要选中Ping命令使用的“ICMP”协议了,操作框中选择“禁止”选项。这里要注意ICMP报文类型的选择,切换到“ICMP类型”标签页中,在“类型”下拉列表框中一定要选择“Echo
Request”项,最后点击“修改”按钮,保存设置。这样瑞星个人网络防火墙就可以过滤掉,Ping命令所使用的名为“Echo
Request”的ICMP报文了,而别的有用的ICMP报文则可以安全通过。完成以上设置后,就实现了利用个人网络防火墙有效“防Ping”的目的。
使用“路由与远程访问”组件
对于局域网用户来说,个人网络防火墙就很难满足他们的需要了,这时你就要使用企业级的网络防火墙“防Ping”,如ISA
2004等,但对于一些小型局域网来说,这些企业级防火墙过于昂贵,难以接受,其实利用Windows 2000/Server
2003服务器操作系统的“路由和远程访问”组件就能解决这个问题,并且该组件是Windows系统内置的,不需要额外购买。
下面笔者以Windows Server
2003系统为例,介绍如何利用“路由和远程访问”组件“防Ping”。大家都知道,“路由和远程访问”组件内置了路由表管理、VPN服务、IP报文过滤等功能,默认情况下,Windows
Server 2003系统并没有启用路由和远程访问服务,所以要首先手工启用它。在Windows Server
2003网关服务器中,进入到“控制面板→管理工具”窗口,运行“路由和远程访问”工具,在“路由和远程访问”主窗口中,右键点击“本地”服务器,在弹出的菜单中选择“配置并启用路由及远程访问”选项,接着在“路由及远程访问服务器安装向导”对话框中点击“下一步”按钮,选择“自定义配置”选项,然后点击“下一步”,在接下来的窗口中选择“LAN路由器”选项,最后点击“完成”按钮。
在“路由和远程访问”主窗口中依次展开“IP路由选择→常规”选项,接着在“常规”框体中右键点击接入互联网的那块网卡(如图2),选择“属性”选项,然后在属性对话框中点击“入站筛选器”按钮,弹出“入站筛选器”对话框后,选择“接收所有除符合下列条件以外的数据包”选项,下面点击“新建”按钮,弹出“添加IP筛选器”对话框(如图3),在协议下拉列表框中选择“ICMP”协议,接着在“ICMP类型”和“ICMP代码”栏中分别输入“8和0”,最后点击“确定”按钮。其中ICMP类型为“8”、ICMP代码为“0”的报文就是Ping命令所使用的“Echo
Request”报文,最后点击“确定”按钮,完成“防Ping”设置。
以上笔者介绍了几种不同的“防Ping”方法,分别适用于不同的网络环境,如果你感兴趣的话,不妨试试。
Ping命令幕后过程及其返回信息分析
“Ping”的幕后过程
我们以下面一个网络为例:有A、B、C、D四台机子,一台路由RA,子网掩码均为255.255.255.0,默认路由为192.168.0.1
1.在同一网段内
在主机A上运行“Ping 192.168.0.5”后,都发生了些什么呢?
首先,Ping命令会构建一个固定格式的ICMP请求数据包,然后由ICMP协议将这个数据包连同地址“192.168.0.5”一起交给IP层协议(和
ICMP一样,实际上是一组后台运行的进程),IP层协议将以地址“192.168.0.5”作为目的地址,本机IP地址作为源地址,加上一些其他的控制信息,构建一个IP数据包,并想办法得到192.168.0.5的MAC地址(物理地址,这是数据链路层协议构建数据链路层的传输单元——帧所必需的),以便交给数据链路层构建一个数据帧。关键就在这里,IP层协议通过机器B的IP地址和自己的子网掩码,发现它跟自己属同一网络,就直接在本网络内查找这台机器的MAC,如果以前两机有过通信,在A机的ARP缓存表应该有B机IP与其MAC的映射关系,如果没有,就发一个ARP请求广播,得到B机的MAC,一并交给数据链路层。后者构建一个数据帧,目的地址是IP层传过来的物理地址,源地址则是本机的物理地址,还要附加上一些控制信息,依据以太网的介质访问规则,将它们传送出去。
主机B收到这个数据帧后,先检查它的目的地址,并和本机的物理地址对比,如符合,则接收;否则丢弃。接收后检查该数据帧,将IP数据包从帧中提取出来,交给本机的IP层协议。同样,IP层检查后,将有用的信息提取后交给ICMP协议,后者处理后,马上构建一个ICMP应答包,发送给主机A,其过程和主机A发送ICMP请求包到主机B一模一样。
2.不在同一网段内
在主机A上运行“Ping
192.168.1.4”后,开始跟上面一样,到了怎样得到MAC地址时,IP协议通过计算发现D机与自己不在同一网段内,就直接将交由路由处理,也就是将路由的MAC取过来,至于怎样得到路由的MAC,跟上面一样,先在ARP缓存表找,找不到就广播吧。路由得到这个数据帧后,再跟主机D进行联系,如果找不到,就向主机A返回一个超时的信息。
对Ping后返回信息的分析
1.Request timed out
这是大家经常碰到的提示信息,很多文章中说这是对方机器置了过滤ICMP数据包,从上面工作过程来看,这是不完全正确的,至少有下几种情况。
(1) 对方已关机,或者网络上根本没有这个地址:比如在上图中主机A中PING
192.168.0.7 ,或者主机B关机了,在主机A中PING 192.168.0.5 都会得到超时的信息。
(2)对方与自己不在同一网段内,通过路由也无法找到对方,但有时对方确实是存在的,当然不存在也是返回超时的信息。
(3)对方确实存在,但设置了ICMP数据包过滤(比如防火墙设置)。
怎样知道对方是存在,还是不存在呢,可以用带参数 -a
的Ping命令探测对方,如果能得到对方的NETBIOS名称,则说明对方是存在的,是有防火墙设置,如果得不到,多半是对方不存在或关机,或不在同一网段内。
(4)错误设置IP地址
正常情况下,一台主机应该有一个网卡,一个IP地址,或多个网卡,多个IP地址(这些地址一定要处于不同的IP子网)。但如果一台电脑的“拨号网络适配器”(相当于一块软网卡)的TCP/IP设置中,设置了一个与网卡IP地址处于同一子网的IP地址,这样,在IP层协议看来,这台主机就有两个不同的接口处于同一网段内。当从这台主机Ping其他的机器时,会存在这样的问题:
A.主机不知道将数据包发到哪个网络接口,因为有两个网络接口都连接在同一网段。
B.主机不知道用哪个地址作为数据包的源地址。因此,从这台主机去Ping其他机器,IP层协议会无法处理,超时后,Ping
就会给出一个“超时无应答”的错误信息提示。但从其他主机Ping这台主机时,请求包从特定的网卡来,ICMP只须简单地将目的、源地址互换,并更改一些标志即可,ICMP应答包能顺利发出,其他主机也就能成功Ping通这台机器了。
2.Destination host Unreachable
对方与自己不在同一网段内,而自己又未设置默认的路由,比如上例中A机中不设定默认的路由,运行Ping
192.168.0.1.4就会出现“Destination host Unreachable”。
(2)网线出了故障
这里要说明一下“destination host unreachable”和
“time out”的区别,如果所经过的路由器的路由表中具有到达目标的路由,而目标因为其他原因不可到达,这时候会出现“time
out”,如果路由表中连到达目标的路由都没有,那就会出现“destination host unreachable”。
3.Bad IP address
这个信息表示您可能没有连接到DNS服务器,所以无法解析这个IP地址,也可能是IP地址不存在。
4.Source quench received
这个信息比较特殊,它出现的机率很少。它表示对方或中途的服务器繁忙无法回应。
5.Unknown host——不知名主机
这种出错信息的意思是,该远程主机的名字不能被域名服务器(DNS)转换成IP地址。故障原因可能是域名服务器有故障,或者其名字不正确,或者网络管理员的系统与远程主机之间的通信线路有故障。
6.No answer——无响应
这种故障说明本地系统有一条通向中心主机的路由,但却接收不到它发给该中心主机的任何信息。故障原因可能是下列之一:中心主机没有工作;本地或中心主机网络配置不正确;本地或中心的路由器没有工作;通信线路有故障;中心主机存在路由选择问题。
7.Ping 127.0.0.1:127.0.0.1是本地循环地址
如果本地址无法Ping通,则表明本地机TCP/IP协议不能正常工作。
8.no rout to host:网卡工作不正常。
9.transmit failed,error
code:10043网卡驱动不正常。
10.unknown host name:DNS配置不正确。
以上是我在“拼”(Ping)的过程中,总结的一些经验技巧,希望能对大家的工作和学习有所帮助。
教你快速深入了解Ping
Ping是一个基本的互联网程序,能够让你验证一个特定的IP地址的存在,而且这个IP地址能够接受请求。动词Ping的含义是使用Ping工具或者指令。诊断性地使用Ping这个指令可以确认你正在设法连接的主机计算机实际上正在工作。例如,如果一个用户不能够Ping通一个主机,那么,这个用户就不能使用文件传输协议(FTP)向那个主机发送文件。Ping还能够同正在工作的主机一起使用,以查看它用多长时间得到回复。使用Ping,你可以从这种符号域名中学习到数字形式的IP地址。
广义上说,ping的含义是“引起在线的另一方的注意”或者“查看在线的另一方是否存在”。ping的操作过程是向目标地址发送一个数据包,并且等待回应。ping是“Packet
Internet Groper”(数据包因特网探测器)或者“Packet Inter-Network
Groper”(Internet网络包探测器)的缩写字,其含义与形容返回声纳脉冲的潜艇术语差不多。
Ping的含义还包括向一个邮件列表的所有成员发送信息要求得到回执代码的过程。这个过程可在发送电子邮件之前完成,以便证实所有的地址都是可以访问的。
还可以参考ping风暴和ping的奇怪现象。
指南:要查找一个指定域名的IP地址(如205.245.172.72),Wibndows用户可以在微软DOS提示对话框中输入:ping
xxx.yyy。在这里,xxx代表类似于“whatis”的二级域名,yyy代表类似于“.com”的顶级域名。
什么是Ping不能告诉你的?
Ping是典型的网络工具
Ping能够辨别网络功能的某些状态。这些网络功能的状态是日常网络故障诊断的基础。特别是Ping能够识别连接的二进制状态(也就是是否连通)。但是,这只是能够告知你的网络运行状况的众多行为分析中一个最简单的例子。
假设网络是一个黑匣子,对此你事先一无所知。通过适当地刺激网络和分析网络的反应,正确地应用网络行为分析模型确定这个黑匣子的内部状态。这就使网络工程师和用户不必专门访问网络的组成设备(也就是接口、交换机和路由器)就可以了解一个网络通道。
向网络发送数据包。用网络的正常状态和网络标准作为分析模型。接下来,把可能的网络反应同已知的状态联系起来,就可以识别网络的内部状态,如连通性
在使用Ping的情况下,这只能使简单的事情更加复杂。向一个IP地址发送一个ICMP
Echo数据包,可以得到ICMP(互联网信报控制协议)应答,你就可以确定在网络路径上存在连接。这很简单,但是功能却非常强大,因为它可以指出更有趣的可能性。
当然,网络从来不是理想的。网络对刺激的反应是随时间变化的。一般来说,Ping要重复这个过程不只一次,然后进行统计评估。按照这种做法,Ping大体上可以确定往返时间(RTT)的统计变化以及丢包率(往返时间为无穷大)。根据这个额外的信息,可以稍微多的了解到网络通道中的一些信息,但是了解的并不多。
Traceroute是采用这种方法的另一个工具。利用与中间路径第三层设备有关的已知的行为和IP报头的生存时间(TTL)域,Traceroute能够确定主机与某些目标主机之间的第三层的设备的排列顺序。要完成这个任务,Traceroute不是发送一个数据包,而是发送一系列具有TTL特殊设置的数据包,从1逐步增加到255个,直到达到预定的目标。Traceroute然后能够识别以ICMP
TTL到其信息应答的每个第三层接口的IP地址。
Traceroute因此可以提供一个功能,了解两个主机之间IP路由的状态。显然,这样的状态很多,比简单的二进制的连接状态要复杂。
Traceroute需要大量增加网络路径的样本来完成这个任务
当然,还有更多的工具可以显示网络路径的不同方面,甚至Ping和Traceroute也增加了其它的功能。有些工具依赖非常高级的数学网络模型。这些数学模型包括队列理论、非随机损失分析和错误的关联等。
那么,要点是什么呢?这有点儿像盲人摸象的老寓言,每个盲人都以不同的特点解释象(有人说像蛇,有人说像堵墙,有人说像树干),因为每一个路径都是以不同的方式访问的。他们谁也不清楚他们正在处理的是什么。
因此,网络就是这种东西,不断地变化、影响应用程序的性能并且阻碍诊断。然而,可以广泛应用网络分析模型,而不是对简单的网络状态进行一点一点的分析。高级取样和分析过程可以详细揭示所有的端对端的路径的结构。
“新网络科学”栏目介绍的许多最新的网络技术充分利用了这个方法。事实上,这些系统提供的观点更精确。打个比方,这就好像是使用现代的声纳精确地生成的一个由温度、表面和盐度等所有的细微变化形成的声波以准确地描绘海洋的洋底、洋流和海洋生物存在的状态。并不是简单地检测第二次世界大战的潜艇。
更好的是,这些系统能够有选择地分析网络对具体应用程序的反应。这些应用程序包括备份与恢复、VoIP、视频、协作环境等处理系统以及其它应用软件。数据包的大小、负载、协议和传输速率的变化都可能引起网络改变其特点。
如果你发现Ping和raceroute用处不大,考虑一下,你使用的仅仅是你可能拥有的工具的很小的一部分。就像一个像素的图形不能向你展示整个画面一样,Ping也不能告诉你整个情况。
Ping的工作过程及单向Ping通的原因
当网络出现问题时,我们最常用的测试工具就是“Ping”命令了。但有时候我们会碰到单方向Ping通的现象,例如通过HUB或一根交叉线连接的在同一个局域网内的电脑A、
B,在检查它们之间的网络连通性时,发现从主机A Ping 主机B正常而从主机B Ping
主机A时,出现“超时无应答”错误。为什么呢?
要知道这其中的奥秘,我们有必要来看看Ping命令的工作过程到底是怎么样的。
假定主机A的IP地址是192.168.1.1,主机B的IP地址是192.168.1.2,都在同一子网内,则当你在主机A上运行“Ping
192.168.1.2”后,都发生了些什么呢?
首先,Ping命令会构建一个固定格式的ICMP请求数据包,然后由ICMP协议将这个数据包连同地址“192.168.1.2”一起交给IP层协议(和ICMP一样,实际上是一组后台运行的进程),IP层协议将以地址“192.168.1.2”作为目的地址,本机IP地址作为源地址,加上一些其他的控制信息,构建一个IP数据包,并在一个映射表中查找出IP地址192.168.1.2所对应的物理地址(也叫MAC地址,熟悉网卡配置的朋友不会陌生,这是数据链路层协议构建数据链路层的传输单元——帧所必需的),一并交给数据链路层。后者构建一个数据帧,目的地址是IP层传过来的物理地址,源地址则是本机的物理地址,还要附加上一些控制信息,依据以太网的介质访问规则,将它们传送出去。
主机B收到这个数据帧后,先检查它的目的地址,并和本机的物理地址对比,如符合,则接收;否则丢弃。接收后检查该数据帧,将IP数据包从帧中提取出来,交给本机的IP层协议。同样,IP层检查后,将有用的信息提取后交给ICMP协议,后者处理后,马上构建一个ICMP应答包,发送给主机A,其过程和主机A发送ICMP请求包到主机B一模一样。
从Ping的工作过程,我们可以知道,主机A收到了主机B的一个应答包,说明两台主机之间的去、回通路均正常。也就是说,无论从主机A到主机B,还是从主机B到主机A,都是正常的。那么,是什么原因引起只能单方向Ping通的呢?
一、安装了个人防火墙
在共享上网的机器中,出于安全考虑,大部分作为服务器的主机都安装了个人防火墙软件,而其他作为客户机的机器则一般不安装。几乎所有的个人防火墙软件,默认情况下是不允许其他机器Ping本机的。一般的做法是将来自外部的ICMP请求报文滤掉,但它却对本机出去的ICMP请求报文,以及来自外部的ICMP应答报文不加任何限制。这样,从本机Ping其他机器时,如果网络正常,就没有问题。但如果从其他机器Ping这台机器,即使网络一切正常,也会出现“超时无应答”的错误。
大部分的单方向Ping通现象源于此。解决的办法也很简单,根据你自己所用的不同类型的防火墙,调整相应的设置即可。
二、错误设置IP地址
正常情况下,一台主机应该有一个网卡,一个IP地址,或多个网卡,多个IP地址(这些地址一定要处于不同的IP子网)。但对于在公共场所使用的电脑,特别是网吧,人多手杂,其中不泛有“探索者”。曾有一次两台电脑也出现了这种单方向Ping通的情况,经过仔细检查,发现其中一台电脑的“拨号网络适配器”(相当于一块软网卡)的TCP/IP设置中,设置了一个与网卡IP地址处于同一子网的IP地址,这样,在IP层协议看来,这台主机就有两个不同的接口处于同一网段内。当从这台主机Ping其他的机器时,会存在这样的问题:
(1)主机不知道将数据包发到哪个网络接口,因为有两个网络接口都连接在同一网段;
(2)主机不知道用哪个地址作为数据包的源地址。因此,从这台主机去Ping其他机器,IP层协议会无法处理,超时后,Ping
就会给出一个“超时无应答”的错误信息提示。但从其他主机Ping这台主机时,请求包从特定的网卡来,ICMP只须简单地将目的、源地址互换,并更改一些标志即可,ICMP应答包能顺利发出,其他主机也就能成功Ping通这台机器了
Ping的源代码
#pragma pack(4)
#define WIN32_LEAN_AND_MEAN
#define ICMP_ECHO 8
#define ICMP_ECHOREPLY 0
#define ICMP_MIN 8 // minimum 8 byte
icmp packet (just header)
typedef struct iphdr {
unsigned int h_len:4; // length of the
unsigned int version:4; // Version of
// Type of
unsigned short total_ // total
length of the packet
identifier
unsigned short frag_and_ //
// protocol (TCP,
unsigned int sourceIP;
unsigned int destIP;
// ICMP header
typedef struct _ihdr {
#define STATUS_FAILED 0xFFFF
#define DEF_PACKET_SIZE 32
#define MAX_PACKET 1024
#define xmalloc(s)
HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,(s))
#define xfree(p) HeapFree
(GetProcessHeap(),0,(p))
void fill_icmp_data(char *,
USHORT checksum(USHORT *, int);
void decode_resp(char *,int ,struct
sockaddr_in *);
void Usage(char *progname){
fprintf(stderr,"Usage:\n");
fprintf(stderr,"%s
[data_size]\n",progname);
fprintf(stderr,"datasize can be up to
ExitProcess(STATUS_FAILED);
int main(int argc, char **argv){
WSADATA wsaD
SOCKET sockR
struct sockaddr_in dest,
struct hostent *
int bread,
int fromlen = sizeof(from);
int timeout = 1000;
char *dest_
char *icmp_da
unsigned int addr=0;
USHORT seq_no = 0;
(WSAStartup(MAKEWORD(2,1),&wsaData) != 0){
fprintf(stderr,"WSAStartup failed:
%d\n",GetLastError());
ExitProcess(STATUS_FAILED);
if (argc &2 ) {
Usage(argv[0]);
sockRaw = WSASocket (AF_INET,
IPPROTO_ICMP,
NULL, 0,0);
if (sockRaw == INVALID_SOCKET) {
fprintf(stderr,"WSASocket() failed:
%d\n",WSAGetLastError());
ExitProcess(STATUS_FAILED);
setsockopt(sockRaw,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,
sizeof(timeout));
if(bread == SOCKET_ERROR) {
fprintf(stderr,"failed to set recv
timeout: %d\n",WSAGetLastError());
ExitProcess(STATUS_FAILED);
timeout = 1000;
setsockopt(sockRaw,SOL_SOCKET,SO_SNDTIMEO,(char*)&timeout,
sizeof(timeout));
if(bread == SOCKET_ERROR) {
fprintf(stderr,"failed to set send
timeout: %d\n",WSAGetLastError());
ExitProcess(STATUS_FAILED);
memset(&dest,0,sizeof(dest));
hp = gethostbyname(argv[1]);
addr = inet_addr(argv[1]);
&& (addr == INADDR_NONE) ) {
fprintf(stderr,"Unable to resolve
%s\n",argv[1]);
ExitProcess(STATUS_FAILED);
if (hp != NULL)
memcpy(&(dest.sin_addr),hp-&h_addr,hp-&h_length);
dest.sin_addr.s_addr =
dest.sin_family =
dest.sin_family = AF_INET;
dest_ip = inet_ntoa(dest.sin_addr);
if (argc &2) {
datasize = atoi(argv[2]);
if (datasize == 0)
datasize = DEF_PACKET_SIZE;
datasize = DEF_PACKET_SIZE;
datasize += sizeof(IcmpHeader);
icmp_data =
xmalloc(MAX_PACKET);
recvbuf = xmalloc(MAX_PACKET);
if (!icmp_data) {
fprintf(stderr,"HeapAlloc failed
%d\n",GetLastError());
ExitProcess(STATUS_FAILED);
memset(icmp_data,0,MAX_PACKET);
fill_icmp_data(icmp_data,datasize);
while(1) {
((IcmpHeader*)icmp_data)-&i_cksum = 0;
((IcmpHeader*)icmp_data)-&timestamp =
GetTickCount();
((IcmpHeader*)icmp_data)-&i_seq =
((IcmpHeader*)icmp_data)-&i_cksum =
checksum((USHORT*)icmp_data,
datasize);
sendto(sockRaw,icmp_data,datasize,0,(struct
sockaddr*)&dest,
sizeof(dest));
if (bwrote == SOCKET_ERROR){
if (WSAGetLastError() == WSAETIMEDOUT)
printf("timed out\n");
fprintf(stderr,"sendto failed:
%d\n",WSAGetLastError());
ExitProcess(STATUS_FAILED);
if (bwrote & datasize )
fprintf(stdout,"Wrote %d
bytes\n",bwrote);
recvfrom(sockRaw,recvbuf,MAX_PACKET,0,(struct
sockaddr*)&from,
&fromle}

我要回帖

更多关于 百度文库十分钟赚10元 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信