ICMP概述:ICMP使用IP数据报传送。允许主机或路由器报告差错情况和提供有关异常的报告。使IP数据报转发更有效,提高交付成功的机会。
不产生ICMP差错报文的情况:
1)ICMP差错报文(但是,ICMP查询报文可能会产生)
2)目的地址是广播地址或多播地址的IP数据报。
3)作为链路层广播的数据报。
4)不是IP分片的第一片。
5)源地址不是单个主机的数据报。
目的是为了不产生广播风暴。
ICMP的规则:ICMP差错报文必须包括生成该差错报文的数据报IP首部,还必须至少包括跟在IP首部后面的前8个字节(TCP/UDP首部等)。
1、终点不可达 Destination Unreachable Message
代码Code:
0 = net unreachable网络不可达;
1 = host unreachable主机不可达;
2 = protocol unreachable协议不可达;
3 = port unreachable端口不可达;
4 = fragmentation needed and DF set需要分片但设置了不可分片比特;
5 = source route failed源站选路失败.
产生的原因:UDP的规则之一是,如果收到一份UDP数据报而目的端口与某个正在使用的进程不相符,那么UDP返回一个ICMP不可达报文。
2、 源点抑制Source Quench Message
产生的原因:当一个系统(路由器或主机)接收数据报的速度比其处理速度快时,即路由器或者主机因拥塞丢弃数据报,可能产生这个差错,以减慢发送速度。
3、 时间超过Time Exceeded Message
Code :
0 = time to live exceeded in transit传输期间生存时间为0;
1 = fragment reassembly time exceeded在数据报重装期间生存时间为0.
产生的原因:1、生存时间(实际是跳数)递减为0,数据报被丢弃,只有可能是路由器发送2、当目的主机收到一个分片时,就会启动一个分片计时器,如果计时器内其它分片没完全到达,丢弃已经收到的所有分片。
4、 参数问题Parameter Problem Message
Code :
0 = pointer indicates the error坏的IP首部;
1 = Require option missing缺少必须选项.
产生的原因:数据报首部出现错误或者首部缺少一些选项。
0 = Redirect datagrams for the Network网络重定向.
1 = Redirect datagrams for the Host主机重定向.
2 = Redirect datagrams for the Type of Service and Network服务类型和网络重定向.
3 = Redirect datagrams for the Type of Service and Host服务类型和主机重定向.
产生的原因:路由器要经常更新自己的路由表,网络上主机的数量远远大于路由器的数量,如果主机也动态更新,将产生无法忍受的通信量,所以主机使用静态路由选择,一般情况下,开始时主机只知道默认路由地址,IP数据报将被发送到默认路由器,但也许此数据报应该被发到另外的路由器,默认路由器知道这种情况后,转发此数据报,并向源点发送改变路由ICMP,让主机刷新自己的路由表,主机的路由表通过这种方式进行更新
说明:改变路由是唯一一个不会丢弃数据报的差错报告报文
1、 回送请求和回答Echo or Echo Reply Message
Type
8 for echo message请求回显;
0 for echo reply message回显应答.
产生的原因:一般用于源主机或源路由器判断目的主机或目的路由器能否与其通信,主机和路由器都能发送此报文,此报文包括了回送请求报文和回送回答报文,ping命令便是此报文
2、时间戳请求和回答Timestamp or Timestamp Reply Message
Type
13 for timestamp message时间戳请求;
14 for timestamp reply message时间戳应答.
产生的原因:包括时间戳请求报文和时间戳回答报文,它能够确定IP数据报在两台机器的往返时间,即使两个路由器本地时间不同步,但他们的往返时间仍然是精确的。
三、完整的ICMP类型列表
四、ICMP报文的处理