ICMP协议以及报文讲解(ICMP查询报文、ICMP差错报文)

目录

ICMP协议

ICMP报文格式

ICMP回显请求/应答报文

ICMP差错报文

ICMP 宿主机不可达差错报文

ICMP 重定向差错报文

ICMP TTL超时差错报文


ICMP协议

ICMP协议的作用

ICMP(Internet Control massage protocol)因特网控制协议,主要用来在网络设备间传递各种差错、控制和查询等消息(在收集网络信息、诊断、排查故障等方面具有重要的作用)

ICMP是网络层协议,协议号为1

为什么需要ICMP差错报文

IP协议的缺点

1、IP协议没有差错报文或差错纠正机制

2、IP协议缺少一种为主机和管理查询的基址

所以ICMP协议就是为了补充IP协议的这两个缺点而设计的,配合IP协议使用

ICMP报文格式

通过Type和Code定义ICMP的报文类型

ICMP报文主要分为查询报文和差错报文两大类

查询报文:主要用于在主机和路由器之间传输控制信息,也用来探测网络连通性和路径等信息

差错报文:用于报告数据传输过程中的错误

Type

Code

描述

 

0

0

回显应答(ping应答)

查询报文

8

请求回显(ping请求)

9

路由器通告

10

路由器请求

13

时间戳请求(目前已不使用)

14

时间戳应答(目前已不使用)

15

信息请求(目前已不使用)

16

信息应答(目前已不使用)

17

地址掩码请求

18

地址掩码应答

3(目的不可达报文)

0

网络不可达

差错报文

1

主机不可达

2

协议不可达

3

端口不可达

6

目的网络不认识

7

目的主机不认识

9

目的网络被强制禁止

10

目的主机被强制隔离

11

由于TOS,网络不可达

12

由于TOS,主机不可达

13

由于过滤,通信被强制禁止

4(源抑制报文)

0

源端被关闭

5(ICMP重定向报文)

0

对网络重定向

1

对主机重定向

2

对服务类型和网络重定向

3

对服务类型和主机重定向

11(TTL为0报文)

0

传输期间生存时间为0

1

在数据报组装期间生存时间为0

12(报文格式问题)

0

坏的IP首部

1

缺少必须的选项

ICMP回显请求/应答报文

作用

通过ping工具发送ICMP回显请求消息探测网络的连通性(对端回应ICMP回显应答请求)

通过tracert工具发送ICMP回显请求来探测去往某目的网路的路径信息(修改ICMP回显请请求的TTL的值,通过对端回应的Type为11的ICMP差错报文来得到路径信息)

报文格式

Type

8为请求

0为应答

Identifier

标识符,标识ICMP该回显应答对应的是哪个回显请求(通过该字段使得请求和应答一一对应)

BE和LE是通过不同的编码格式得到的值,解码后的信息都是一样的

可以理解为BE是针对于windows系统的编码格式,LE是针对于Linux系统的编码格式

Sequence Number

序列号,发送报文的序列号,每次发送序列号就+1

Data

可选,包含要发送的数据(回显应答通常返回与回显请求所收到的数据相同)

ICMP差错报文

ICMP差错报文都有一个的字段(IP头部+原始数据包的前64 bits)

该字段的内容包含出错数据包的IP头部以及出错数据包的前64位数据(端口号、序列号、其它协议报文头部等)

该字段的作用就是将产生该错误的报文附带在差错报文中,当管理员看到差错报文时知道是什么原因产生的错误,有利于排查错误

以下情况不会产生ICMP差错报文

1、对于携带ICMP差错报文的数据包,不会在产生ICMP差错报文

2、对于分片的数据包,如果不是第一个分片,则不会产生ICMP差错报文

3、对于具有组播地址的数据报文,不会产生ICMP差错报文

4、对于具有特殊地址的数据报文(如127.0.0.0和0.0.0.0),不会产生ICMP差错报文

ICMP 宿主机不可达差错报文

一般是本地没有去往报文目的IP地址的路由,就会向报文的源IP地址回应ICMP差错报文(宿主机不可达)

网络不可达差错报文(当路由器上没有去往目的网段的路由时就会发送网络不可达差错报文)

从数据包中可以看出来

  1. 当ICMP Echo Request报文到达192.168.10.254这台设备时
  2. 这台设备(10.254)发现自己没有去往该报文目的地址100.0.0.1的路由
  3. 此时这台设备(10.254)就发送ICMP差错报文-网络不可达消息给ICMP Echo Request报文的源IP地址(10.129)

端口不可达IP报文(一般在tracert跟踪路由场景下会出现此差错报文)

Tracert主要是用来跟踪路径,在跟踪路径的过程中如果某个路由器或目标主机上的应用程序没有在相应的端口上监听,此时收到ICMP回显请求时会回应端口不可达的ICMP差错报文、或者当网络管理员阻止了ICMP回显请求时也会发送端口不可达的ICMP差错报文(端口不可达信息不止因为Tracert产生,还会因为其它操作产生,只是Tracert是比较常见的)

从数据包中可以看出来

  1. 当172.22.105.211访问172.22.105.254的137端口时
  2. 这台设备(105.254)发现自己并没有开启该端口的监听(或者拒绝接收ICMP回显请求)
  3. 此时这台设备(105.254)就发送ICMP差错报文-端口不可达消息给172.22.105.211

ICMP 重定向差错报文

产生重定向报文的场景

1、从一个接口接收到的报文再从同一个接口发出去,一般就会产生ICMP重定向(不一定是环路)

2、当设备从某个接口收到发往远程网络的数据时,发现源IP地址与下一跳属于同一网段时也会产生ICMP重定向

ICMP重定向报文的作用

当主机收到ICMP重定向差错报文后,会将自己去往目的IP地址(该目的IP地址为ICMP差错报文中携带的IP头部的目的IP地址)的网关设置为该地址

即ICMP重定向报文会通知该主机修改自身的路由表(将去往目的IP地址的下一跳修改为ICMP重定向报文携带的最佳下一跳的IP地址)

报文格式

从数据包中可以看出来

  1. 当192.168.10.129这台设备去访问192.168.10.1时,将此数据包发给了192.168.10.254
  2. 此时192.168.10.254发现自身去往192.168.10.1的下一跳接口为自己接收此报文的入接口,并且也发现源IP10.129与目的IP10.1为同一网段
  3. 此时10.254这台设备就认为10.129可以直接去往10.1
  4. 于是10.254就向10.129发送ICMP重定向报文(Gateway字段设置为10.1),让10.129访问10.1可以直接将报文交给10.1,不需要再交给自己

ICMP TTL超时差错报文

当IP数据包在传输过程,在还没有到达目的IP地址的时候IP层的TTL变为0(路由器收到时为1的报文就会认为TTL超时),此时该路由器就会发送ICMP差错超时报文(Tracert就是通过差错报文来跟踪路径的)

报文格式

从数据包中可以看出来

  1. 当172.22.105.211这台设备去访问1.1.1.1,封装数据包
  2. 当172.22.105.254收到该数据包是发现该报文的TTL为1,但是本设备又不是报文的目的地址
  3. 于是105.254就向105.211发送ICMP TTL超时报文,让其增加TTL值

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

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

相关文章

C语言再学习 -- 单精度(float)和双精度(double)浮点数 与 十六进制(HEX) 之间转换(转载))

之前讲过浮点数部分,参看:C语言再学习 – 浮点数 现在程序中要将浮点数,通过TCP发送。那得先将其转换为十六进制才行呀。 那么问题就来了。 参看:C语言:单精度(float)和双精度(double)浮点数 与 十六进制(HEX) 之间…

(JAVA)-打印流

打印流是高级流,只能写不能读,只有输出流 只操作文件目的地,不操作数据源 能实现数据的原样输出 printStream:字节打印流 构造方法: 用文件或地址的方式创建字节打印流也会创建一个字节基本流。 字节流底层没有缓存区&#xff…

文档或书籍扫描为 PDF:ScanPapyrus Crack

ScanPapyrus 可让您快速轻松地将文档或书籍扫描为 PDF,批处理模式使扫描过程快速高效,自动处理书籍并将其拆分为单独的页面 用于快速扫描文档、书籍或打印照片的扫描仪软件 快速扫描文档 使用此扫描仪软件,您无需在扫描仪和计算机之间来回移动…

SpringBoot 官方脚手架不再支持Java8和Java11

Spring 官方脚手架不再支持初始化 Java8 和 Java 11 项目,目前仅支持初始化Java17 和 Java21 项目。 阿里巴巴Spring脚手架支持初始化Java8、Java11、Java17、Java19 的项目,不支持初始化Java21的项目。

java简述springboot内置数据库 并举例启动h2内存数据环境

在前面 我们讲了 springboot 给我们提供了 默认的 数据源 默认 HikariCP 以及其他两种内置数据源 持久化技术 JdbcTemplate 那么 说起来很多人难以置信 不过 springboot 也真的给我们内置了数据库技术 而且不止一种 是三种 这三个数据库的特点在于 它们都是用java语言写的 就表…

探索中文文本处理利器 - Python jieba库详解

更多资料获取 📚 个人网站:ipengtao.com jieba库介绍 在处理中文文本数据时,分词是一项至关重要的任务。而在Python的工具箱中,jieba库作为一款强大的中文分词工具,为开发者提供了高效而灵活的解决方案。jieba&#…

JDK8新特性:Lambda表达式规则及用法,方法引用

目录 Lambda表达式是JDK8新增的一种语法格式 1.作用 2.用法规则: 3.方法引用 Lambda表达式是JDK8新增的一种语法格式 1.作用 简化匿名内部类的代码写法 Lambad用法前提:只能简化函数式接口(一般加有Funcationallnterface)&a…

Python dateutil 库:简化日期和时间处理的利器

更多资料获取 📚 个人网站:ipengtao.com 在Python中,处理日期和时间是常见的任务之一。dateutil库是Python标准库中datetime模块的扩展,提供了许多方便的工具和函数,简化了日期和时间的操作。 安装与基本用法 首先&…

小黑子之——MybatiPlus整合

MybatiPlus学习 一、MybatiPlus简介1.1 入门案例1.2 mybatisPlus概述1.3 总结 二、标准数据层开发2.1 标准的CRUD使用2.2 新增2.3 删除2.4 修改2.5 根据Id查询2.6 查询全部2.7 Lombok2.8 分页功能 三、DQL控制3.1 条件查询方式3.1.1 构建条件查询3.1.2 多条件查询3.1.3 null值判…

运维05:自动化

人工运维时代 运维人员早期需要维护众多的机器,因此需要执行很多重复的劳动,很多机器需要同时部署相同的服务或者是执行相同的命令,还得反复地登录不同的机器,执行重复的动作 自动化运维时代 早期运维人员会结合ssh免密登录&…

载入了名字空间‘htmltools’ 0.5.6,但需要的是>= 0.5.7解决方案

解决方案:删除之前的旧版本安装包,安装新的包 1.卸载之前的安装包 2.关闭R,重新打开 3. # install.packages("htmltools") library(htmltools)

HarmonyOS学习--了解基本工程目录

1.工程级目录 工程的目录结构如下: 其中详细如下: AppScope中存放应用全局所需要的资源文件。entry是应用的主模块,存放HarmonyOS应用的代码、资源等。oh_modules是工程的依赖包,存放工程依赖的源文件。build-profile.json5是工…

Linux_CentOS_7.9 VNC安装卸载以及相关配置开机自启动服务简易记录

VNC安装卸载以及相关配置开机自启动服务: 查看环境:(yum镜像源配置可以参考我之前文章里面有详细参考http://t.csdnimg.cn/mzGoI) [rootorcl238 ~]# rpm -qa | grep vnc ##查看系统现有VNC软件版本 gtk-vnc2-0.7.0-3.el7.x86…

简易加减运算器的制作----数字电路设计(含proteus仿真)

简易加减运算器的制作 一、功能要求—基本功能 1、自制0-9按键,在一个LED数码管上稳定地显示当前按下的值。(基本功能) 2、增加、两个按键,实现0-9两个一位数的加法运算,同时在两位LED上稳定地显示运算结果。&#…

MTU与MSS

MTU:一个网络包的最大长度,以太网中一般为1500各字节。 MSS:除去头部之后,一个网络包所能容纳的TCP数据的最大长度。 应用程序调用write后,将要发送的数据被交给TCP/IP协议栈进行。 协议栈不关心应用的数据内容&…

四:爬虫-Cookie与Session实战

四:Cookie与Session实战 ​ 在浏览网站的过程中,我们经常会遇到需要登录的情况,有些页面只有登录之后才可以访问。在登录之后可以连续访问很多次网站,但是有时候过一段时间就需要重新登录。还有一些网站,在打开浏览器…

c语言归并排序(详解)

归并排序是一种分治算法,它将列表分割成较小的子列表,然后递归地对子列表进行排序,最后将这些子列表合并以产生已排序的列表。基本概念包括: 分割:将列表分割成较小的子列表,直到子列表的长度为1或0。排序…

Leetcode—219.存在重复元素II【简单】

2023每日刷题&#xff08;五十三&#xff09; Leetcode—219.存在重复元素II 实现代码 class Solution { public:bool containsNearbyDuplicate(vector<int>& nums, int k) {unordered_map<int, int> m;int n nums.size();for(int i 0; i < n; i) {if(m…

漏洞复现-大华dss struts2-045表达式注入漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

【webpack】初始化

webpack 旧项目的问题下一代构建工具 Vite 主角 &#xff1a;webpack安装webpack1&#xff0c;mode的选项2&#xff0c;使用source map 精准定位错误行数3&#xff0c;使用watch mode(观察模式)&#xff0c;自动运行4&#xff0c;使用webpack-dev-server工具&#xff0c;自动刷…