ICMP详解和实例分析

article/2025/9/16 17:40:04

ICMP是网际报文控制协议,它是一个对IP协议的补充协议。允许主机或路由器报告差错情况和异常状况。

一、ICMP报文格式和各个字段的含义

ICMP报文的格式如下:


ICMP协议封装在ip协议中,ICMP有很多报文类型,每一个报文类型又各自不相同,所以无法找到一个统一的报文格式来进行说明,但是他们的前四个字节的报文格式是相同的。

如图所示:

1.校验和:占两个字节,是对整个报文的报文信息的校验。

2.类型:占一个字节:用来表示ICMP的消息类型。

3.代码:占一个字节:用来对类型的进一步说明。

下面是RFC792英文版的文档说明:

点击打开链接

下面试RFC792中文版的文档说明:

点击打开链接

二、ICMP常见的报文类型

下表列出了几种常见的类型:


ICMP的报文分为两类,一类是ICMP询问报文,一类是ICMP差错报告报文

常见的ICMP询问你报文有:8/0回送请求/应答报文,13/14时间戳回送请求/回答报文。

常见的ICMP差错报告报文有:3 目的站点不可达、 11时间超过、12参数问题、5改变路由、4源点抑制

目的站点不可达:当路由器或主机不能交付数据的时候,就会向源点发送终点不可达的报文。

源点抑制:当路由器或主机因为拥塞而导致丢包的时候,就会向源点发送源点抑制报文,请求发送报文速度降低

时间超过:当路由器或主机发现生存时间TTL值为0时,会丢弃该报文,并向源点发送时间超过的信息。或者目的主机没在规定时间内收到所有的数据分片,会丢弃之前的数据分片,并发出报告。

参数问题:当路由器或主机发现数据包首部字段值不正确的时候,会丢弃该报文,并发送参数错误报文。

改变路由:路由器把改变路由报文发给主机。

三、不发送ICMP差错报文的情况

 1、对ICMP差错报文出错不在发送ICMP差错报文信息。

 2、对于第一个ip分片后的所有ip分片报文不发送ICMP差错报文

 3、对具有组播地址的数据报不发送ICMP报文

 4、对具有特殊地址(127.0.0.0或0.0.0.0)不发送ICMP差错报文

四、ICMP协议的用法

icmp协议的常用用法就是ping和tracert

ping的命令参数为ping 目的ip 

一般有选项参数 -n 次数 表示要ping目的ip的次数,windows默认ping10次

-l 大小 向目标主机发送ping 包的大小,单位为字节

tracert  目的ip 可以显示中间经过的路由器

五、ICMP回送请求和应答实例分析

 该组的报文是通过ping来实现的

下面首先来看回送请求/应答报文的格式:


接下来我们来看一下回送请求的具体报文:


下面是回送应答的具体报文:


其中 Code 0 在RFC文档中提到,当这个值为0时表示网管或主机


http://chatgpt.dhexx.cn/article/xiZhA9oq.shtml

相关文章

ICMP

网际控制报文协议 ICMP : 为了提高 IP 数据报交付成功的机会,在网际层使用了网际控制报文协议 ICMP (InternetControl Message Protocol)。 ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP 不是高层协议,而是 IP 层的协议。ICMP 报文作为 IP 层…

ping的整个流程详解(icmp)

原文:ping好几年 ?今天终于把 ping 的原理搞懂了,打算图解教你!_小林coding-CSDN博客 原文的大佬一整个系列都写的非常优秀,转载只为了个人记录 文章目录 前言正文IP协议的助手 —— ICMP 协议查询报文类型差错报文类…

icmp 报文详解

以下内容转载自: http://blog.csdn.net/tigerjibo/article/details/7356936 写的很好的 icmp 报文详解: 一.概述: 1. ICMP允许主机或路由报告差错情况和提供有关异常情况。ICMP是因特网的标准协议,但ICMP不是高层协议&#xff…

icmp超详细讲解

最近被CISSP题目中各种攻击搞得晕晕的,找到一个详细的介绍ICMP的,写的真的很好。。。 目录 1.ICMP出现的原因 2.ICMP的用途 3.ICMP作为IP的上层协议在工作 4.ICMP实现之MTU探索 5.ICMP实现之改变路由 6.ICMP实现之源点抑制 7.ICMP实现之ping命令 …

常见的使用ICMP协议的命令

本文将介绍几种使用ICMP协议的命令,这些命令在网络测试和排错都有重要的作用。 1、ping命令 ping命令是检查网络是否畅通的常用命令,使用 ping 主机ip 后返回的数据包如图: 我们输入ping www.baidu.com,电脑会自动向DNS服务器查…

ICMP的使用

大家好呀,我是请假君,今天又来和大家一起学习数通了,今天要分享的知识是ICMP。 RFC792定义的ICMP ( Internet Control Message Protocol,互联网控制消息协议)是一个网络层协议,基于IP运行。ICMP定义了错误报告和其它回…

ICMP详解

ICMP简介 ICMP的全称是Internet Control Message Protocol。也就是网络控制报文协议。 ICMP是一个网络层协议。用来检测IP报文是否能够正常发送,以及出错原因,以及查询主机的信息。 也就是差错查询和信息查询。 我们经常使用的ping工具就是利用ICMP实…

JMeter官网文档

JMeter官网文档API 步骤: 解压下载的安装包进入\apache-jmeter-5.4.1\docs\api目录打开index.html网页显示内容如下:

如何使用Jmeter,看完这本指南你就知道了

序言 由于公司在来年需要进行压力测试,所以也就借节假日的机会来学习一下压力测试的步骤,由于本人的学习时间比较短,希望各位大神朋友们能够多多的谅解并指正在下的错误,在此仅表敬意 适应人群 1、初入门的压力测试工程师 2、…

01-下载安装jmeter

1、前期准备: 下载配置好jdk:下载地址,点击下载 配置教程参考: 2、jmeter下载地址: 1、下载jmeter地址,点击进入官网下载 2、进入官网,会看到两种下载资源 binaries是可执行版本,直接下载解…

【jmeter】

目录 环境配置安装Java环境安装jmeter安装python环境数据库配置 线程组HTTPHTTP请求默认值HTTP信息头管理器 参数化用户定义的变量csv数据文件设置用户参数函数计数器函数随机数函数时间函数 直连数据库断言响应断言大小断言:判断字符串内容的长度。断言持续时间 逻…

1-1 JMeter官网了解

作为测试小白的我,在微信知识星球,参加了一个为期1年的21天打卡的,关于测试方方面面知识的星球。 听同事说JMeter似乎很强大,接口测试、自动化测试、性能测试都可以搞? 所以选择从JMeter开始,因为自己最近也…

JMeter下载及安装配置教程

参考:入门部署教程 – Jmeter中文网 本文是在win10环境下安装使用jmeter,jmeter可以运行在多平台上Windows和Linux。 环境准备: java 8 jmeter 5.1.1 jmeter环境 jmeter环境依赖JAVA环境,需安装JDK1.8环境,JDK下载地…

Jmeter下载与安装

Jmeter与JDK下载与安装 1、进入jmeter官网,下载地址:https://jmeter.apache.org/ 第一步,点击Download Releases 第二步, 点击apache-jmeter-5.1.1.zip sha512 pgp,下载完后解压 2、下载并安装JDK,下载地址:https://www.oracle.com/technetwork/java/javase/downloads…

jmeter(一)基础介绍

参考书籍:段念《软件性能测试与案例剖析》——第二版 推荐一本书《零成本实现web性能测试——基于Apache—jmeter》,主要内容是一些关于jmeter的实战使用,想学习的可以去看看。。。 jmeter是一款优秀的开源性能测试工具,目前最新版…

Kotlin带有接收者的函数类型(block: T.() -> Unit)

前言 Kotlin标准库的 Standard.kt 包含几个函数,其唯一目的是在对象上下文内执行代码块。 当我们在提供了lambda表达式的对象上调用此类函数时,它将形成一个临时作用域。在此作用域中,我们可以访问没有其名称的对象,这些功能称为…

mysql之类型转换函数

类型转换函数 类型转换函数和case函数 1.隐式类型转换和显式类型转换的概念 隐式类型装换: 两个值进行运算或者比较,首先要求数据类型必须一致。如果发现两个数据类型不一致时就会发生隐式类型转换。例如,把字符串转成数字,或者相反: SELECT 1+‘1’; – 字符串1转成数字 …

C语言入门---函数类型与返回值(int和void)

int和void的区别? 哈喽,各位小伙伴们,在我们学习C语言的过程中经常会看到书中的main函数前带有int和void,就像下面这样: 上面这两种有什么区别呢?在C语言中,可以把函数分为有返回值函数和无返…

Typescript总结(三)——函数类型详解

本篇博客主要总结一下在Typescript中的函数写法,以及函数类型的总结。 一、Typescript的函数类型 如果在一个函数中,需要传入一个函数作为参数,可以如下所示,进行声明定义。 我们也可以通过type来定义函数类型 如上述代码所示…

c语言函数返回值类型必须,C++中函数类型与定义的函数返回值类型必须相同么?...

C++中函数类型与定义的函数返回值类型必须相同么?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! C++中函数类型与定义的函数返回值类型必须相同么? 1.可以。只要返回值、参数列表的参数个数、类型、顺序中的一…