目的不可达报文
类型:3 |
代码:0至15 |
检验和 |
未使用(全0) |
收到的IP数据报的一部分,包括IP首部以及数据报数据的前8个字节 |
源端抑制报文
类型:4 |
代码:0 |
检验和 |
未使用(全0) |
收到的IP数据报的一部分,包括IP首部以及数据报数据的前8个字节 |
超时报文
类型:11 |
代码:0或1 |
检验和 |
未使用(全0) |
收到的IP数据报的一部分,包括IP首部以及数据报数据的前8个字节 |
参数问题
类型:12 |
代码:0或1 |
检验和 |
指针 |
未使用(全0) |
收到的IP数据报的一部分,包括IP首部以及数据报数据的前8个字节 |
改变路由
类型:5 |
代码:0到3 |
检验和 |
目标路由器IP地址 |
收到的IP数据报的一部分,包括IP首部以及数据报数据的前8个字节 |
回送请求和回答
类型:8或0 |
代码:0 |
检验和 |
标识符 |
序号 |
由请求报文发送;由回答报文重复 |
时间戳请求和回答
类型:13或14 |
代码:0 |
检验和 |
标识符 |
序号 |
原始时间戳 |
接收时间戳 |
发送时间戳 |
地址掩码请求和回答
类型:17或18 |
代码:0 |
检验和 |
标识符 |
序号 |
地址掩码 |
路由询问和通告
类型:9 |
代码:0 |
检验和 |
地址数 |
地址项目长度 |
寿命 |
路由器地址1 |
地址参考1 |
路由器地址2 |
地址参考2 |
... |
当发送一份ICMP差错报文时,报文始终包含IP的首部和产生ICMP差错报文的IP数据报的前8个字节。 为什么? 大家还记得TCP报文的结构么?前面是IP首部,然后是TCP部分。而刚刚说到的前8个字节就包括了TCP的源端口和目的端口啦!这样一来,接受ICMP报文的一方就能根据IP首部和这8个字节来判断出到底是哪个应用程序出错了。(TCP/IP协议栈的分用)。怎么样,这个结构设计得很巧妙吧,可惜不是偶设计滴,:-)。
|