ICMP报文格式解析
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都已经挺牛逼了,这个我感觉也没什么用。
ICMP报文格式解析相关推荐
- TCP 的那些事 | TCP报文格式解析
TCP(Transmission Control Protocol 传输控制协议)提供一种面向连接的.可靠的字节流服务.面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之 ...
- icmp报文格式_IPV6报文格式和IPV4有什么区别?
前言 RFC2460定义了IPv6数据报格式. 总体结构上,IPv6数据报格式与IPv4数据报格式是一样的,也是由IP报头和数据(在IPv6中称为有效载荷)这两个部分组成的. 但在IPv6数据报数据部 ...
- icmp报文格式_TCP/IP(二):IP报文格式详解
1. IP 报文格式 0bit是指位于最左边的最高位,31bit是指位于最右边的最低位,4个字节的32bit按照 bigendian(大端格式:低字节位于高地址)字节序传输:首先是0~7bit,其次 ...
- ICMP报文格式详解
1 引言 2 ICMP报文的类型 3 ICMP地址掩请求与应答 4 ICMP时间戳请求与应答 5 ICMP端口不可达差错 1 引言 ICMP经常被认为是IP层的一个组成部分.它传递差错以及其他需要注意 ...
- BLE数据报文格式解析
1.数据链路层报文结构 报文的基础是数据链路层的报文,其它报文都是从此展开的,BLE数据链路层数据格式如下: 后期补充:在最新的core spec 5.2中,有1M PHY和2M的PHY,对应前导符变 ...
- 4.1.2.HTTP报文格式解析
不同的请求方式,他们的请求格式可能是不一样的,请求格式就是我们所说的的报文格式.但是,通常来说一个HTTP请求报文由请求行(request line).请求头(header).空行和请求数据4个部分组 ...
- 网络:传输层 TCP报文格式解析
一.TCP报文格式 1.为了提供可靠的数据传输,TCP报文首部字段有较多的字段,TCP报文格式如下图: 图2 TCP报文格式 16位源和目标端口(16位):用于多路复用/多路分解来自或送至上层应用的数 ...
- TCP之报文格式解析
TCP网络协议是较常用的,也基本上都会接触,那么来简单了解下它吧.TCP 是一种面向连接的.可靠的传输协议,它能够将数据分成一些小块,并通过 Internet 进行传输.在 TCP 中,数据被分割成一 ...
- 解析并符号 读取dll_风电场用风功率采集测风塔数据报文格式解析浅谈
前段时间因为有点事情,好久没有更新了,非常对不住,感谢大家还在关注,下面是正文:看过我前面文章的朋友应该都知道,测风塔上送数据主要包括以下几个环境气象变量:风机轮毂处的风速.风向数据.以及其他不同高处 ...
最新文章
- ubuntu 上code blocks 建glut工程时问题
- SQL Server中各个系统表的作用
- Zookeeper实战之单机模式
- [转]大数据环境搭建步骤详解(Hadoop,Hive,Zookeeper,Kafka,Flume,Hbase,Spark等安装与配置)
- css媒体查询改变上边距,CSS媒体查询宽度或高度
- python 客户端_Python客户端
- office2016 Excel每次打开都需要配置的问题解决
- java执行bat代码
- oracle新建定时任务,Oracle 定时任务详解
- win10服务器只显示4g内存,要注意了,4G内存在win10系统中根本不够用
- pycharm: Error: Cannot run program……
- c语言程序设计小球弹跳,C++Dos游戏设计——弹跳小球
- 新浪微博产品的细微体验,你发现了么?
- 倒计时 妙味课堂_妙味课堂——JavaScript基础课程笔记
- 医学数据窗宽窗位调节
- 超分辨率技术AI人工智能老照片修复自动人像脑补照片高清重建人脸模糊图片变清晰软件
- 疯狂的上网本意义何在?
- python替换word内容,文档翻译-使用python替换word文档中的段落内容
- java method field_java_解析Java中的Field类和Method类,Field类
Field类中定义了一些方 - phpStudy...
- 提示格式化怎么修复??