ICMP
ICMP 协议之内容
ICMP 的全称是 Internet Control Message Protocol 。从技术教度来说,ICMP 就是一个 "错误侦测与回报机制",其目的就是让我们能够检测网络的联机状况﹐也能确保联机的准确性﹐其功能主要有﹕
· 侦测远程主机是否存在。
· 建立及维护路由数据。
· 重导数据传送路径。
· 数据流量控制。
ICMP 在沟通之中,主要是透过不同的类别( Type )与代码( Code ) 让机器来识别不同的联机状况。常用的类别如下表所列﹕
类别 |
名称 |
代表意思 |
0 |
Echo Reply |
是一个回应信息。 |
3 |
Distination Unreachable |
表示目的地不可到达。 |
4 |
Source Quench |
当 router 负载过时﹐用来竭止来源继续发送讯息。 |
5 |
Redirect |
用来重新导向路由路径。 |
8 |
Echo Request |
请求响应讯息。 |
11 |
Time Exeeded for a Datagram |
当资料封包在某些路由现象中逾时﹐告知来源该封包已被忽略忽略。 |
12 |
Parameter Problem on a Datagram |
当一个 ICMP 封包重复着之前的错误时﹐会回复来源主机关于参数错误的讯息。 |
13 |
Timestamp Request |
要求对方送出时间讯息﹐用以计算路由时间的差异﹐以满足同步性协议的要求。 |
14 |
Timestamp Replay |
此讯息纯粹是响应 Timestamp Request 用的。 |
15 |
Information Request |
在 RARP 协议应用之前﹐此讯息是用来在开机时取得网络信息。 |
16 |
Information Reply |
用以回应 Infromation Request 讯息。 |
17 |
Address Mask Request |
这讯息是用来查询子网络 mask 设定信息。 |
18 |
Address Mask Reply |
响应子网络 mask 查询讯息的。 |
在 ICMP 使用中﹐不同的类别会以不同的代码来描述具体的状况。以 Type 3 ( Distination Unreachable ) 为例,其下的代码如下所列﹕
代码 |
代表意思 |
0 |
Network Unreachable |
1 |
Host Unreachable |
2 |
Protocol Unreachable |
3 |
Port Unreachable |
4 |
Fragmentation Needed and DF set |
5 |
Source Route Failed |
6 |
Destination network unknown |
7 |
Destination host unknown |
8 |
Source host isolated |
9 |
Communication with destination network administraively prohibited |
10 |
Communication with destination host administraively prohibited |
11 |
Network unreachable for type of service |
12 |
host unreachable for type of service |
ICMP 是个非常有用的协议﹐尤其是当我们要对网络连接状况进行判断的时候。下面让我们看看常用的 ICMP 实例,以更好了解 ICMP 的功能与作用。
关于 PING
l 原理:
ping这个单词源自声纳定位,而这个程序的作用也确实如此,它利用ICMP协议包来侦测另一个主机是否可达。原理是用类型码为0的ICMP发请求,受到请求的主机则用类型码为8的ICMP回应。ping程序来计算间隔时间,并计算有多少个包被送达。用户就可以判断网络大致的情况。我们可以看到, ping给出来了传送的时间和TTL的数据。
l 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:
-t Ping the specified host until stopped.To see statistics and 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),Approximate round 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),Approximate round 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 指定的值。