ICMP,用于IP主机、路由器直接传递控制信息,主要分为查询和差错报文,并不传输用户数据;
- 协议字段
ICMP的类型由类型字段解释,代码字段用于标示发送错误的原因。下面介绍常用的ICMP报文:
- 目的不可达
当路由器收到一个无法传递下去的IP报文时,会发送ICMP目的不可达报文(Type为3)给IP报文的源发送方;
- 超时
网络在传送IP报文时,其TTL在不断减小,为0时路由器将其丢弃,并且向源发送方发送超时报文,类型为11,代码未0,即传输期间生存时间为0;
如果目的主机在收端重组分片时,迟迟未收到所有的分片,向源发送方发送超时报文,类型为11,代码为1,即数据报组装期间生存时间为0;
注:TTL的计算本质上基于时间的,所以繁忙的路由器可能减少的值不止为1,但是可以大约认为是1;TTL的使用,是为了防止数据报在网络中循环传输,直至产生拒绝服务的情况;
- 参数错误报文
当路由器或主机处理数据报时,发现因为报文头的参数错误而不得不丢弃报文时,需要向源发送方发送参数错误报文(Type为12)。当Code为0时,报文中的Pointer表示错误的字节位置;
- 重定向
当路由收到IP数据报,发现数据报的目的地址在路由表上没有,它就会发ICMP重定向报文(Type为5)给源发送方,提醒它想要发送的地址不在;
- 请求回显或回显应答
ICMP是基于IP进行传输的,协议类型为1,对于网络安全具有重要的意义:
(1)Ping of Death攻击,就是当ICMP数据包的尺寸大于64KB时,主机出现内存分配错误,导致TCP/IP崩溃,主机死机;
(2)"ICMP风暴",是由于网络中充斥着大量ICMP报文,致使目标主机消耗大量CPU,疲于奔命;