ICMP报文类型

计算机网络(4.12)网络层- ICMP报文的种类 为了更有效地转发IP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP (Internet Control Message Protocol)。 ICMP是互联网的标准协议。ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。但ICMP不是高层协议(看起来好像是高层协议, 因为ICMP报文是装在IP数据报中,作为其中的数据部分),而是IP层的协议。 ... 阅读详情

日常开发中,我们经常会碰到查询网络是否畅通以及域名对应 IP 地址等小需求,这时候用的最多的应该就是 ping 命令了。 那你知道 ping 命令是怎么工作的吗?今天,我们就来一起认识下 ping 命令及其对应的 ICMP 协议。

ICMP 协议

ICMP 全称 Internet Control Message Protocol,指互联网控制报文协议。

网络本身是不可靠的,数据包在传输过程中,可能会发生很多突发事件并导致数据传输失败。而网络层的 IP 协议是一个无连接的协议,它不会处理网络层的故障,因此,我们需要其它的协议,在数据包传输出现故障时,能将故障信息传回来,这样才能对应处理相关问题。

就像在电视剧里看到的古代战争一样,打仗的时候需要通过斥候来传递战局情况,进而更好的控制战局。而 ICMP 报文在网络世界中就充当“斥候”这样的角色。

ICMP 报文是封装在 IP 包里面的。因为传输指令的时候,肯定需要源地址和目标地址。它本身格式非常简单,如下图:

Exploring ICMP Port Number with Example
Exploring ICMP with Examples

ICMP 报文有很多的类型,不同的类型有不同的代码,最常用的类型是主动请求,代码为 8,主动请求的应答,代码为 0。从大的方面看可以分为 查询报文类型和差错报文类型。

查询报文类型

我们经常在电视剧里听到这样的话:来人,前方战事如何?斥候回来没?一有情况,立刻通报。

类似这种主帅发起,主动查看敌情的情况,就对应着 ICMP的查询报文类型。例如,常见的 ping 命令就是查询报文,是一种主动请求,并且获得主动应答的 ICMP 协议。因此,ping 命令发出的包也是符合 ICMP 协议格式的,只不过它在后面增加了自己的格式。

对 ping 的主动请求,进行网络抓包,称为 ICMP ECHO REQUEST。同理,主动请求的回复,称为ICMP ECHO REPLY。比起原生的 ICMP,这里面多了两个字段,一个是标识符,另一个是序号。这不难理解,大帅派出去两队斥候,一队是找谁要的,一队是侦查战况的,要有个标识才能区分。

另一方面,派出去的斥候,都要编个号。如果派出去 10 个,回来 10 个,就说明前方战况不错。如果派出去 10 个,回来 2 个,就说明情况可能不妙。

在选项数据中,ping 还会存放发送请求的时间值,来计算往返时间,说明路程的长短。

Filtering ICMP Packets with Tcpdump
Exploring ICMP Protocol with Examples

差错报文类型

差错报文主要是用来将发送的出错报文相关信息返回到源设备,以供源设备确定如果更好的重发失败的数据包。

还是拿我们的“大帅”举例。

当主帅正在大帐中看地图,思考战事时,外面的小兵突然喊到:大帅,不好啦,张将军遭遇埋伏,全军覆没了。

这种是异常情况发起的,来报告发生了不好的事情,对应 ICMP 的差错报文。

差错报文有以下常用的类型:

3:终点不可达
4:源抑制
5:重定向
11:超时
    第一种情况终点不可达。小兵报告,大帅,送给张将军的粮草没有送到。

那大帅肯定会问,为啥没有送到?这就对应 ICMP 中的以下代码了。

网络不可达代码:0
主机不可达代码:1
协议不可达:2
端口不可达:3
需要进行分片但设置了不分片:4
    具体的场景就像这样:

网络不可达:大帅,找不到地方
主机不可达:大帅,找到地方,没找到张将军
协议不可达:大帅,找到地方,也找到人了,但是口令没对上。
端口不可达:大帅,找到地方,找到了人,也对上了口令,但事情没对上。我去送粮草,人家说在等救兵。
需要进行分片但设置不分片:大帅,走到一半,山路狭窄,想换瞎扯,但是出发前你下令严禁换小车,就没办法送到了。
    第二种是源站抑制。也就是让源站放慢发送速度(小兵:大帅,粮草送的太多了吃不完,你可以慢点送)。

第三种是时间超时。也就是超过网络包的生存时间还是没到目的地(大帅,送粮草的人都把粮食吃完了,还没到地方,已经饿死了)。

第四种是路由重定向。也就是下次发给另一个路由器(大帅,上次送粮草的人本来只要走大王村,一公里就到了,结果非要绕道张家界,多了五公里,下次记得走大王村)。

差错报文的结构相对复杂一些。除了前面还是 IP,ICMP 的前 8 个字节不变,后面则跟上出错的那个 IP 包的 IP 头和 IP 正文的前 8 个字节。

而且这类斥候特别尽责,不但字节返回来报信,还把一部分遗物带回来。

斥候:大帅,张将军已经战死沙场,这是他的印信和佩剑。
大帅:张将军是怎么死的(可以查看 ICMP 的前 8 字节)?没错,这是张将军的剑(IP 数据包的头及正文前 8 字节)。
ping:查询报文类型的使用
    接下来,我们重点来看 ping 命令的发送和接收过程。
    
Understanding Ping Command and ICMP with Examples
What is ICMP type?

ICMP 举例

假定主机 A 的 IP 地址是 192.168.1.1,主机 B 的 IP 地址是 192.168.1.2,它们都在同一个子网。那么,当在主机 A 上运行“ping 192.168.1.2” 后,会发生什么呢?

源主机构建 ICMP 请求数据包。这个数据包内包含多个字段。最重要的有两个,一个是类型字段,对应请求数据包而言,该字段为 8。另一个是顺序号,主要用于区分连续 ping 的时候发出的多个数据包。每发出一个请求数据包,顺序号会自动加 1.为了能够计算往返时间 RTT,它会在报文的数据部分插入发送时间。
IP 层构建 IP 数据包。ICMP 协议将数据包连同目标 IP 一起交给 IP 层,IP 层将以 192.168.1.2 作为目的地址,本机 IP 地址作为源地址,加上其他控制信息,构建一个 IP 数据包。
加入 MAC 头。找到 192.168.1.2 对应的 MAC 地址,附加上一些控制信息,依据以太网的介质访问规则,将它们传送出去。
    主机 B 收到数据帧后,会进行如下步骤:

检查 MAC 地址,丢弃或接收数据帧,提取 IP 数据包。检查数据包目的 MAC 地址,并与本机 MAC 地址对比。如符合,就接收数据帧,否则就丢弃。接收后检查数据帧,将 IP 数据包从帧中提取处理,交给本机的 IP 层。
IP 层检查IP。检查完成后,提取有用的信息交给 ICMP 协议。
构建 ICMP 应答包。应答数据包的类型字段为 0,顺序号为接收到的请求数据包中的顺序号。
将应答数据包发给主机 A。
    在规定的时间内,源主机如果没有接到 ICMP 的应答包,则说明目标主机不可达。

如果接收到了应打包,则说明目标主机可达。此时,源主机会检测时间延迟。就是用当前时刻减该数据包从源主机发出去的时刻。

当然,这只是最简单的,同个局域网的情况。如果跨网段的话,还会涉及网关的转发、路由器的转发等。

可以看出,ping 命令是使用了 ICMP 里面的 ECHO REQUEST 和 ECHO REPLY 类型。

那其它类型呢?是不是只有真正遇到错误的时候,才能收到?答案是否定的。有一个 Traceroute 命令,它会使用 ICMP 的规则,故意制造一些能够产生错误的场景。

Traceroute:差错报文类型的使用

Traceroute 命令有两个比较常用的功能。

第一个功能:

通过设置特殊的 TTL,追踪去往目的地时经过的路由器

Traceroute 的参数执行某个目的 IP 地址,会发送一个 UDP 的数据包。

将 TTL 设置成 1 时,表示这个数据包的 MP 为 1,碰到第一个“拦路虎”(通常是路由器或一个其它类型的关卡)就会阵亡了,然后就会返回一个 ICMP 包,这个包就是 网络差错包,类型是时间超时。

通过差错包,我们就能得到数据包到第一个关卡时花费的时间及其每个关卡的 IP 地址(有的主机不会响应 ICMP,所以会出现请求时全是 * 的情况)。

那怎么知道 UDP 有没有到达目的主机呢?Traceroute 程序会发送一份 UDP 数据包给目的主机,但它会选择一个不可能的值作为 UDP 端口号(大于30000)。当该数据报到达目的主机时,由于找不到对应端口号,所以会返回一个“端口不可达”的错误报文。这样,我们就知道 UDP 是否到达主机了。

第二个功能:

设置数据包不分片,确定路径的 MTU

发送分组,并设置“不分片”标志。发送的第一个分组的长度正好与出口的 MTU 相等。如果中间遇到窄的关卡就会被卡主,返回 ICMP 网络差错包,类型是“需要进行分片但设置了不分片”。就这样,每次收到ICMP“不能分片”差错时就减小分组的长度,从而确定整个路径中的 MTU。

总结
ICMP 相当于网络世界的侦察兵。常用的有两种类型,主动探查的查询报文和异常报告的差错报文。
ping 命令使用查询报文,Traceroute 命令使用差错报文。

Understanding ICMP Packets with Examples
Capture ICMP Packets With Tcpdump

计算机网络——互联网控制报文协议(ICMP) ICMP协议主要用来检测网络通信故障和实现链路追踪,最典型的应用就是PING和tracerooute。 阅读详情

相关推荐

互联网协议 — ICMP 互联网控制消息协议

目录 文章目录目录ICMPICMPv4 协议栈ICMPv4 的消息类型Echo Request & Echo Reply MsgDestination Unreachable MsgParameter Problem MsgRedirect MsgTime Exceeded MsgTimestamp Request & Timestamp Reply MsgICMP 的应用pingtraceroute ICMP IPv4/v6 协议是尽力传输的网络协议,提供的数据传输服务是不可靠的、无连接

烟云的计算 4047

【网络层】网际控制报文协议 ICMP

为了更有效地转发 IP 数据报和提高交付成功的机会,在网际层使用了网际控制报文协议。ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告,它是互联网的标准协议。ICMP报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报发送出去。ICMP报文格式下图所示。

swadian2008的博客 3215

基于three.js的室内全景3D展馆案例分享

3D场景展厅

acheng 3558

ICMP报文格式解析

ICMP报文的格式类型总共分为三大类: 1、差错报文 2、控制报文 3、查询报文 上图是ICMP报文的基本格式,上面提到的三种ICMP报文均有“类型,代码和校验和”三个字段,后面还有4个字节是根据不同的报文类型而有不同的格式,有的是全0,有的则有其他的特殊格式。但是ICMP始终有8个字节的头部长度。其中类型字段代表着不同的报文类型,而代码字段指明了某个类型的报文中细分出的该报文的指定的功能。即一个类型的报文拥有着多种功能。 同时还需要注意的是ICMP差错报文的数据部分存储的是IP头部和IP头.

qq_47529104的博客 1万+

从隐式求解器到显式求解器:COMSOL接触仿真中的求解策略对比与选择

本文深度解析了COMSOL中隐式与显式求解器在接触仿真中的应用与选择策略。针对非线性接触问题的核心挑战,详细对比了两种求解器的数学框架、优化技术及适用场景,并提供了参数调优和调试技巧,帮助工程师高效解决接触仿真中的收敛问题。

weixin_28347369的博客 682

高通量测序数据分析:RNA-seq

深度测序相关数据库与数据格式 SRA toolkit 一、NCBI 和EBI、DDBJ组成INSDC,数据内容相同所以找NCBI就行。 (一)NCBI常用数据库 GenBank:遗传序列数据库,收集了所有公开的DNA序列及其注释 GEO (Gene Expression Omnibus) :收集整理各种表达芯片数据,后来加入了甲基化、lncRNA、miRNA、CNV等其他芯片,还有高通量测序数据...

qq_41134363的博客 3万+

ICMP类型报文分类。

ICMP类型报文总的来说分为2类: (1)差错报告报文 类型值为3时:表示终点不可达 类型值为4时:表示源点抑制 类型值为5时:表示改变路由(Redirect) 类型值为11时:表示超时 类型值为12时:表示参数问题 (2)询问报文 类型值为8或者0时:表示回送(Echo)请求或应答 类型值为13或14时:表示时间戳(Timestamp)请求或应答 下面是几种不应发送ICMP差错报告的几种情况:...

weixin_42615308的博客 1万+

STM32cubemx配置驱动DHT11模块

本篇文章将带大家学习使用DHT11湿温度模块,使用这个模块可以获取当前的温度和湿度数据。DHT11可以用于智能家居,蔬菜大棚等项目当中适用范围广。DHT11 是一种数字式温湿度传感器,由杜邦公司推出。它可以测量环境中的温度和湿度,并将测量结果以数字形式传输给微控制器或其他电子设备,适用于通过数字信号读取环境温湿度的应用场景。DHT11 传感器使用单总线数据交换协议,可以通过一个 I/O 引脚进行控制和数据传输。

m0_49476241的博客 5912

ICMP协议 详解,ICMP协议的功能及实现原理,ICMP协议报文类型。

ICMP协议的功能及实现原理,ICMP协议报文类型,ICMP协议类型有哪些,ICMP协议的作用。

wangyuxiang946的博客 4万+

Python爬虫实战:利用Playwright和反反爬技术高效抓取Bloomberg金融数据

用户行为分析(鼠标移动、点击模式)请求头检测IP频率限制WebSocket通信验证Canvas指纹识别我们的爬虫需要模拟人类行为,使用代理IP池,并合理控制请求频率。

2201_76125261的博客 1020

IoU的进化之路——IoU、GIoU、DIoU、CIoU四种损失函数总结

IoU、GIoU、DIoU、CIoU四种损失函数总结

chase 8131

ICMP报文的类型

ICMP报文的类型 2007-02-02 14:55:19 标签:ICMP 类型 休闲 职场 ICMP经常被认为是IP层的一个组成部分。它传递差错报文以及其他需要注意的信息。ICMP报文通常被IP层或更高层协议( TCP或UDP)使用。一些ICMP报文把差错报文返回给用户进程。     ICMP报文是在IP数据报内部被传输的,如图6 - 1所示。 ICMP 的正式

1091

YOLO26 多模态融合技术:RGB+红外/深度/雷达融合

YOLO(You Only Look Once)是一种流行的目标检测算法,其最大特点是快速且端到端地完成图像中所有目标的检测与分类任务。YOLO首次在2016年由Joseph Redmon等人提出,彻底改变了传统目标检测(如R-CNN系列)的思路,被广泛应用于自动驾驶、视频监控、工业质检等场景。

一键难忘的博客 3523

ICMP报文类型深度解析

摘要: ICMP(互联网控制消息协议)是TCP/IP协议栈中网络层的辅助协议(协议号1),核心功能包括错误报告(如目标不可达、超时)、网络诊断(如ping、traceroute)和控制信息传递。ICMP报文封装于IP数据包中,具有轻量化(固定8字节头部)和双向性(查询与响应)特点。主要分为三类报文: 错误报告类(如Type 3目标不可达、Type 11超时),反馈IP数据包处理异常; 查询请求/响应类(如Echo Request/Reply),支持网络诊断工具; 控制类(如重定向),动态优化路由(IPv4中

qq_39980997的博客 1772

一步一步教你如何安装IP-Guard(客户端WINDOWS篇)

1、安装完服务器后,在服务器右下角有一个IP-GUARD图标:如图 2、点图标右键选注册: 3、注册成功后, 4、在开始菜单里选生成客户端安装包。 5、生成客户端安装包成功,安装名字可以任意,但是最好是英文名字。 6、将客户端安装程序复制到桌面。 7、退出所有杀毒软件、安全卫士、电脑管家等然后运行 8、安装完成后,立即重启计算机。IPguard客户端安装完成。 9、这样在控制里就可以看到已经安装客户端的计算机,在线显示蓝色,灰色表示计算机已经离线货关机 ...

IP-Guard专栏 5627

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

ICMP 报文类型详解

ICMP报文类型详解摘要 ICMP是网络层核心协议,用于传递网络状态和错误报告。主要报文分为两类:错误报告报文(类型0-10)如目的不可达、超时报文等;查询报文(类型8,0,13,14等)如ping使用的回显请求/应答。ICMP采用统一头部格式,包含类型、代码和校验和等字段。高级应用包括路径MTU发现和Traceroute原理。安全相关报文如重定向可能被用于攻击。常见面试问题涉及ping不通原因和ICMP协议必要性。实际抓包分析有助于深入理解报文结构和工作原理。

qq_46082433的博客 762

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

几种常见的ICMP报文类型

通过将一些常见的ICMP报文类型整理给大家,希望在需要的时候能帮助到大家。

我在这里,就等你来 3万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ICMP有哪些消息类型?常见的ICMP报文有哪些?

什么是ICMP? ICMP(Internet 控制消息协议)可以看作是IP协议的一种辅助协议,每当我们新搭建一个网络,首先就需要先测试一下网络是否联通,但是IP协议并没有能力判断是否丢失数据包以及分析丢失的原因。所以就需要ICMP协议来完成以下功能:一是确认IP数据包是否成功到达了目的地址,二是分析并且通知传输层IP数据包丢失的原因。 ICMP是包含在IP数据报之中的,它就像一个小弟一样跟在IP数据报头的后面,当IP数据报首部的协议字段值为1时,就代表这是一个ICMP报文。 ICMP有哪些消...

1万+

ICMP协议及报文类型含义

1.ICMP简述 ICMP是因特网控制报文协议的简称,它与IP协议同属于OSI结构的第三层网络层,用于传送有关通信问题的消息。例如,数据报不能到达目标站,路由器没有足够的缓存空间,或路由器向发送主机提供最短路径信息等。ICMP报文封装在IP数据报中传送,因而不能保证能可靠地提交。ICMP有11种之多。报文中地类型字段表示ICMP报文地类型。 2.ICMP各类报文的含义 (1)目标不可达(类型3)。如果路由器判断出不能把IP数据报送达目标主机,则向源主机返回这种报文;另一种情况是目标主机找不到有关的用户

istrangeboy&begin zero的博客 5119

ICMP协议 详解,ICMP协议的功能及实现原理,ICMP协议报文类型。_icmp工作原理(1)

ICMP协议是IP的一个组成部分,负责传递「控制信息」。

2401_86437117的博客 1295

ICMP协议 详解,ICMP协议的功能及实现原理,ICMP协议报文类型。_icmp工作原理

常见的不可到达类型还有网络不可到达(Code=0)、主机不可到达(Code=1)、协议不可到达(Code=2)。发送方发送一个 Type =8 的报文,途中没有异常,接收方就会返回一个 Type=0 的报文;3)校验和:8位,检验报文是否有误。

2301_77118221的博客 1124

ICMP是无连接的没有端口,但是有报文类型

ICMP简介: ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。 ICMP功能: 从技术角度来说,ICMP就是一个“错误侦测与回报机制”,其目的就是让我们能够检测网路的连线状况﹐也能确保连线的准确性﹐其功能主要有: 侦测远端主机是否存

m0_46267075的博客 850
上一篇: tcpdump 使用方法总结
下一篇: 这些Linux命令你都知道吗?
曹大卫779
博客等级 码龄6年 70粉丝 37原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值