前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ICMP 是个啥破玩意?

ICMP 是个啥破玩意?

作者头像
网络工程师笔记
发布于 2021-05-17 07:41:01
发布于 2021-05-17 07:41:01
9890
举报

我们之前的文章中了解过 TCP/IP 协议,我那时候码了一句

原文链接见如下:

TCP/IP 基础知识总结

下面我们就来真正认识一下 ICMP 协议

什么是 ICMP

ICMP 的全称是 Internet Control Message Protocol(互联网控制协议),它是一种互联网套件,它用于IP 协议中发送控制消息。也就是说,ICMP 是依靠 IP 协议来完成信息发送的,它是 IP 的主要部分,但是从体系结构上来讲,它位于 IP 之上,因为 ICMP 报文是承载在 IP 分组中的,就和 TCP 与 UDP 报文段作为 IP 有效载荷被承载那样。这也就是说,当主机收到一个指明上层协议为 ICMP 的 IP 数据报时,它会分解出该数据报的内容给 ICMP,就像分解数据报的内容给 TCP 和 UDP 一样。

ICMP 协议和 TCP、UDP 等协议不同,它不用于传输数据,只是用来发送消息。因为 IP 协议现在有两类版本:IPv4 和 IPv6 ,所以 ICMP 也有两个版本:ICMPv4 和 ICMPv6

ICMP 的主要功能

对于 ICMP 的功能,主要分为两个

  • ICMP 的第一个功能是确认 IP 包是否能够成功到达目标地址,当两个设备通过互联网相连时,任意一个设备发送给另一个设备的 IP 包如果没有到达,就会生成 ICMP 数据包发送给设备共享。
  • ICMP 的第二个功能是进行网络诊断,经常使用 ICMP 数据包的两个终端程序是 pingtraceroute,traceroute 程序用于显示两台互联网设备之间可能的路径并测量数据包在 IP 网络上的时延。ping 程序是 traceroute 的简化版本,我们经常使用 ping 命令来测试两台设备之间是否互联,ping 通常用来测试两台主机之间的连接速度,并准确报告数据包到达目的地并返回后所花费的时间。

现在我们知道了,如果在 IP 通信过程中由于某个 IP 包由于某种原因未能到达目标主机,那么这个具体的原因将由 ICMP 进行通知,下面是一个 ICMP 的通知示意图

上面我们只是画出了路由器 2 给主机 A 发送了一个 ICMP 数据包,而没有画出具体的通知类型,但实际情况是,上面发送的是目标不可达类型(Destination unreachable),ICMP 也是具有不同的通知类型的,下面我们汇总了 ICMP 数据包的具体通知类型。

通知类型(十进制数)

具体内容

0

回送应答(Echo Reply)

3

目标不可达(Destination Unreachable)

4

原点抑制(Source Quench)

5

重定向或改变路由(Redirect)

8

回送请求(Echo Request)

9

路由器公告(Router Advertisement)

10

路由器请求(Router Solicitation)

11

ICMP 超时(Time Exceeded)

17

地址子网请求(Address Mask Request)

18

地址子网应答(Address Mask Reply)

上表显示的 ICMP 通知类型主要分为两类:有关 IP 数据报传递的 ICMP 报文,这类报文也叫做差错报文(error message),以及有关信息采集和配置的 ICMP 报文,这类报文也被称为查询 query 或者信息类报文。

信息类报文包括回送请求和回送应答(类型 8 和 类型 0 ),路由器公告和路由器请求(类型 9 和 类型 0 )。最常见的差错报文类型包括目标不可达(类型 3 )、重定向(类型 5)、超时(类型 11)。

ICMP 在 IPv4 和 IPv6 的封装

我们知道,ICMP 是承载在 IP 内部的,而且 IPv4 和 IPv6 的封装位置不同:

ICMP 在 IPv4 协议中的封装

ICMP 在 IPv6 协议中的封装

上面两张图显示了 ICMPV4 和 ICMPv6 的报文格式。开头的 4 个字节在所有的报文中都是一样的。但是其余部分在不同的报文中却不一样。

ICMP 头部包含了整个 ICMP 数据段的校验和,具体格式如下

所有的 ICMP 报文都以 8 位的类型(Type)代码(Code) 字段开始,其后的 16 位校验和涵盖了整个报文,ICMPv4 和 ICMPv6 种的类型和代码字段是不同的。

ICMP 的主要消息

ICMP 目标不可达(类型 3)

我们知道,路由器无法将 IP 数据报发送给目标地址时,会给发送端主机返回一个目标不可达(Destination Unreachable Message) 的 ICMP 消息,并且会在消息中显示不可达的具体原因。

实际通信过程中会显示各种各样的不可达信息,比如错误代码时 1 表示主机不可达,它指的是路由表中没有主机的信息,或者主机没有连接到网络的意思。一些 ICMP 不可达信息的具体原因如下

错误号

ICMP 不可达消息

0

0 = net unreachable 网络不可达

1

1 = host unreachable 主机不可达

2

2 = protocol unreachable 协议不可达

3

3 = port unreachable 端口不可达

4

4 = fragmentation needed and DF set 需要进行分片但设置不分片比特

5

5 = source route failed 源站选路失败

6

6 = Destination network unknown 目的网络不认识

7

7 = Destination host unknown 目的主机不认识

8

8 = Source host isolated (obsolete)源主机被隔离(作废不用)

9

9 = Destination network administratively prohibited 目的网络被强制禁止

10

10 = Destination host administratively prohibited目的主机被强制禁止

11

11 = Network unreachable for Type Of Service 由于 TOS,网络不可达

12

12 = Host unreachable for Type Of Service 由于 TOS,主机不可达

ICMP 重定向消息(类型 5)

如果路由器发现发送端主机使用了次优的路径发送数据,那么它会返回一个 ICMP 重定向(ICMP Redirect Message) 的消息给这个主机。这个 ICMP 重定向消息包含了最合适的路由信息和源数据。这种情况会发生在路由器持有更好的路由信息的情况下。路由器会通过这样的 ICMP 消息给发送端主机一个更合适的发送路由。

主机 Host 的 IP 地址为 10.0.0.100。主机的路由表中有一个默认路由条目,指向路由器 G1 的 IP 地址 10.0.0.1 作为默认网关。路由器 G1 在将数据包转发到目的网络 X 时,会使用路由器 G2 的 IP 地址 10.0.0.2 作为下一跳。

当主机向目的网络 X 发送数据包时,会发生以下情况

  1. IP 地址为 10.0.0.1 的网关 G1 在其所连接的网络上接收来自 10.0.0.100 的数据包。
  2. 网关 G1 检查其路由表,并在通往数据包目的网络 X 的路由中获取下一个网关 G2 的 IP 地址 10.0.0.2。
  3. 如果 G2 和 IP 数据包的源地址标识的主机位于同一网络中(也就是 Host 主机),那么 G1 会向主机发送 ICMP 重定向消息。ICMP 重定向消息建议主机直接将发送到网络 X 的数据包发送至 G2,因为 Host - G2 这是通往目的地的较短路径。
  4. 网关 G1 将原始数据包转发到其目的地。

当然,根据主机的配置,Host 主机也可以选择忽略 G1 给它发送的 ICMP 重定向消息。但是,这样就享受不到 ICMP 重定向带来的两大好处,即

  • 优化数据在网络中的转发路径;流量更快到达目的地
  • 降低网络资源利用率,例如带宽和路由器 CPU 负载

如果 Host 主机采用了 ICMP 提供的重定向路径的话,那么 Host 就会直接把数据包发送至网络 X,如下图所示

在主机为 G2 作为下一跳的网络 X 创建路由缓存条目后,这些优势在网络中可见:

  • 交换机和路由器 G1 之间链路的带宽利用率在两个方向上都会降低
  • 由于从主机到网络 X 的流量不再流经此节点,因此路由器 G1 的 CPU 使用率降低
  • 主机和网络 X 之间的端到端网络延迟得到改善。

ICMP 重定向示例如下

ICMP 超时消息(类型 11)

在 IP 数据包中有一个叫做 TTL(Time To Live, 生存周期) ,它的值在每经过路由器一跳之后都会减 1,IP 数据包减为 0 时会被丢弃。此时,IP 路由器会发送一个 ICMP 超时消息(ICMP TIme Exceeded Message, 错误号 0)发送给主机,通知该包已经被丢弃。

设置生存周期的主要目的就是为了防止路由器控制遇到问题发生循环状况时,避免 IP 包无休止的在网络上转发,如下图所示

这里给大家推荐一款比较好用的追踪超时消息的工具 traceroute,它可以显示出由执行程序的主机到达特定主机之前需要经过多少路由器。traceroute 的官网如下 http://www.traceroute.org

ICMP 回送消息(类型 0 和 类型 8)

ICMP 回送消息用于判断相互通信的主机之间是否连通,也就是判断所发送的数据包是否能够到达目标主机。可以向对端主机发送回送请求的消息(ICMP Echo Request Message,类型 8),也可以接收对端主机发送来的回送消息(ICMP Echo Reply Message, 类型 0 )。网络上最常用的 ping 命令就是利用这个实现的。

其他 ICMP 消息

ICMP 原点抑制消息(类型 4)

在使用低速率网络的情况下,网络通信可能会遇到网络拥堵的情况下,ICMP 的原点抑制就是为了应对这种情况的。当路由器向低速线路发送数据时,其发送队列的残存数据报变为 0 从而无法发送时,可以向 IP 数据报的源地址发送一个 ICMP 原点抑制(ICMP Source Quench Message) 消息,收到这个消息的主机了解到线路某处发生了拥堵,从而抑制 IP 数据报的发送。

不过这个 ICMP 消息可能会引起不公平的网络通信,一般不被使用。

ICMP 路由器探索消息(类型 9、10)

ICMP 路由器探索消息主要用于路由器发现(Router Discovery, RD),它主要分为两种,路由器请求(Router Solicitation, 类型 10)路由器响应(Router Advertisement, 类型 9)。主机会在任意路由连接组播的网络上发送一个 RS 消息,想要选择一个路由器进行学习,以此来作为默认路由,而相对应的该路由会发送一个 RA 消息来作为默认路由的响应。

ICMP 地址掩码消息(类型 17、18)

主要用于主机或者路由器想要了解子网掩码的情况。可以向那些目标主机或路由器发送 ICMP 地址掩码请求消息(ICMP Address Mask Request, 类型 17)ICMP 地址掩码应答消息(ICMP Address Mask Reply, 类型 18) 获取子网掩码信息。

ICMPv6

ICMPv6 的作用

IPv4 中 ICMP 仅仅作为一个辅助作用支持 IPv4。也就是说,在 IPv4 时期,即使没有 ICMP,也能进行正常的 IP 数据包的发送和接收,也就是 IP 通信。但是在 IPv6 中,ICMP 的作用被放大了,如果没有 ICMP,则不能进行正常的 IP 通信。

尤其在 IPv6 中,从 IP 定位 MAC 地址的协议从 ARP 转为 ICMP 的邻居探索消息(Neighbor Discovery) 。这种邻居探索消息融合了 IPv4 的 ARP、ICMP 重定向以及 ICMP 的路由选择等功能于一体。甚至还提供了自动设置 IP 的功能。

在 IPv6 中,ICMP 消息主要分为两类:一类是错误消息,一类是信息消息。0 - 127 属于错误消息;128 - 255 属于信息消息。

RFC 2463 中描述了以下消息类型:

类型

描述

1

目标不可达 Destination Unreachable

2

数据包太大 Packet Too Big

3

超时 Time Exceeded

4

参数问题 Parameter Problem

128

回送请求消息 Echo Request

129

回送应答消息 Echo Reply

130

多播监听查询 Multicast Listener Query

131

多播监听报告 Multicast Listener Report

132

多播监听结束 Multicast Listener Done

133

路由器请求消息 Router Solicitation

134

路由器公告消息 Router Advertisement

135

邻居请求消息 Neighbor Solicitation

136

邻居宣告消息 Neighbor Advertisement

137

重定向消息 Redirect Message

138

路由器重编号 Router Renumbering

139

信息查询 ICMP Node Information Query

140

信息应答 ICMP Node Information Response

141

反邻居探索请求消息 Inverse Neighbor Discovery Solicitation

142

反邻居探索宣告消息 Inverse Neighbor Discovery Advertisement

ICMPv6 除了包含 ICMPv4 的所有功能外,还有两个额外的功能。

ICMPv6 邻居探索

邻居探索是 ICMPv6 非常重要的功能,主要表示的类型是 133 - 137 之间的消息叫做邻居探索消息。这种邻居探索消息对于 IPv6 通信起到举足轻重的作用。邻居请求消息用于查询 IPv6 地址于 MAC 地址的对应关系。邻居请求消息利用 IPv6 的多播地址实现传输。

此外,由于 IPv6 实现了即插即用的功能,所以在没有 DHCP 服务器的环境下也能实现 IP 地址的自动获取。如果是一个没有路由器的网络,就使用 MAC 地址作为链路本地单播地址。如果在一个有路由器的网络环境中,可以从路由器获得 IPv6 地址的前面部分,后面部分使用 MAC 地址进行设置。此时可以利用路由器请求消息和路由器公告消息进行设置。

ICMPv6 的组播收听发现协议

组播收听发现协议(MLD,Multicast Listener Discovery)由子网内的组播成员管理。MLD 协议定义了3条ICMPv6 消息:

  • 组播收听查询消息:组播路由器向子网内的组播收听者发送此消息,以获取组播收听者的状态。
  • 组播收听者报告消息:组播收听者向组播路由器汇报当前状态,包括离开某个组播组。
  • 组播收听者。

与 ICMP 有关的攻击

涉及 ICMP 攻击主要分为 3 类:泛洪(flood)、炸弹(bomb) 和信息泄露(information disclsure)

  • 泛洪将会产生大量流量,导致针对一台或者多台计算机的有效 Dos 攻击。
  • 炸弹指的是发送经过特殊构造的报文,这类报文能够导致 IP 或者 ICMP 的处理失效或者崩溃。
  • 信息泄露本身不会造成危害,但是能够帮助辅助其他攻击。

针对 TCP 的 ICMP 攻击已经记录在了 RFC5927 中。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 网络工程师笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
协议森林06 瑞士军刀 (ICMP协议)
到现在为止,我们讲解了网络层中最重要的IP协议(参考协议森林)。IP协议的一个重要补充是是ICMP协议。 ICMP协议 ICMP(Internet Control Message Protocol)是
Vamei
2018/01/18
1.1K0
协议森林06 瑞士军刀 (ICMP协议)
ICMP协议分析
ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
用户8418197
2021/08/09
2.4K0
ICPMv6协议基础
每一个ICMPv6差错报文(类型<128)在不超过最小IPv6 MTU的情况下,包括尽可能大的引起出错的包。
十二惊惶
2024/02/28
1830
ICPMv6协议基础
【IPv6】ICMPv6那些被考官疯狂针对的点
1、工作环境区别:ICMPv4运行于ipv4网络中,而ICMPv6运行在ipv6网络中;
Ponnie
2021/04/29
3.3K0
【IPv6】ICMPv6那些被考官疯狂针对的点
[协议]ICMP协议剖析
本文介绍了ICMP协议的一些重要知识点,包括ICMP协议的作用、类型、代码以及与其他网络协议的关系。同时,还探讨了ICMP报文的格式和字段,以及ICMP在网络安全中的实际应用。
静默虚空
2018/01/05
2.9K0
[协议]ICMP协议剖析
ICMP协议
ICMP(Internet Control Message protocol)互联网信息控制协议,用于实现链路连通性测试和链路追踪,可以实现链路差错报告,属于UDP协议。ICMP有多种类型的报文,同一类型的报文会有多个不同的Code。
233333
2019/05/25
2K0
ICMP协议详解
ICMP协议详解 ICMP协议是一个网络层协议。 一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通;但是IP协议并不提供可靠传输。如果丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因。 所以我们就需要一种协议来完成这样的功能–ICMP协议。
心跳包
2020/08/31
2.6K0
ICMP协议详解
icmp重定向攻击
当发送一份差错报文时,报文始终包含 IP 的首部和产生 ICMP 差错报文的 IP 数据报的前 8 位字节。这样,接收 ICMP 差错报文的模块就会把它与某个特定的协议(根据 IP 数据报首部中的协议字段来判断)和用户进程(根据包含在 IP 数据报前 8 个字节中的 TCP 或 UDP 报文首部中的 TCP 或 UDP 端口号来判断)联系起来。 下面各种情况不会导致产生 ICMP 差错报文:
De4dCr0w
2019/02/27
3.5K1
浅析Icmp原理及隐蔽攻击的方式
Internet Control Message Protocol Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用于网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用
FB客服
2021/10/21
2.4K0
【在Linux世界中追寻伟大的One Piece】DNS与ICMP
TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序。但是IP地址不方便记忆。
枫叶丹
2024/10/10
1120
【在Linux世界中追寻伟大的One Piece】DNS与ICMP
ICMP 协议分析
ICMP是(Internet Control Message Protocol)Internet控制报文协议,它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。
用户8418197
2021/07/03
1.6K0
ICMP详解「建议收藏」
ICMP(Internet Control Message Protocol)网际控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
全栈程序员站长
2022/09/14
1.5K0
数据通信网络之IPv6基础
如图 1 所示,路由器 R1 通过两个物理接口分别连接物联网终端 R4(通过一台路由器 模拟)及计算机 PC1。其中,路由器 R1 和 R4 推荐使用 AR2220 及以上设备。
timerring
2023/10/13
6620
数据通信网络之IPv6基础
听说你 ping 用的很 6 ?给我图解一下 ping 的工作原理!
在日常生活或工作中,我们在判断与对方网络是否畅通,使用的最多的莫过于 ping 命令了。
小林coding
2020/03/31
8220
IPv6排障工具之ping6完整过程细节剖析
导语 | 关于ping的原理详解,网上搜索一下可以搜索出很多相关内容,而ping6的详解,我暂时还没有看见高质量的文章。希望本文能够让更多朋友了解ping6的原理。实现ping主要通过ICMP协议,而实现ping6是通过ICMPV6协议,那么什么是ICMPv6呢?一个完整的ping6的过程究竟是怎样的呢?(作者:腾讯云售后架构师 李彬文)
binwenli
2020/01/14
7.3K0
IPv6排障工具之ping6完整过程细节剖析
ICMP (互联网控制消息协议 )是什么
互联网控制消息协议(英语:Internet Control Message Protocol,缩写:ICMP)是互联网协议族的核心协议之一。
微风-- 轻许--
2022/04/13
7740
ICMP协议/IGMP协议详解
因特网上多播数据包的传输需要依靠多播路由器(一个路由器要想转发多播包,必须增加一些能够识别多播包的软件)
全栈程序员站长
2022/10/05
2.1K0
24 张图搞定 ICMP :最常用的网络命令 ping 和 tracert
IP 是尽力传输的网络协议,提供的数据传输服务是不可靠的、无连接的,不能保证数据包能成功到达目的地。那么问题来了:如何确定数据包成功到达目的地?
Bug开发工程师
2021/07/01
2.8K0
24 张图搞定 ICMP :最常用的网络命令 ping 和 tracert
所谓 ICMP,不过将军与士卒而已
关于这点我们在 IP 协议那篇文章中提过一嘴,IP 协议作为一种提供不可靠数据交付的网络层协议,在传输的过程中,其 IP 数据报可能会发生丢失、重复、延迟和乱序等各种情况, 但是 IP 协议对这些糟糕的情况并不拥有有效的检测和弥补措施,当然更不会将这些结果通知收发双方。
飞天小牛肉
2021/05/14
4670
所谓 ICMP,不过将军与士卒而已
什么是 ICMP ?ping和ICMP之间有啥关系?
今天应粉丝要求约稿讲一下ICMP,说起ICMP,咋一看,很熟悉,但是仔细想想又讲不出来啥,所以这就是本文的目的。
网络技术联盟站
2022/06/27
2.4K0
什么是 ICMP ?ping和ICMP之间有啥关系?
相关推荐
协议森林06 瑞士军刀 (ICMP协议)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档