ICMP详解——Internet控制协议

Internet控制报文协议(Intemet Control Message Protocol, ICMP)是IP协议的一种补充,它与IP协议结合使用,以便提供与IP协议层配置和IP数据包处理相关的诊断和控制信息(IP协议本身并没有为终端系统提供直接的方法来发现那些发往目的地址失败的IP数据包,也没有提供直接的方式来获取诊断信息。)

ICMP通常被认为是IP层的一部分,它需要在所有IP实现中存在。它使用IP协议进行传输。因此,确切地说,它既不是一个网络层协议,也不是一个传输层协议,而是位于两者之间。(这一点和大多数CSDN博主的不太一样,但我看TCP/IP协议上是这样写的,我决定按照书上的来)

1. ICMP报文是在IP数据报内被封装传输的。

ICMP报文是在IP数据报内被封装传输的。

1.1 先回顾一下IPv4头部结构和IPv6头部结构,方便演示如何封装ICMP报文

IPv4头部结构和IPv6头部结构的具体分析,可以看我的文章:《IPv4和IPv6的数据报结构头部详解》,网址:https://blog.csdn.net/qq_45877524/article/details/105003498
这里只标注与该文章相关的内容。(我直接拿了旧的图片)
在这里插入图片描述
在这里插入图片描述
在IPv4中,协议(Protocol)字段值为1表示该报文携带了ICMPv4。 在IPv6中,ICMPv6报文可能开始于0个或者多个扩展头部之后。位于ICMPv6头部之前的最后一个扩展头部包含了一个值为58的下一个头部(Next Header)字段。

1.2 如何封装

在这里插入图片描述
在这里插入图片描述

  1. 类型:占8位,标识ICMP报文的类型,从类型值来看ICMP报文可以分为两大类。第一类是取值为1~127的差错报文,第2类是取值128以上的信息报文。
  2. 代码:占8位,标识对应ICMP报文的代码。作为类型的补充说明,它与类型字段一起描述了ICMP报文的详细类型
  3. 校验和:占16位,对包括ICMP报文数据部分在内的整个ICMP数据报的校验和,检验报文在传输过程中是否出现了差错,与IP数据报检验和的方式一样。

2. ICMP报文

ICMP报文可分为两大类:有关IP数据报传递的ICMP报文(称为差错报文(error message)),以及有关信息采集和配置的ICMP报文(称为查询(query)或者信息类报文(informational message) )。

2.1 ICMPv4报文

ICMPv4虽然此报文定义了16个不同的代码,但其中只有4个是最常用的。这包括主机不可达(代码1)、端口不可达(代码3)、需要分片/指定不用分片(代码4)、管理禁止通信(代码13)。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

2.2 ICMPv6报文

注意ICMPv6负责的不仅是差错和信息类报文,也负责大量的IPv6路由器和主机的配置。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
有ICMPv6的差错报文的类型(Type)字段的高位比特为0。因此, ICMPv6类型从0到127的都是差错报文,类型从128到255的都是信息类报文。设计ICMPv6时的一些努力是为了从原始的规范中去除未使用的报文,同时保留有用的报文。遵循这个方法, ICMPv6也使用代码(Code)字段,主要是为了完善某些差错报文的含义。在这里插入图片描述

3. ICMP差错报文的响应规则

ICMP差错报文不会对以下报文进行响应:另一个ICMP差错报文,头部损坏的数据报, IP层的广播/组播数据报,封装在链路层广播或者组播帧中的数据报,无效或者网络为零的源地址的数据报,或除第一个之外的其他分片。限制生成ICMP差错报文的原因是限制生成所谓的广播风暴,在这种情况下生成少数的报文就会造成不想要的流量喷流。

控制产生ICMP报文条件的规则:

  1. 以下情况不会响应产生ICMPv4差错报文:
    1. ICMPv4差错报文文(但是,响应ICMPv4查询报文可能会产生ICMPv4差错报文)。
    2. 作为链路层广播的数据报。
    3. 目的地址是IPv4广播地址或IPv4组播地址(以前称为D类地址)的数据报。
    4. 不是第一个分片的其他分片。
    5. 源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地址或组播地址。
  2. 以下情况不会响应ICMPv6差错报文(其实两个都差不多):
    1. ICMPv6差错报文。
    2. ICMPv6重定向报文。
    3. 目的地址是IPv6组播地址的数据包,以下情况除外:数据包太大(PTB)的报文;参数问题报文(代码2)。
    4. 作为链路层组播(以及前面提到的例外情况)的数据包。
    5. 作为链路层广播(以及前面提到的例外情况)的数据包。
    6. 源地址不是唯一识别的单个节点的数据包。这意味着,源地址不能是未指定的地址、IPv6组播地址,或者任意为发送者所知的选播地址。

这里面反复提及的组播与广播,可以看这篇文章:CSDN博主z502521809的《广播、组播、点播的区别》,网址:https://blog.csdn.net/z502521809/article/details/53007932?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4

限制ICMP报文速率的方法是使用令牌桶(token bucket),bucket)。采用令牌桶后,每个“桶”保存了最大数量(B)的“令牌”,每个“令牌”允许一定数量的报文被发送。桶定期被新的令牌(速率为Ⅳ)填充,并且每发送一个报文便减1。

4. ICMP差错报文的应用——traceroute

打印出可执行程序主机,一直到目标主机之前经历多少路由器。

具体详情可以看:CSDN博主LLQ_200的《traceroute命令讲解》,网址:https://blog.csdn.net/llq_200/article/details/81034345

5. ICMP查询/信息类报文的应用——ping请求

尽管ICMP定义了一定数量的查询报文,例如地址掩码请求/应答(类型17/18)、时间戳请求/应答(类型13/14)、信息请求/应答(类型15/16),但是这些功能已经被其他特殊目的的协议替代。唯一保存下来的广泛使用的ICMP查询/信息类报文是回显请求/应答报文,通常称为ping,以及路由器发现报文。

ping命令的功能
(1)能验证网络的连通性
(2)会统计响应时间和TTL(IP包中的Time To Live,生存周期)
那么如何验证的呢?
(1)ping命令会先发送一个 ICMP Echo Request给对端
(2)对端接收到之后, 会返回一个ICMP Echo Reply
(3)若没有返回,就是超时了,会认为指定的网络地址不存在。

6. 参考资料:

  1. CSDN博主china_jeffery的《网络协议 – ICMP协议(1) 报文格式》,网址:https://blog.csdn.net/china_jeffery/article/details/79045630?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2
  2. CSDN博主冀博的《ICMP报文分析》,网址”https://blog.csdn.net/baidu_37964071/article/details/80514340?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-14&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-14
  3. CSDN博主z502521809的《广播、组播、点播的区别》,网址:https://blog.csdn.net/z502521809/article/details/53007932?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4
  4. CSDN博主LLQ_200的《traceroute命令讲解》,网址:https://blog.csdn.net/llq_200/article/details/81034345
  5. 我自己的博客《IPv4和IPv6的数据报结构头部详解》,网址:https://blog.csdn.net/qq_45877524/article/details/105003498
  6. TCP/IP协议详解:卷一 P248-P306
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章