【网络】网络层ICMP协议

news2024/12/27 11:41:04

🦄 个人主页——🎐开着拖拉机回家_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.coloradmin.cn/o/1374020.html

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

相关文章

STM32的USB设备库

适用范围:“on the STM32F10xxx,STM32F37xxx, STM32F30xxx and STM32L15xxx devices.” STM32_USB-FS-Device_Lib_V4.0.0.rar(访问密码:1666)https://url48.ctfile.com/f/33868548-1000799917-a5409d?p1666 适用范围&#xff1…

入门实战丨Python小游戏经典案例

文章目录 写在前面判断与循环小游戏猜数游戏龙的世界 写在后面 写在前面 本期内容:两个个简单的Python小游戏入门案例。 实验需求:python 实验目标:掌握基本的判断与循环语句。 判断与循环 判断与循环是编程中非常重要的两个概念&#x…

DAC高速线缆:性能卓越的连接解决方案

DAC高速线缆是一种广泛应用于数据中心和云计算等领域的高性能连接解决方案。它通过直接连接设备之间的端口,实现了高速、低延迟的数据传输。本文将介绍DAC高速线缆的定义、组成、作用以及与光纤线的区别,同时提供详细的使用方法和相关问题的解答。 第一…

AlexNet(fashion-mnist)

前言 AlexNet相较于LeNet-5具有更深的网络结构,采用relu激活函数。 AlexNet 参数更多,计算量更大,计算速度更慢,精度更高。 netnn.Sequential(nn.Conv2d(1,96,kernel_size11,stride4,padding1),nn.ReLU(),nn.MaxPool2d(kernel…

启用Hyper-V的三种方法,总有一种适合你

想在Windows 10计算机上的虚拟机中安装并运行Linux或更早版本的Windows操作系统吗?你将很高兴知道,你不需要第三方虚拟化软件(如VirtualBox)来在Windows 10上安装和运行Linux和Windows。 Windows 10中的内置Hyper-V工具允许你创建…

怎么使用好爬虫IP代理?爬虫代理IP有哪些使用技巧?

在互联网时代,爬虫技术被广泛应用于数据采集和处理。然而,在使用爬虫技术的过程中,经常会遇到IP被封禁的问题,这给数据采集工作带来了很大的困扰。因此,使用爬虫IP代理成为了解决这个问题的有效方法。本文将介绍如何使…

vscode中如何解决 Comments are not permitted(JSON中不允许注释)

vs code中如何解决Comments are not permitted(JSON中不允许注释)? 简单几步,让你轻松解决。 1.使用vscode打开json文件后,一些注释显示如图所示,有红色波浪线,影响阅读 2. 悬浮在波浪线报错信…

Flink构造宽表实时入库案例介绍

1. 安装包准备 Flink 1.15.4 安装包 Flink cdc的mysql连接器 Flink sql的sdb连接器 MySQL驱动 SDB驱动 Flink jdbc的mysql连接器 2. 入库流程图 3. Flink安装部署 上传Flink压缩包到服务器,并解压 tar -zxvf flink-1.14.5-bin-scala_2.11.tgz -C /opt/ 复…

史上最全的Mysql优化大全,总结

直接上总结图: MySQL调优与实操 SQL调优 适用于数据量较大的情况下 explain 可以通过explain关键字来分析SQL执行计划,然后进行适当的分析调优。 慢查询日志 永久生效 避免不走索引 1、尽量避免在字段开头模糊查询 2、尽量避免使用in 和 not in 3. 尽量避免进行 null 值的判断…

Redis 内存淘汰策略有哪些?过期数据如何删除?

Redis 在面试中出现的概率非常大,毕竟后端项目如果用到分布式缓存的话,一般用的都是 Redis。目前,还没有出现一个能够取代 Redis 的分布式缓存解决方案。 这篇文章中,我会分享几道 Redis 内存管理相关的问题,都很常见…

[足式机器人]Part2 Dr. CAN学习笔记-Advanced控制理论 Ch04-5稳定性stability-李雅普诺夫Lyapunov

本文仅供学习使用 本文参考: B站:DR_CAN Dr. CAN学习笔记-Advanced控制理论 Ch04-5稳定性stability-李雅普诺夫Lyapunov Stability in the sense of Lyapunov Assympototic Stability

Starrocks监控方案

下载安装包 Download | Prometheus Download Grafana | Grafana Labs 部署prometheus 配置文件 global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: StarRocks_Cluster metrics_path: /metrics static_configs: - targets: [192.168.110…

RAG 详解

原文:GitHub - Tongji-KGLLM/RAG-Survey 目录 RAG调查 什么是RAG?RAG的范式 幼稚的 RAG高级 RAG模块化 RAG如何进行增强?RAG 还是微调?如何评估 RAG?前景 严峻的挑战多式联运扩展RAG的生态系统RAG论文清单 增强阶段 …

Leetcode 1049 最后一块石头的重量II

题意理解&#xff1a; 有一堆石头&#xff0c;用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。 思路转化&#xff1a;我们可…

Unity报错:[SteamVR] Not Initialized (109)的解决方法

问题描述 使用HTC vive 头像进行SteamVR插件的示例场景进行测试&#xff0c;发现头显场景无法跳转到运行场景&#xff08;Unity 项目可以运行&#xff0c;仅出现警告&#xff09;。 具体如下&#xff1a; [SteamVR] Not Initialized (109) [SteamVR] Initialization failed…

数字化转型的必备工具——易点易动固定资产管理系统

在互联网和新技术不断发展的今天,数字化转型已经成为各行各业都需要进行的重要布局。随着互联网思维的持续渗透,固定资产管理也需要进行变革与优化,离开线下转入线上。易点易动作为一款专业的固定资产管理软件,旨在为企业提供全方位便捷的数字化资产管理服务,帮助企业实现数字化…

学生用台灯哪个品牌比较好?口碑最好的护眼台灯推荐

市场上护眼台灯的价格从几百到几千元都有&#xff0c;如果是经济允许当然是越贵可能会越好啊&#xff0c;更多的人还是需要性价比高的护眼台灯的&#xff0c;这也是我写这篇文章的初心啦&#xff0c;也为了给大家避坑&#xff0c;作为一个测评博主&#xff0c;综合我个人购买的…

RT-DETR 更换主干网络之 ShuffleNetv2 | 《ShuffleNet v2:高效卷积神经网络架构设计的实用指南》

目前,神经网络架构设计多以计算复杂度的间接度量——FLOPs为指导。然而,直接的度量,如速度,也取决于其他因素,如内存访问成本和平台特性。因此,这项工作建议评估目标平台上的直接度量,而不仅仅是考虑失败。在一系列控制实验的基础上,本文得出了一些有效设计网络的实用指…

1 Cesium介绍

Cesium ​ Cesium 是一款面向三维地球和地图的&#xff0c;世界级的JavaScript开源产品。它提供了基于JavaScript语言的开发包&#xff0c;方便用户快速搭建一款零插件的虚拟地球Web应用&#xff0c;并在性能&#xff0c;精度&#xff0c;渲染质量以及多平台&#xff0c;易用性…

【计算机组成-指令系统体系结构】

课程链接&#xff1a;北京大学陆俊林老师的计算机组成原理课 1. 设计自己的计算机 一个简单的计算机指令系统 运算类指令&#xff1a;ADD R&#xff0c;M&#xff1b;功能&#xff1a;将R的内容和M中的内容相加后存入R传送类指令&#xff1a;LOAD R&#xff0c;M&#xff1b;…