ICMP 报文的格式和种类rague | 13 九月, 2007 16:41--------------------------------格式-------------------------------------各种ICMP 报文的前32bits 都是三个长度固定的字段:type 类型字段(8 位)、code 代码字段(8 位)、checksum校验和字段(16位)8bits 类型和8bits 代码字段:一起决定了ICMP 报文的类型。常见的有:类型8、代码 0:回射请求。类型0、代码 0:回射应答。类型11、代码 0:超时。16bits 校验和字段:包括数据在内的整个ICMP 数据包的校验和,其计算方法和IP 头部校验和的计算方法是一样的。下图是一张 ICMP 回射请求和应答报文头部格式对于 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)3 不可到达4 源抑制5 重定向8 响应请求(ECHO-REQUEST)11 超时12 参数失灵13 时间戳请求14 时间戳应答15 信息请求(*已作废)16 信息应答(*已作废)17 地址掩码请求18 地址掩码应答其中代码为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)、主机不可到达(...