ICMP报文格式解析

article/2025/10/13 22:08:42


ICMP报文的格式类型总共分为三大类:

1、差错报文

2、控制报文

3、查询报文

上图是ICMP报文的基本格式,上面提到的三种ICMP报文均有“类型,代码和校验和”三个字段,后面还有4个字节是根据不同的报文类型而有不同的格式,有的是全0,有的则有其他的特殊格式。但是ICMP始终有8个字节的头部长度。其中类型字段代表着不同的报文类型,而代码字段指明了某个类型的报文中细分出的该报文的指定的功能。即一个类型的报文拥有着多种功能。

同时还需要注意的是ICMP差错报文的数据部分存储的是IP头部和IP头部后面的8个字节,这就使得IP的相关信息以及上层协议的端口信息可以被ICMP记录,在进行协议,端口方面的错误信息反馈时可以更好的反应问题。

 

一、差错报文分为:

1、目的不可达:

目的不可达的类型字段值为3,代码字段有为0-15,也就是说若将目的不可达的ICMP报文再做一个细分,会将目的不可达的原因分为16种,并用不同ICMP差错报文进行表示。

代码为0:

代表着网络不可达,出现这个ICMP差错报文,就代表着报文在路由过程的时候出现了问题,比如报文的目的网络在路由器上没有相应的条目,于是该路由器就回送网络不可达的报文。

代码为1:

代表主机不可达,这个报文的来源一般是目的主机所处的网关发送的,因为目的主机所处的网关没有找到对应的目的主机的IP地址,而无法转交该数据报文,所以将数据报文丢弃并回送该ICMP差错报文。

代码为2:

代表着协议不可达,这就说明数据交互的双方在协议上的出现了问题。

代码为3

代表着端口不可达,这就说明数据包上指定的目的端口在目的主机上可能没有监听

代码为4

代表一个原本需要分片的数据包,但是IP头部上的表示是不进行分片,由此就出现了错误。比如我们可以设置自己的网卡的MTU大小比网关的MTU大,那么我们发送过去的数据在被网关接收后可能会出现错误,因为网关网卡的最大接收MTU数比发送过来的数据包小,而且这个数据包还标识不进行分片,这就会出现错误。

代码为5

源站选路失败

代码为6

目的网络不认识

代码为7

目的主机不认识

一般来说我在日常生活中比较常见的就时0到4代码的ICMP报文。后面的代码5到15的ICMP差错报文几乎没见过。

2、时间超时

时间超时的类型字段的值为11。

代码为0

代表TTL超时

代码为1

代表分片重组超时

3、参数问题

参数问题的类型字段值为12,它主要是因为对IP头部中的字段值出现了问题,从而导致收到这些问题报文的主机返送一个参数问题的ICMP差错报文。

二、ICMP控制报文

1、源站抑制

源站控制的类型字段值是4。只有一个代码0

源站抑制是拥塞控制的一种方式,虽然TCP在端到端上使用了窗口机制和慢开始,拥塞避免和快重传对流量进行了控制,网关通过对链路上的链路情况进行监控,对信源发送源站抑制里面包含着目的网络的信息,当接收方接收该信息后根据目的网络信息知道去往该网络的链路发生拥塞,于是减少信息的发送。

2、路由重定向

路由重定向的类型字段为5,有0-3,4个代码

路由重定向是指当主机发送给某个路由器的时候,这个路由器会判断自己是否是最佳的转发设备,如果根据它的路由信息发现其他的转发设备对于该主机来说最好,也就是能够更快的将数转发到目的对象,那么它就将发送路由重定向给这个主机让它将路由修改为更佳的路由。更佳路由的信息存储在ICMP的后4个字节上,我们老师说重定向一般都木有了,所以图一乐看看就完事了。

三、ICMP查询报文

1、请求和回应报文

这个就是最常见的ping命令发送的报文,请求的ICMP类型字段为8,回应的类型字段为0,代码都只有0.

需要注意的是请求和回应的ICMP报文使用到了ICMP头部的后4个字节,分为两个字段,即标识和序列号,标识一般是发送该报文的进程号,我个人认为标识和序列号是标识一对请求和回应报文,只有与某请求报文对应的回应报文,它们的标识与序列号才是相同的。

需要注意的是,请求和回应的ICMP数据包中的数据部分都是相同的。

2、路由询问或通告

路由询问的类型字段值为10,通告的类型字段值为9,只有一个代码0

该类型报文主要用于无盘工作站,没有办法保存网关的情况,它就只能靠发送路由询问,来询问网关信息。路由询问报文只用了ICMP头部的前面4个字节,但是路由通告使用了全部的8个字节。、后4个字节有三个字段,分别为“地址数,地址项长度,生存时间”,它们占用的长度是1B,1B,2B这三个字段记载着数据部分包含的路由条目数量,路由条目的长度(即IP地址的长度),以及路由条目在路由器上面的有效生存时间。

在该ICMP报文中,每个路由信息分为路由地址和优先级,各自占用4个字节,优先级越高越有可能成为该主机的默认网关。

3、时间戳请求与应答

时间戳的请求的类型字段为13,应答为14,只有一个代码0

它的头部与请求与回应的ICMP报文一致,但是数据部分它使用了12个字节,每4个字节记录一段时间信息,总共有三段,分别是“发送时间戳 ,接收时间戳,回送时间戳”,发送时间戳的信息由时间戳请求者记录,后面两个字段由回送者记录。字段里面记录的是有关当前时间的毫秒数的表示,发送者只要根据回送者发送的时间信息就可以很容易的求出往返时长。

4、地址掩码请求和应答

请求的类型字段值为17,应答的类型字段为18,只有一个代码0

它的ICMP头部与请求的ICMP包的头部相同,数据字段存储的是请求的子网掩码,我觉得这个可能是和RARP配合用的吧,RARP仅仅提供IP地址,这个提供子网掩码,但是现在DHCP都已经挺牛逼了,这个我感觉也没什么用。


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

相关文章

常见网络报文数据包格式

当我们应用程序用TCP传输数据的时候,数据被送入协议栈中,然后逐个通过每一层,知道最后到物理层数据转换成比特流,送入网络。而再这个过程中,每一层都会对要发送的数据加一些首部信息。整个过程如下图。 以太网帧格式 以…

网络中的常见的各种协议--报文格式总结学习

网络中的各种协议总结学习 以太网帧结构IP报文格式ARP协议ICMP协议UDP用户数据包协议DNS TCP协议FTP协议HTTP协议SMTP协议POP协议SSH协议 以太网帧结构 注: 当LLC-PDU中携带的是数据的时候,那么左侧的2字节表示的就是长度;当然,以…

网络基础知识之报文格式介绍

1.以太网数据帧头部 DMAC:目的MAC地址,长度6个字节。 SMAC:源MAC地址,长度6个字节。 TYPE:类型字段,表明上层是哪种协议,IP协议是0x800,ARP协议是0x0806。 DATA:数据字…

计算机网络11种协议报文格式

文章目录 TCPUDPIPIPV6IPSec以太网帧结构802.1Q以太网帧结构802.11无线链路帧SSL记录RTP实时传输协议OpenFlow流表参考 TCP 源端口号和目的端口号: 用16bit表示所以端口号范围为0~65535,用来标识源主机和目的主机上的进程,用于运输层的多路复用和多路分解…

EndNote X8使用总结

本文记录在使用EndNote X8(Word2013)过程中遇到的一些问题,持续更新。 1.插入参考文献序号与文本的缩进问题 问题描述:在Word中使用EndNote插入参考文献后,在文末的参考文献出现文献序号与文本内容相距较大的情况&am…

EndNote20 安装方法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Endnote是什么?二、安装步骤 1.安装库2.中文版总结 前言 管理文献工具是科研入门的一个必要学习方面。随着写作论文的增多,以及学习…

安装 EndNote X 9.3.3

下载 链接:https://pan.baidu.com/s/1d4njrGQUZQxE-VeSA_M1Zw 提取码:0226 安装 双击 .exe文件 不想安装在C盘的可以点击 Browse 自己设置一个路径,点击 OK 出现下图这一幕是因为我 office 打开着,只要把 wor…

Endnote操作

记录一下一些要点,以便之后毕设用到 1. 用endnote插入文献后,mathtype的公式显示域代码。word-文件-选项-高级 2.word中想修改endnote格式出现can not be formatted because it is no longer open. Please chose another document. word-endnote20-Too…

EndNote安装与使用

一、安装 1、双击ENX9Inst.msi安装 2、进入安装目录,使用CHS或ENG里的文件替换安装目录文件 CHS 中文版 ENG 英文版 二、软件优化 1、EndNote Import.enf 此文件用于导入中文文献时期刊名解析错误的问题,右击使用EndNoteX9打开后关闭即可 2、geebin…

EndNote X9导入文献的5种方式

上一篇介绍了EndNote X9下载与简介。 这里再介绍一下EndNote X9导入文献的5种方式,分别如下: 1. 从数据库网站导入参考文献 2. 在网页浏览中导入参考文献 3. 轻松导入本地参考文献 4. 在线检索导入参考文献 5. 手工添加参考文献信息 1. 从数据库网站导…

学习记录:关于如何安装EndnoteX9以及汉化过程

1、下载 Endnote X9安装包,并解压。 百度网盘地址: 链接:https://pan.baidu.com/s/1s1o81RVPsYIekr9as2M-kg 提取码:iw6h 2、 点击ENX9Inst.msi开始安装。 3、安装过程 Next accept Next accept、Next Typical、Next 可默认地址…

EndnoteX9下载并安装

Endnotex9 安装包链接链接:链接:https://pan.baidu.com/s/1lZYXIkZ-LjeHAH32DT4DmQ 提取码:yz2d 破解码:1、79SHT-UQFTD-FE94J-FRRBW-UDHXL 2、3VLXS-VVXSR-RMSJ7-AKURY-GPQFG 3、LTF3T-KJ778-RPRSC-8G4FN-5LWJN 4、3SF6V-TYK7C-…

Mac版本EndNote基本用法

NoteExpress在Mac上并未覆盖,转而探索了下Mac版EndNote基本用法: 以北京科技大学为例: 一、下载安装: 1.在校外访问学校VPN:http://n.ustb.edu.cn/。登录个人账号后,点击“电子资源数据导航”进入到学校图…

EndNote X9使用方法

要先下载,word里不自带 一、如何添加引用 1、打开EndNote x9。点击文件->新建,在弹出的对话框中选择一个地址,修改文件名,新建文献库。 新建之后的效果如图所示: 2、在谷歌学术、百度学术或知网上搜索自己需要的…

「Juc并发编程」什么是可重入锁?

「Juc并发编程」什么是可重入锁? 文章目录 「Juc并发编程」什么是可重入锁?一、概述二、解释三、可重入锁种类隐式锁同步块同步方法 显式锁 四、Synchronized的重入的实现机理 一、概述 可重入锁又名递归锁,是指在同一个线程在外层方法获取锁…

可重入锁和不可重入锁 ReentrantLock synchronize

http://blog.csdn.net/qq838642798/article/details/65441415 https://www.cnblogs.com/dj3839/p/6580765.html 用lock来保证原子性(this.count这段代码称为临界区) 什么是原子性,就是不可分,从头执行到尾,不能被其他…

到底什么是重入锁,拜托,一次搞清楚!

相信大家在工作或者面试过程中经常听到重入锁这个概念,或者与关键字 synchrozied 的对比,栈长面试了这么多人,80%的面试者都没有答对或没有答到点上,或者把双重效验锁搞混了,哭笑不得。。 那么你对重入锁了解有多少呢&…

重入锁-ReentrantLock

ReentrantLock 一.重入锁的特点1)实现重进入功能2)分为公平锁和非公平锁: 二.ReentrantLock和AQS的关系 一.重入锁的特点 1)实现重进入功能 重进入是指任意线程获取锁之后能够再次获取该锁而不会被锁阻塞 锁的获取和释放过程如下: 线程再次获取锁。锁…

详述重入锁-ReentrantLock

什么是重入锁? 锁主要用来控制多线程访问的行为,对于同一个线程,如果连续两次对同一把锁进行lock,那么这个线程会被卡死在那里,这样的特性很不好,在实际的开发中,方法之间的调用方式错综复杂&a…

进行LDPC编码时扔掉了前面2Zc的信息位,为何如此设计?在解码时如何恢复?

好久没发文章了,拿去年的周报水一篇吧。 其实我也不是研究LDPC的,就是之前被导师提过这个问题,就看了一阵子。下面进入正文—— LDPC基础概念 对于这个问题,还是需要对LDPC码有初步的了解,下面先由一个普通的规则LDPC…