
ICMP报文详解.doc
6页ICMP报文详解 / 各种ICMP报文的前4个字节(32bits)都是三个长度固定的字段(见上图):type类型字段(8位)、code代码字段(8位)、checksum校验和字段(16位)8bits类型和8bits代码字段:一起决定了ICMP报文的类型常见的有:类型8、代码0:回显请求;类型0、代码0:回显应答;类型11、代码0:超时.16bits校验和字段:包括数据在内的整个ICMP数据包的校验和,其计算方法和IP头部校验和的计算方法是一样的对于ICMP回显请求和应答报文来说(见上图),接下来是16bits标识符字段:用于标识本ICMP进程最后是16bits序列号字段:用于判断回显应答数据报.ICMP报文包含在IP数据报中,属于IP的数据,IP头部就在ICMP报文的前面,一个ICMP报文包括IP头部(20字节)、ICMP头部(8字节)和ICMP报文见上图)IP头部的Protocol值为1就说明这是一个ICMP报文;ICMP头部中的类型(Type)域用于说明ICMP报文的作用及格式;此外还有代码(Code)域用于详细说明某种ICMP报文的类型;所有数据都在ICMP头部后面RFC定义了13种ICMP报文格式,具体如下:类型代码 类型描述ﻩ ﻩﻩﻩ ﻩ类型代码 类型描述0 ﻩ响应应答(ECHO-REPLY) 13 ﻩ 时间戳请求3 ﻩﻩ 不可到达 ﻩ ﻩﻩﻩ14 ﻩ 时间戳应答4 源抑制 15 ﻩ 信息请求(*已作废)5 ﻩ 重定向 ﻩﻩ ﻩ16 ﻩ信息应答(*已作废)8 ﻩ ﻩ响应请求(ECHO—REQUEST) ﻩ17 ﻩ ﻩ地址掩码请求11 ﻩ ﻩ超时 ﻩﻩ ﻩ18 ﻩﻩﻩ地址掩码应答12 ﻩﻩﻩ参数失灵其中代码为15、16的信息报文已经作废.下面是几种常见的ICMP报文:1.响应请求我们日常使用最多的ping,就是响应请求(Type=8)和应答(Type=0),一台主机向一个节点发送一个Type=8的ICMP报文,如果途中没有异常(例如被路由器丢弃、目标不回应ICMP或传输失败),则目标返回Type=0的ICMP报文,说明这台主机存在,更详细的tracert通过计算ICMP报文通过的节点来确定主机与目标之间的网络距离。
2.目标不可到达、源抑制和超时报文这三种报文的格式是一样的,目标不可到达报文(Type=3)在路由器或主机不能传递数据报时使用,例如我们要连接对方一个不存在的系统端口(端口号小于1024)时,将返回Type=3、Code=3的ICMP报文,它要告诉我们:“嘿,别连接了,我不在家的!”,常见的不可到达类型还有网络不可到达(Code=0)、主机不可到达(Code=1)、协议不可到达(Code=2)等源抑制则充当一个控制流量的角色,它通知主机减少数据报流量,由于ICMP没有恢复传输的报文,所以只要停止该报文,主机就会逐渐恢复传输速率最后,无连接方式网络的问题就是数据报会丢失,或者长时间在网络游荡而找不到目标,或者拥塞导致主机在规定时间内无法重组数据报分段,这时就要触发ICMP超时报文的产生.超时报文的代码域有两种取值:Code=0表示传输超时,Code=1表示重组分段超时.3.时间戳时间戳请求报文(Type=13)和时间戳应答报文(Type=14)用于测试两台主机之间数据报来回一次的传输时间.传输时,主机填充原始时间戳,接收方收到请求后填充接收时间戳后以Type=14的报文格式返回,发送方计算这个时间差。
一些系统不响应这种报文ICMP报文格式ICMP虽然是网络层的协议,但要将ICMP报文放入IP中发送ICMP报文的头部由1字节的类型(type)、1字节的代码(code)和2字节的校验和(checksum)组成.类型域和代码域用来标识各种ICMP报文类型域表示ICMP报文的类型,目前已定义了14种,从类型值来看ICMP报文可分为二大类第1 类是取值为1~127的差错报文,第2类是取值128以上的是信息(informational)报文1不能到达信宿(Destination Unreachable)差错报文 2分组过大(Packet Too Big)差错报文 3超时(Time Exceeded)差错报文 4参数问题(Parameter Problem)差错报文 128返回请求(Echo Request)报文 129返回应答(Echo Reply)报文 130组成员查询(Group Membership Query) 131组成员报告(Group Membership Report) 132组成员结束(Group Membership Termination) 133路由器请求(Router Solicitation) 134路由器公告(Router Advertisement) 135邻机请求(Neighbor Solicitation) 136邻机公告(Neighbor Advertisement) 137 重定向(Redirect)通近抓包可以清楚看到ICMP报文结构,最前面是14字节的以太网II帧头,接下来是20字节的IP包头,接下来是8个字节的ICMP回显请求报文头部,类型是8、代码是0,表示是一个回显请求报文.序列号:0X0200,注:每一个ICMP回显报文都有一个序列号且是递增的,这是PING的第二个包,第一个的序列号是:0X100,第三个序列号是:0X300,第三个序列号是:0X400。
因为在WINDOWS XP系统 PING 时是4个报文且数据是32个字节在抓包中,回显数据:32字节,在Windows 9X、Windows 2000、Windows XP等操作系统的Ping命令中,ICMP包中的数据长度默认为32字节,其内容为英文小写字母循环系列(abcdefghijklmnopqrstuvwabcdefghi)下图是回显应答报文的抓包:类型是0文中如有不足,请您指教!。
