基于 Wireshark 分析 ICMP 协议

news2025/1/12 23:34:41

一、ICMP 协议

ICMP(Internet Control Message Protocol)即互联网控制报文协议,是TCP/IP协议簇的一个子协议。它主要用于在IP主机、路由器之间传递控制消息,这些消息涉及网络是否通畅、主机是否可达、路由是否可用等关于网络本身的信息。虽然ICMP报文并不传输用户数据,但对于用户数据的传递却起着至关重要的作用。

ICMP报文被封装在IP数据包内部,作为IP数据包的数据部分通过互联网传递。当数据包处理过程中出现差错时,ICMP会向数据包的源端设备报告这个差错,但并不会纠正这个差错,也不会通知中间的网络设备。这是因为ICMP报文只包含源端和最终的目的端的信息,并不记录报文在网络传递中的全部路径。

ICMP协议共有五种常用类型,包括回显请求(Echo Request)、回显应答(Echo Reply)、目标不可达(Destination Unreachable)、参数问题(Parameter Problem)和红牌。此外,还有时间戳、信息等较少使用的类型。

  • 回显请求报文用于测试网络的连通性和延迟。发送方发送一个回显请求报文到目标主机,目标主机收到请求后回复一个回显应答报文。
  • 回显应答报文是目标主机收到回显请求后产生的响应,用于确认网络连通性和延迟。
  • 当网络中的路由器或主机无法将数据包送达目标主机时,会发送目标不可达报文。
  • 当接收方发现数据包中的某个参数错误时,会发送参数问题报文。

ICMP报文格式分为两个部分:首部和数据部分。在数据部分中,前四个字节是统一的格式,第一个字节是类型,占8位;类型的右边是代码,也占8位;检验在最右边,占两个字节,即16位。第二行有4个字节,占32位。第四个字节取决于ICMP报文的类型。

总的来说,ICMP协议在网络通信中扮演着重要的角色,通过传递控制消息来确保数据的正确和有效传输。如需更多关于ICMP协议的详细信息,建议查阅计算机网络技术相关书籍或咨询该领域的专业人士。

二、ICMP 头

以下是ICMP头部结构的表格解析:

字段长度(字节)描述
类型(Type)1用于标识ICMP报文的作用及格式。例如,8表示回送请求(Echo),0表示回送应答(Echo Reply)。
代码(Code)1进一步划分ICMP报文的类型,标识错误的原因。如果一个类型中只有一种功能,代码域置为0。
校验和(Checksum)2用于差错校验,由ICMP头部和数据部分共同计算得出。校验和的计算方法和IP协议校验和算法是一样的。
标识符(Identifier)4如果是ICMP请求报文,该字段在Linux/macOS中用的是进程ID。对于回显请求和回显应答报文,标识符帮助匹配请求和应答。
序列号(Sequence Number)4对于回显请求和回显应答报文,序列号帮助匹配请求和应答,并用来确定回显请求报文的顺序。

需要注意的是,ICMP头部长度为8字节,这包括了上述的字段。后面紧跟的是ICMP报文的数据部分,其长度和内容取决于ICMP报文的类型。ICMP报文实际上还是通过IP层传输,ICMP头部和ICMP数据部分组成完整的报文,然后再添加IP协议头部报文,形成完整的IP报文,最后再通过数据链路层生成以太网帧进行传输。

此外,关于字节和数字的存储顺序,网络存储顺序是从左到右,依次从低位到高位,这与字节和数字的常规存储顺序(从右到左,依次从低位到高位)是相反的。

这个表格提供了一个关于ICMP头部结构的深入解析,有助于理解ICMP报文如何在网络中传输和处理。如需更多关于ICMP协议的详细信息,建议查阅计算机网络技术相关书籍或咨询该领域的专业人士。

三、ICMP 类型和消息

ICMP(Internet Control Message Protocol,互联网控制消息协议)的类型和消息是其核心组成部分,用于在网络中传递各种控制信息。下面我们将深入解析ICMP的类型和消息。

ICMP类型

ICMP类型字段占一字节,用于标识ICMP报文的类型。目前定义了14种类型,取值范围在1到255之间。根据类型值,ICMP报文可以分为差错报文(1~127)和信息报文(128以上)。常见的ICMP类型包括:

  • 回显请求(Echo Request):通常用于测试网络的连通性和延迟。发送方发送一个回显请求报文到目标主机,目标主机收到请求后回复一个回显应答报文。
  • 回显应答(Echo Reply):目标主机对回显请求报文的响应,用于确认网络连通性和延迟。
  • 目标不可达(Destination Unreachable):当路由器或主机无法将数据包送达目标主机时,会发送此报文。这可能是由于多种原因,如主机不可达、协议不可达、端口不可达等。
  • 超时(Time Exceeded):当数据包在传输过程中生存时间(TTL)超时,或在某个节点上停留时间过长时,会发送此报文。

此外,还有重定向、源站抑制、参数问题等其他类型。

ICMP消息

ICMP消息由消息类型、代码、校验和和数据字段组成。其中,消息类型和代码共同决定了ICMP消息的具体功能和用途,而数据字段根据不同的消息类型和代码而有所变化。

ICMP消息主要用于传递网络错误报告和诊断信息,以及支持一些网络工具和应用程序(如ping、traceroute)的正常运行。例如,当数据包无法到达目标主机时,路由器会发送一个目标不可达的ICMP消息,告知发送方错误的原因。这样,发送方就可以根据这些信息调整网络配置或采取其他措施。

总的来说,ICMP的类型和消息是网络通信中不可或缺的一部分,它们通过传递控制信息来确保数据的正确和有效传输。深入理解ICMP的类型和消息对于网络管理员和开发人员来说是非常重要的,有助于他们更好地管理和优化网络性能。

四、请求与响应

在ICMP(Internet Control Message Protocol)协议中,有一些常见的请求和响应类型,用于在网络中进行通信和故障排除。下面是ICMP协议中常见的请求和响应类型:

1. ICMP Echo请求和回应(Ping):ICMP Echo请求是一种常见的网络工具,用于测试主机的可达性和延迟。发送方发送一个Echo请求数据包到目标主机,目标主机接收到请求后,会发送一个Echo回应数据包作为响应。这种请求和响应用于网络诊断和测量网络延迟。

使用 Wireshark 抓包 Ping 命令

请求数据包的结构

响应包

2. ICMP Timestamp请求和回应:ICMP Timestamp请求用于获取目标主机的时间戳信息。发送方发送一个Timestamp请求数据包到目标主机,目标主机接收到请求后,会返回一个带有时间戳信息的Timestamp回应数据包。

3. ICMP Redirect请求和响应:ICMP Redirect用于向主机发送路由重定向信息。当一个主机发送数据包到错误的网关时,网关可以发送一个Redirect请求给主机,指示其将流量发送到更合适的网关。

4. ICMP Destination Unreachable(目的地不可达):当一个主机无法到达目标主机或端口时,目标主机会发送一个Destination Unreachable响应给发送方,通知其无法到达目标。

5. ICMP Time Exceeded(时间超过):当一个数据包在网络中被路由器丢弃或超过最大生存时间(TTL),路由器会发送一个Time Exceeded响应给发送方,通知其数据包的生存时间已过。

6. ICMP Parameter Problem(参数问题):当一个数据包的IP头或上层协议头部有问题时,接收方可以发送一个Parameter Problem响应给发送方,通知其存在参数错误。

这些ICMP请求和响应类型在网络中起着重要的作用,用于网络诊断、故障排除和通信确认。然而,攻击者也可以利用ICMP协议进行攻击,如ICMP洪水攻击(ICMP Flood)和ICMP回显请求攻击(Ping of Death)。为了保护网络免受这些攻击,建议使用防火墙、入侵检测/预防系统(IDS/IPS)和流量过滤等安全措施。

五、路由跟踪

ICMP中的路由跟踪主要通过Traceroute(路由追踪)工具实现。Traceroute利用ICMP报文和IP头部的TTL(Time-to-Live)字段来跟踪IP数据包在网络中的路径。

TTL字段指定了数据包在经过路由器转发时能够经过的最大网段数量。当源主机发送数据包时,会设置一个初始的TTL值。每经过一个路由器,TTL值就会减一。当TTL值减为零时,路由器会丢弃该数据包,并发送一个ICMP超时差错报文给源主机。

Traceroute发送的数据包中包含了特殊的ICMP报文(如超时差错控制报文),并逐渐增加数据包的TTL值。每当数据包经过一个路由器时,TTL值会减一,直到TTL值为零时,路由器会发送ICMP超时差错报文。通过收集这些ICMP报文,Traceroute可以确定数据包经过的路由路径,并显示每个路由器或网络节点的地址。

此外,Traceroute还可以用于分析网络性能,如响应时间、丢包率和响应时延等。它可以帮助网络管理员诊断网络问题,找出网络瓶颈或故障点,从而优化网络配置和性能。

需要注意的是,Traceroute的实现原理可能因不同的操作系统和网络环境而有所差异。一些系统可能不支持所有的Traceroute选项或功能。因此,在实际使用中,需要参考具体系统或工具的文档,并根据实际情况进行配置和使用。

总的来说,ICMP中的路由跟踪是一种强大的网络诊断工具,通过Traceroute等工具可以帮助我们深入了解数据包在网络中的传输路径和性能表现。

使用 Wireshark 抓包 tarcert 命令

TTL 值为 1 的数据包 

因为它的 TTL 值减 1 变为了 0,所以不能继续传输,因此目的不可达 

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

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

相关文章

2024年北京高校后勤餐饮博览会|北京餐饮展览会

高联采高校后勤餐饮博览会 暨第25届北京高校后勤餐饮联合招标采购大会 同期举办:中国北京餐饮供应链博览会 主 题: 因为FOOD校园GOOD / 同创高校大舞台共享精彩高联采 时 间:2024年9月21日-22日 地 点:中国国际展览中心&…

利用大模型提升个性化推荐的异构知识融合方法

在推荐系统中,分析和挖掘用户行为是至关重要的,尤其是在美团外卖这样的平台上,用户行为表现出多样性,包括不同的行为主体(如商家和产品)、内容(如曝光、点击和订单)和场景&#xff0…

【Hadoop】--基于hadoop和hive实现聊天数据统计分析,构建聊天数据分析报表[17]

目录 一、需求分析 1、背景介绍 2、目标 3、需求 4、数据内容 5、建库建表 二、ETL数据清洗 1、数据问题 2、需求 3、实现 4、扩展概念:ETL 三、指标计算 1、指标1:统计今日消息总量 2、指标2:统计每小时消息量、发送量和接收用…

python学习笔记----面向对象(十)

一、什么是类 类是一个抽象的模板,用于创建具体的实例。可以将类理解为一个蓝图,它定义了一系列对象共有的属性(数据)和方法(函数)。类是对一组具有相同属性和功能的对象的抽象。例如,你可以定…

FIFO Generate IP核使用——Native读写接口信号详解

Native FIFO接口信号是用于FIFO IP核与外部电路进行通信的信号。当FIFO支持独立的写和读时钟时,这些信号可以包括标准端口和可选端口。 1 当FIFO具有独立时钟时的接口信号 当FIFO具有独立的时钟时,其接口信号会相应地有所变化。特别是关于复位信号rst…

政安晨:【Keras机器学习示例演绎】(三十二)—— 在 Vision Transformers 中学习标记化

目录 导言 导入 超参数 加载并准备 CIFAR-10 数据集 数据扩增 位置嵌入模块 变压器的 MLP 模块 令牌学习器模块 变换器组 带有 TokenLearner 模块的 ViT 模型 培训实用程序 使用 TokenLearner 培训和评估 ViT 实验结果 参数数量 最终说明 政安晨的个人主页&…

Ubuntu TeamViewer安装与使用

TeamViewer是一款跨平台的专有应用程序,允许用户通过互联网连接从全球任何地方远程连接到工作站、传输文件以及召开在线会议。它适用于多种设备,例如个人电脑、智能手机和平板电脑。 TeamViewer在交通不便或偏远地区使用电脑问题时,将发挥重…

从零开始搭建Springboot项目脚手架1:新建项目

1、技术栈 SpringBoot 3.2.5: 2、 新建项目 使用SpringInitializr 选择Lombok、Configuration Processor、Spring Web,同时IDEA也要安装Lombok插件 删除多余的Maven目录、Maven文件,把HELP.md改成README.md。 当然前提是已经安装好Maven和配…

论文辅助笔记:Tempo之modules/prompt.py

1 get_prompt_param_cls 2 get_prompt_value 3 Prompt 类 3.1 _init_weights 3.2 forward

Windows设置Redis为开机自启动

前言 Redis作为当前最常用的当前缓存技术,基本上Web应用中都有使用。所以,每次我们在本地启动项目前,都必须将Redis服务端启动,否则项目就会启动失败。但是,每次都要去启动Redis就很麻烦,有没有办法做到开…

向量体系结构(5):步幅集中一分散

笔记来源《计算机体系结构 量化研究方法》 回答上一篇最后留下的问题 向量体系结构:向量执行时间-CSDN博客 (1)如何有效向量化多维矩阵运算? (2)向量处理器如何高效处理稀疏矩阵? 步幅 步…

一文了解python机器学习Sklearn

1.3 安装和配置Sklearn 要使用Sklearn库,首先需要安装Python和相应的库。在本教程中,我们将使用Python 3.x版本。可以使用以下命令安装Sklearn库: pip install scikit-learn安装完成后,可以在Python代码中导入Sklearn库&#xf…

WIN10 anaconda 安装 CondaError: Run ‘conda init‘ before ‘conda activate‘

1 下载 https://www.anaconda.com/download/success 2 安装 3 修改环境变量 安装后修改环境变量 4 winrun 进入命令窗口 输入cmd 输入 conda info 5 创建 虚拟环境 conda create -n yolov8 python3.8 -y 6 CondaError: Run ‘conda init’ before ‘conda activate’ c…

架构每日一学 2:架构师六个生存法则之一:架构必须有且仅有一个目标(一)

本文首发于公众号:腐烂的橘子 为什么有的架构活动没有正确的目标? 在每个架构活动启动之前,必须有且仅有一个正确的目标,这是架构设计的起点[1]。何为正确?正确就是要与公司的战略目标相匹配。否则系统会变得复杂和无…

基于Spring Boot的医疗服务系统设计与实现

基于Spring Boot的医疗服务系统设计与实现 开发语言:Java框架:springbootJDK版本:JDK1.8数据库工具:Navicat11开发软件:eclipse/myeclipse/idea 系统部分展示 医疗服务系统首页界面图,公告信息、医疗地图…

RHCE shell-第一次作业

要求: 1、判断当前磁盘剩余空间是否有20G,如果小于20G,则将报警邮件发送给管理员,每天检査- 次磁盘剩余空间。 2、判断web服务是否运行(1、查看进程的方式判断该程序是否运行,2、通过查看端口的方式 判断该程序是否运…

基于FPGA的数字信号处理(8)--RTL运算的溢出与保护

前言 在做加、减、乘、除等运算时,经常会发生 溢出 的情况。比如1个4bits的计数器(每个时钟累加1),在4’b1111 1 后,原本其期望值应该是 151 即16,但是4bits的寄存器能表示的最大值只是4‘b1111即15&…

Server 2022 IIS10 PHP 7.2.33 升级至 PHP 8.3 (8.3.6)

下载最新版本 PHP 8.3 (8.3.6),因为是 FastCGI 执行方式,选择 Non Thread Safe(非线程安全)。 若有以下提示: The mysqli extension is missing. Please check your PHP configuration. 或者 PHP Fatal error: Uncaught Error: Class &qu…

PDF Shaper Ultimate 免安装中文破姐版 v14.1

软件介绍 PDF Shaper是一套完整的多功能PDF编辑工具,可实现最高的生产力和文档安全性。它允许你分割,合并,水印,署名,优化,转换,加密和解密您的PDF文件,也可插入和移动页&#xff0…

每日OJ题_DFS爆搜深搜回溯剪枝①_力扣784. 字母大小写全排列

目录 力扣784. 字母大小写全排列 解析代码1_path是全局变量 解析代码2_path是函数参数 力扣784. 字母大小写全排列 784. 字母大小写全排列 难度 中等 给定一个字符串 s ,通过将字符串 s 中的每个字母转变大小写,我们可以获得一个新的字符串。 返回…