ICMP报文格式解析

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

大家好,又见面了,我是你们的朋友全栈君。

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

1、差错报文

2、控制报文

3、查询报文

ICMP报文格式解析

上图是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都已经挺牛逼了,这个我感觉也没什么用。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/136892.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 正则表达式替换部分内容

    正则表达式替换部分内容总结一个正则表达式替换匹配项部分内容的语法(.)小括号中的内容是可以用$num进行引用比如123ready,用[0-9]{3}(.)匹配,然后$1可以引用(.*)中的内容,此处(.)代表其他符号如图可以匹配3个数字接其他字符的模式替换结果后续需要将正则语法做一个简要汇总方便温习(…

    2022年5月16日
  • Django(19)QuerySet API[通俗易懂]

    Django(19)QuerySet API[通俗易懂]前言我们通常做查询操作的时候,都是通过模型名字.objects的方式进行操作。其实模型名字.objects是一个django.db.models.manager.Manager对象,而Manager

    2022年7月31日
  • Java安全之反序列化回显与内存马

    Java安全之反序列化回显与内存马0x00前言按照我个人的理解来说其实只要能拿到Request和Response对象即可进行回显的构造,当然这也是众多方式的一种。也是目前用的较多的方式。比如

    2021年12月13日
  • 彻底解决鼠标单击变双击问题的方法(图例)「建议收藏」

    彻底解决鼠标单击变双击问题的方法(图例)「建议收藏」两个月前,己“服役”了几年的鼠标出现了故障,单击经常变成双击,这样想用鼠标移动文件的时候就很麻烦,常常要移动几次才能成功。起初我怀疑是系统的问题,但鼠标在别的电脑上使用也出现同样的问题,因此确认鼠标本

    2022年8月1日
  • SSTI完全学习[通俗易懂]

    一、什么是SSTISSTI就是服务器端模板注入(Server-SideTemplateInjection),也给出了一个注入的概念。常见的注入有:SQL注入,XSS注入,XPATH注入,XML注入,代码注入,命令注入等等。sql注入已经出世很多年了,对于sql注入的概念和原理很多人应该是相当清楚了,SSTI也是注入类的漏洞,其成因其实是可以类比于sql注入的。sql注入是从用户获…

    2022年4月5日
  • 阿里java高级工程师面试100题「建议收藏」

    阿里java高级工程师面试100题「建议收藏」大型网站架构技术QQ群:3686148491,java堆,分新生代老年代,新生代有Eden,fromsurviver,tosurviver三个空间,堆被所有线程共。eden内存不足时,发生一次minorGC,会把fromsurvivor和eden的对象复制到tosurvivor,这次的to survivor就变成了下次的fromsurvivor,经过多次minorGC,默认15次…

    2022年6月9日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号