一、简介
IP协议本身没有为终端系统提供直接的方法来发现那些发往目的地址失败的IP数据包。此外,IP没有提供直接的方式来获取诊断信息(例如,哪些路由器在沿途中被使用了或使用一种方法来估计往返时间)。为解决这些不足之处,将一个特殊的Internet控制报文协议(Internet Control Message Protocol,ICMP)与IP结合使用,以便提供与IP协议层配置和IP数据包处置相关的诊断和控制信息。
ICMP通常被认为是IP层的一部分,它需要在所有IP实现中存在。它使用IP协议进行传输。因此,确切地说,它既不是一个网络层协议,也不是一个传输层协议,二是位于两者之间。
ICMP负责传递可能需要注意的差错和控制报文。ICMP报文通常是由IP层本身、上层的传输协议(TCP/UDP等),甚至某些情况下是用户应用触发执行的。请注意,ICMP并不为IP网络提供可靠性,它只是表明了某些类别的故障和配置信息。最常见的丢包(路由器缓冲区溢出)并不会触发任何的ICMP信息,由其他协议如TCP来处理这种情况。
鉴于ICMP能够影响重要的系统功能操作和获取配置信息,黑客们已经在大量攻击中使用ICMP报文。由于担心这些攻击,网路管理员经常会用防火墙封阻ICMP报文,特别是在边界路由器上。如果ICMP被封锁,大量的诊断程序(例如ping、traceroute)将无法正常工作。
1、在IP中的封装
ICMP报文是在IP数据报内被封装传输的:
二、ICMP报文
ICMP报文可分为两大类:
①有关IP数据报传递的ICMP报文,称为差错报文error message;
②有关信息采集和配置的ICMP报文,称为查询query或信息类报文informational message
1、ICMPv4报文
对于ICMPv4,常见的差错报文包括目的不可达、重定向、超时和参数问题;信息类报文包括回显请求和回显应答,以及路由器通告和路由器请求(一般称为路由器发现)。
2、ICMPv6报文
ICMPv6负责的不仅是差错和信息报文,也负责大量IPv6路由器和主机的配置。
3、处理ICMP报文
一般来说,传入的信息类请求将被操作系统自动处理,而差错类报文传递给用户进程或传输层协议。进程可以选择对它们采取行动或忽略它们。
三、ICMP差错报文
以下情况不会响应产生ICMPv4差错报文:
①ICMPv4差错报文
②目的地址是IPv4广播地址或组播地址的数据报
③作为链路层广播的数据报
④不是第一个分片的其他分片
⑤源地址不是单个主机的数据报,即源地址不能为零地址、环回地址、广播地址或组播地址
限制生成ICMP差错报文的原因是避免生成所谓的广播风暴,在这种情况下生成少数的报文就会造成不想要的流量喷流,例如无限地为响应差错报文而生成差错报文。
除了控制产生ICMP报文条件的规则,还有限制从单一发送者发出的ICMP总体流量水平的规则。比如令牌桶。
1、目的不可达
这种类型的报文用来表示数据报无法送达目的地,可能是因为传输过程中出了问题或接受者缺乏兴趣接收它。ICMPv4为此报文定义了16个不同的代码,但只有4个最常用:主机不可达、端口不可达、需要分片/指定不用分片、管理禁止通信。
①主机不可达
由路由器或者主机产生,出现在当它被要求使用直接交付方法发送一个ip数据报到一个主机,但由于某些原因无法到达目的地时。例如,当最后一跳路由器试图发送一个ARP请求到已经不在或者关闭的主机时。
②端口不可达
③管理禁止通信
来源:CSDN
作者:馋鱼夜炖桃
链接:https://blog.csdn.net/qq_41975735/article/details/103703313