ICMP 是个啥破玩意?(三)

简介: ICMP 的全称是 Internet Control Message Protocol(互联网控制协议),它是一种互联网套件,它用于IP 协议中发送控制消息。也就是说,ICMP 是依靠 IP 协议来完成信息发送的,它是 IP 的主要部分,但是从体系结构上来讲,它位于 IP 之上,因为 ICMP 报文是承载在 IP 分组中的,就和 TCP 与 UDP 报文段作为 IP 有效载荷被承载那样。

其他 ICMP 消息

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

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

微信图片_20220416153833.png

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

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

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

微信图片_20220416153837.png

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 的多播地址实现传输。

微信图片_20220416153843.png

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

微信图片_20220416153846.png

ICMPv6 的组播收听发现协议

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

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

与 ICMP 有关的攻击

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

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

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

相关文章
|
弹性计算 Linux Go
如何在阿里云ecs服务器之间高效内网传输大文件
阿里云ecs服务器之间大文件迁移利用阿里云oss通过内网传输解决方案
3576 0
如何在阿里云ecs服务器之间高效内网传输大文件
|
机器学习/深度学习 存储 人工智能
谷歌Gemma介绍、微调、量化和推理
谷歌的最新的Gemma模型是第一个使用与Gemini模型相同的研究和技术构建的开源LLM。这个系列的模型目前有两种尺寸,2B和7B,并且提供了聊天的基本版和指令版。
841 2
|
监控 数据库
SNMP-详解指南
SNMP(Simple Network Management Protocol,简单网络管理协议)是一种广泛应用于互联网上的网络管理协议。它提供了一种标准化的方法,使得网络管理员能够收集、组织、解释和显示网络设备的管理信息,从而实现对网络资源的有效监控和控制。
469 13
|
Linux Python 开发工具
Linux编译安装python2.7.5的步骤
Linux编译安装python2.7.5的步骤 发布时间:2014-03-27 来源:服务器之家 1. 下载python2.7.5,保存到 /data/qtongmon/software http://www.
2240 0
|
Unix Linux 文件存储
文件传输、文件挂载MOUNT:NFS、CIFS、ADB、SAMBA
文件传输、文件挂载MOUNT:NFS、CIFS、ADB、SAMBA
634 0
|
11月前
|
运维 负载均衡 Linux
阿里云轻量服务器最新收费标准与价格参考
阿里云轻量服务器具有灵活的镜像选择、快速上手、简便运维等优势,轻量服务器适合个人开发者和学生用来搭建网站、云端学习等场景使用,2024年截至目前国内地域有60元/月、80元/月等套餐可选,国外地域有24元/月、34元/月、67元/月等套餐可选,目前轻量应用服务器2核2G3M带宽82元1年、2核4G4M带宽298元1年。
|
11月前
|
缓存 关系型数据库 MySQL
服务器磁盘爆满?别慌,教你轻松清理!
服务器磁盘空间告急?别慌!本文将教你如何快速识别并清理占用大量磁盘空间的文件和目录,优化日志文件,释放磁盘空间,恢复系统正常运行。适合服务器管理员和网站运营者。
1649 2
 服务器磁盘爆满?别慌,教你轻松清理!
|
Python
Python报错ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Python报错ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
2506 1
|
负载均衡 网络协议 安全
DPDK用户态协议栈-KNI
DPDK用户态协议栈-KNI
|
NoSQL Linux Redis
Centos7 安装和配置 Redis 5 教程
在Centos上安装Redis 5,如果是 Centos8,那么 yum 仓库中默认的 redis 版本就是 5,直接 yum install 即可。
1311 0