【网络】网络层ICMP协议

🦄 个人主页——🎐开着拖拉机回家_Linux,大数据运维-CSDN博客 🎐✨🍁

🪁🍁🪁🍁🪁🍁🪁🍁 🪁🍁🪁🍁🪁🍁🪁 🪁🍁🪁🍁🪁🍁🪁🍁🪁🍁🪁🍁

感谢点赞和关注 ,每天进步一点点!加油!

目录

一、ICMP协议简介

二、ICMP报文

2.1 ICMP 的主要功能

2.2 报文类型

2.2 差错报文

2.2.1 终点不可达

2.2.2 改变路由(重定向)

2.2.3 超时

2.2.4 参数问题

2.3 查询/信息类报文

2.3.1 回显请求/应答(ping)

2.3.2 时间戳请求和应答

2.4 ICMP报文应用——ping请求测试

2.4.3 ICMP请求和应答

2.4.4 ICMP差错报告报文


一、ICMP协议简介


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

ICMP通常被认为是IP层的一部分,它是在IP数据报内被封装传输的

如图所示,在IPv4中,ICMP报文属于IP子协议,协议(Protocal)字段值为1表示该报文携带了ICMPv4。

如图所示,为ICMPv4的报文格式。所有的ICMP报文都以8位的类型(Type)和代码(Code)字段开始,其后的16位校验和(CheckSum)字段涵盖了整个报文。

其中各字段的含义如下:

  • 类型(Type):指定 ICMP 报文的类型,占 1 个字节。常见类型有:回显应答(Echo Reply:0)、回显请求(Echo Request:8)等。
  • 代码(Code):指定 ICMP 报文的代码,占 1 个字节。用于进一步描述 ICMP 报文,与 Type 字段组合使用。
  • 校验和(Checksum):校验和,用于检查 ICMP 报文是否有损坏,占 2 个字节。
  • 数据(Data):数据,可变长度。可以是任意数据,长度由具体的 ICMP 报文类型和代码决定。

二、ICMP报文


2.1 ICMP 的主要功能


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

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

参考文章:【Linux】ping命令详解_开着拖拉机回家的博客-CSDN博客

【网络】抓包工具Wireshark下载安装和基本使用教程-CSDN博客

2.2 报文类型


ICMP报文可以分为两大类:

  • 差错报文:有关IP数据报传递的ICMP报文(差错报告报文)
  • 查询报文:有关信息采集和配置的ICMP报文(询问报文)

常用的ICMP报文类型如下表所示,其中*表示最常见的类型:

在ICMP中,对传入报文的处理随着系统的不同而不同。一般来说,传入的信息类请求将被操作系统自动处理,而差错类报文传递给用户进程或传输层协议。常见的ICMP报文类型:

  • Echo Reply(回显应答):用于回复Echo Request(回显请求)报文,通常用于测试网络连接是否正常。
  • Echo Request(回显请求):用于测试测试网络连接是否正常。
  • Destination Unreachable(目的地不可达):用于指示主机或路由器无法到达目的地或某个网络服务不可用。
  • Source Quench(源站抑制):当接收方无法处理所有传入的数据报时,源站抑制报文会发送到发送方,以通知其减慢数据传输速度(一般不被使用)。
  • Redirect(重定向):用于通知发送方,其正在使用的路由不再是最佳路由,建议使用另一条路由
  • Time Exceeded(时间超时):用于指示一个数据包在传输过程中被丢弃,原因是数据包在经过路由器时超过了其生存时间。
  • Parameter Problem(参数问题):用于指示数据包头部中存在错误的参数或选项,导致数据包无法被识别或处理。
  • Timestamp Request/Reply(时间戳请求/应答):用于向另一个主机请求当前时间戳,并将其返回给请求方。
  • Information Request/Reply(信息请求/应答):用于向另一个主机请求特定信息,并将其返回给请求方。
  • Address Mask Request/Reply(地址掩码请求/应答):用于请求另一个主机的网络掩码,并将其返回给请求方。

2.3 差错报文


限制生成ICMP差错报文的原因是限制生成所谓的广播风暴,在这种情况下生成少数的报文就会造成不想要的流量喷流(例如,无限的为响应差错报文而生成差错报文)。

以下情况下不会响应产生ICMPv4差错报文

  • ICMPv4差错报文(但是,响应ICMPv4查询报文可能会产生ICMPv4差错报文)
  • 目的地址是IPv4广播地址或IPv4组播地址的数据报
  • 作为链路层广播的数据报
  • 不是第一个分片的其他分片
  • 源地址不是单个主机的数据报。即源地址不能为零地址、环回地址、广播地址或组播地址

ICMP差错报文共有四种,即:

  • 终点不可达
  • 时间超时
  • 参数问题
  • 重定向(改变路由)

2.3.1 终点不可达

这种类型的报文用来表示数据报无法送达目的地,由主机或其入站网关生成,用于通知客户端由于某种原因目的地不可达。常用的代码有4个,包括:

  • 主机不可达(代码1)
  • 端口不可达(代码3)
  • 需要分片/指定不用分片(代码4)
  • 管理禁止通信(代码13)

ICMPv4目的不可达报文格式如图所示:

具体的细节如下:

  • 主机不可达(代码1):这种形式的目的不可达报文是由路由器或者主机产生的,出现在当它被要求是由直接交付方法发送一个IP数据报到一个主机,但由于某些原因无法到达目的地时。
  • 管理禁止通信(代码13):这种目的不可达报文能够表明一个管理禁令正阻止到目的地的成功通信。这通常是由一个防火墙故意丢弃流量导致的。
  • 端口不可达(代码3):当传入的数据报的目的应用程序还没准备好接受它时,就会生成一个端口不可达报文。
  • 需要分片/指定不用分片(代码4):如果一个IPv4路由器收到一个打算转发的数据报,如果数据报大于选定的传出网络接口的最大传输单元(Maximum Transmission Unit,MTU),则数据报需要分片。如果到达的数据报在IP头部中设置了不分片位字段,那么它会被丢弃而不是转发,此时将产生ICMPv4目的不可达(PTB)报文。

2.3.2 改变路由(重定向)

假如一个路由器收到一个来自主机的数据报,并确定自身并不是主机将数据报投递到目的地的对应下一跳,则该路由器发送一个重定向报文到主机并将该报文发送到正确的路由器(或主机),这个ICMP 重定向消息包含了最合适的路由信息和源数据。也就是说,如果它能够确定给定的数据报存在一个比自己更好的下一跳路由,它就向主机发送重定向报文使其更新转发表,这样以后目的地一样的流量就会被定向到新的节点中。

ICMPv4重定向报文格式如图所示:

路由器会通过这样的 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 之间的端到端网络延迟得到改善。(引用)

2.3.3 超时

每个IPv4数据报在头部中都有一个生存周期(TTL)字段,当由于TTL或跳数限制字段值太小(即到达值为1或0,且必须转发)致使路由器丢弃报文时,会产生ICMP超时(代码0)报文。

推荐一款比较好用的追踪超时消息的工具 traceroute

2.3.4 参数问题

当一个主机或者路由器接收到一个IP数据报,其IP头部存在不可修复的问题时便会产生一个ICMP参数问题报文。在ICMPv4中,当头部中某个字段超过可接受范围导致了一个错误时,一个特殊的ICMP差错报文指针(Pointer)字段指示了错误字段相对于出错IP头部的偏移值。

例如,指针字段值为1表示一个错误的IPv4 DS字段或ECN字段或者ToS字段。

代码0时ICMP参数问题报文最为常见的变体,可用于IPv4头部中出现的任何问题。代码1以前被用于指示数据包中缺少例如安全标志之类的选项,目前已经不使用了。代码2用来指示存在一个损坏了的IHL或者总长度字段值。

2.4 查询/信息类报文


尽管ICMP定义了一定数量的查询报文,但是许多功能都已经被其他特殊目的的协议所替代。唯一保存下来的广泛使用的ICMP查询/信息类报文是回显请求/应答报文,通常称为ping,以及路由器发现报文。

2.4.1 回显请求/应答(ping)

一种最为常用的ICMP报文对就是回显请求和回显应答。在ICMPv4中,其类型分别是8和0。ICMP的回显请求报文大小几乎是任意的(受限于最终封装的IP数据报的大小)。收到ICMP回显请求报文后,ICMP的实现要求将任何接收到的数据返回给发送者。即使涉及多个IP分片。其报文格式如下:

与其他ICMP查询/信息类报文一样,服务器必须在回复中包含标识符和序列号字段。

在ping的实现中将ICMP报文的标识符字段设置为某个数,发送主机能够利用它来分离返回的应答。在基于UNIX的系统中,例如,发送进程的进程ID通常被放置在标识符字段。如果由多个ping在同一台主机同时运行的话,这样将允许ping应用程序识别返回的应答,因为ICMP协议不像传输层协议那样有端口号。当涉及防火墙行为时,这个字段通常被称为查询标识符字段。

当一个新的ping实例运行时,序列号字段从0开始,并且每发送一个回显请求报文便增加1。ping打印出每个返回的数据包的序列号,方便用户查看数据包是否丢失、重排或者重复了。

2.4.2 时间戳请求和应答

ICMP时间戳请求报文是请求某台主机或路由器回答当前的日期和时间。在ICMP时间戳回答报文中有一个32位的字段,其中写入的整数代表从1990年1月1日起到当前时刻一共有多少秒。时间戳请求和回答可用于时钟同步和时间测量。在ICMPv4中,其类型分别是13和14。

2.4 ICMP报文应用——ping请求测试


参考文章:【Linux】ping命令详解_开着拖拉机回家的博客-CSDN博客

【网络】抓包工具Wireshark下载安装和基本使用教程-CSDN博客

2.4.3 ICMP请求和应答

在 Wireshark 的数据包界面中输入显示过滤器并执行,我们选择 ping 百度:

用户可以在框框中输入显示过滤器,进行数据查找,也可以根据协议过滤数据包,我输入 ip.addr == 110.242.68.3,然后开始捕获,在开始ping 百度,输出如下捕获到的信息:

ICMP回显请求报文

ICMP回显请求报文

Linux 使用tcpdump命令也可以抓取到 icmp协议 ping的请求

2.4.4 ICMP差错报告报文


TTL过期差错报告报文

命令指定TTL值为5,也就是通过5个路由器后,TTL会变成0,数据包丢弃,路由器发送ICMP TTL过期报文给源主机。

ping   www.baidu.com  -i 5 -t

ICMP TTL过期报文


TCP/IP详解卷:协议 第八章简要总结 - buguoliujibugaiming - 博客园

网络ICMP 协议详解_icmp协议_白话机器学习的博客-CSDN博客

【网络】抓包工具Wireshark下载安装和基本使用教程-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/613062.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构02附录02:哈希表[C++]

图源:文心一言 上机题目练习整理~🥝🥝 本篇作为线性表的代码补充,每道题提供了优解和暴力解算法,供小伙伴们参考~🥝🥝 第1版:在力扣新手村刷题的记录,优解是Bard老师提…

目标检测-One Stage-EfficientDet

文章目录 前言一、EfficientNetEfficientNet-B0 baselineMBConv 参数优化EfficientNet B0-B7 参数 二、EfficientDetBiFPN复合缩放方法 总结 前言 EfficientDet是google在2019年11月发表的一个目标检测算法系列,其提出的背景是:之前很多研究致力于开发更…

自动化创建ETX用户帐号

在芯片设计行业,ETX是常见的远程访问环境。用户在通过ETX访问远程环境前必须首先加入ETX系统,然后通过profile分配相关的环境的访问权限。 通常这些操作在ETX WEB页面手工操作,如果我们期望实现用户帐号注册全自动化,就需要将以上…

一文搞懂Git版本工具常用的操作命令

简述 Git是一个分布式的版本控制工具,其在使用上要比SVN等版本控制工具稍显复杂。为了便于理解,本文通过图文方式详细介绍Git的使用,以便于快速掌握Git。Git涉及的主要概念和命令如图所示。理解上述概念后,基本可以使用Git完成日常开发工作。关于Git的介绍以及常用命令在之前的…

【YOLO系列】 YOLO V4之正则化DropBlock

资料下载 论文下载:DropBlock: A regularization method for convolutional networks 一、简介 DropBlock是一种正则化技术,用于防止深度神经网络的过拟合。它通过在训练过程中随机丢弃网络中的一部分特征图,来增加模型的泛化能力。 文章中分…

在微信公众号上怎么实现拼团功能

拼团魅力:微信公众号上的拼团功能如何助力营销 一、引言 在这个数字化时代,微信公众号成为了企业与消费者互动的重要平台。而拼团功能作为微信营销的一大利器,为企业带来了巨大的商业价值。那么,如何在微信公众号上实现拼团功能&…

gseaplot3修改一下clusterProfiler默认绘图函数

直接使用clusterProfiler::gseaplot2绘图会出现下边的结果&#xff0c;导致四周显示不全&#xff0c;线的粗细也没办法调整&#xff0c;因为返回的是一个aplot包中的gglist对象&#xff0c;没太多研究。 p1 <- clusterProfiler::gseaplot2(gsea_result, gsea_result$ID, pv…

JavaScript初见

书写位置 和css差不多 行内script标签内script所引的js文件 输入输出语句 输入 prompt();输出 console();// 控制台显示 alert();//弹出框 alert(字符串 变量 ’\n‘);变量 声明 var neme 原神; var tele 1;不用管类型&#xff0c;真不错啊 **js中变量的声明不需…

Logback框架基本认识

文章目录 一.什么是Logback1.1 初识Logbcak 二.Logbcak的结构三.日志的级别四.配置组件详解4.1 logger 日志记录器属性的介绍如何在配置文件里配置 4.2 appender 附加器 配合日志记录器的输出格式4.2.1 控制台附加器4.2.2 文件附加器4.3.3滚动文件附加器 4.3 Filter: 过滤器&am…

记录一次应用服务响应慢问题排查过程

3个自建系统使用了一个统一的外部系统接入服务&#xff0c;该服务主要是统一处理外部系统对接&#xff0c;处理掉数据鉴权等问题&#xff0c;提供内部鉴权接口给自己的服务使用。类似一个对接网关。 问题背景 研发反应&#xff0c;后端接口请求时快时慢&#xff0c;影响演示效…

【MATLAB】快速绘制曲线图的形状,粗细,颜色

目录 MATLAB 快速绘制曲线图的形状&#xff0c;粗细&#xff0c;颜色 1.通过改变R-G-B 的值改变线条的颜色&#xff1a;2.通过改变c∈[1,∞)的值改变线条的粗细&#xff1a;3.线条形状&#xff0c;粗细&#xff0c;颜色选择&#xff1a;4.Matlab中画图实现案例&#xff1a; MA…

js封装根据年月日获取星座效果demo(整理)

//根据年月日获取星座 function getZodiacSign(dateString) {// 用法:const dateStr 2024-01-11;// const zodiacSign getZodiacSign(dateStr);const date new Date(dateString);const month date.getMonth() 1;const day date.getDate();if ((month 1 && day &…

Python教程39:使用turtle画美国队长盾牌

---------------turtle源码集合--------------- Python教程36&#xff1a;海龟画图turtle写春联 Python源码35&#xff1a;海龟画图turtle画中国结 Python源码31&#xff1a;海龟画图turtle画七道彩虹 Python源码30&#xff1a;海龟画图turtle画紫色的小熊 Python源码29&a…

【uview2.0】Keyboard 键盘 与 CodeInput 验证码输入 结合使用 uview

https://www.uviewui.com/components/codeInput.html &#xff08;CodeInput 验证码输入&#xff09; https://www.uviewui.com/components/keyboard.html &#xff08;Keyboard 键盘&#xff09; <u-keyboard mode"number" :dotDisabled"true" :show&q…

一体式气象站的优点是什么?带大家了解一下

一体式气象站是一款高度集成、低功耗、可快速安装、便于野外监测使用的高精度自动气象观测设备。 一体式气象站的优点主要体现在以下几个方面&#xff1a; 集成度高&#xff1a;一体式气象站集成了多种气象传感器、数据处理单元、显示单元和通讯模块等&#xff0c;可以同时监…

2019年认证杯SPSSPRO杯数学建模B题(第一阶段)外星语词典全过程文档及程序

2019年认证杯SPSSPRO杯数学建模 基于方差分布的方法对未知语言文本中重复片段的自动搜索问题的研究 B题 外星语词典 原题再现&#xff1a; 我们发现了一种未知的语言&#xff0c;现只知道其文字是以 20 个字母构成的。我们已经获取了许多段由该语言写成的文本&#xff0c;但…

2024年【熔化焊接与热切割】考试内容及熔化焊接与热切割免费试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 熔化焊接与热切割考试内容是安全生产模拟考试一点通总题库中生成的一套熔化焊接与热切割免费试题&#xff0c;安全生产模拟考试一点通上熔化焊接与热切割作业手机同步练习。2024年【熔化焊接与热切割】考试内容及熔化…

ceph、gluster、longhorn选型对比

Ceph Ceph是一个分布式的存储系统&#xff0c;可以在统一的系统中提供唯一的对象、块和文件存储。 名词解释&#xff1a; RADOS&#xff1a; 由自我修复、自我管理、智能存储节点组成的可靠、自主、分布式对象存储LIBRADOS&#xff1a; 一个允许应用程序直接访问 RADO 的库&…

怎么做拼团链接_生鲜果蔬商家都在用的小程序拼团系统

拼团链接&#xff1a;重塑营销新格局 在当今这个信息爆炸的时代&#xff0c;消费者面对海量信息&#xff0c;选择变得尤为重要。如何在众多品牌中脱颖而出&#xff0c;让消费者愿意主动为你驻足&#xff1f;答案就是——拼团链接。 拼团&#xff0c;是一种社交电商的创新形式。…

Clickhouse实时指标加工

Starwift实时指标加工方案 方案介绍 ​ Starwift(ClickHouse)是京东云上的一款云原生数据仓库,为用户带来极速分析体验,能够支撑实时数据分析和海量数据离线分析。便捷的弹性扩缩容能力,极致分析性能和丰富的企业级特性,助力客户数字化转型。实时指标加工是从离线指标加…