4.2.2 网际控制报文协议(ICMP)
网际控制报文协议(Internet Control Message Protocol,ICMP)运行于IP之上,与IP配套使用,通常被认为是IP的一部分。ICMP在网络层中的位置如图4-6所示。
图4-6 ICMP在网络层中的位置
ICMP提供了一种机制,用于反映IP数据包处理时产生的错误信息,例如网络不通、主机不可达、路由器没有足够的缓存空间等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP报文。该报文返回到发送原数据的设备,然后发送设备根据ICMP报文确定发生错误的类型,采取措施来纠正问题。所以ICMP对于网络安全具有极其重要的意义。用户经常用于检查网络通不通的Ping命令实际上就是一个ICMP工作的过程。
ICMP定义了5种常用差错报文和6种询问报文类型,并用代码表达某类型下面不同情况的细分。ICMP报文的一般格式如图4-7所示。
图4-7 ICMP报文格式
下面列出几种常见ICMP报文的含义。
1)不可到达(Tpye=3):在路由器或主机不能传递数据包时,则向源主机返回这种报文。常见的不可到达情况有网络不可到达(Code=0)、主机不可到达(Code=1)、协议不可到达(Code=2)等。
2)超时(Tpye=11):路由器发现IP数据包的生存期已超时(Code=0),或者拥塞导致目的主机在规定时间内无法重组数据报分段(Code=1),则向源主机返回这种报文。
3)源抑制(Code=4):当路由器处理IP数据的速率不够高时,发送此类报文。源抑制充当了一个控制流量的角色,让发送方降低发送数据的速率。
4)重定向(Type=5):路由器直接向相连的主机发出这种报文,告诉主机一个最短的路径。例如,路由器R1收到本地主机发来的数据报,R1发现要把数据发往网络X,必须首先发给路由器R2,而R2又与源主机在同一个网络,于是R1向源主机发出路由重定向报文,把R2的地址告诉它。