9-ICMP报文种类「建议收藏」

9-ICMP报文种类「建议收藏」1.ICMP报文种类  ICMP报文的种类分为两种:一种是差错报告报文,另一种是查询报文。  对于差错报告报文来说,ICMP总是把差错报文报告给发送数据源端(源主机)。比如:主机A给主机发送一个数据,结果这个数据在网络传输过程中出错了,然后ICMP协议的机制就会返回一个差错报告给主机A(相当于把数据在传输过程中出错的信息发回给主机A)。2.差错报告报文差错报告报文常见有以下…

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

1. ICMP报文种类

  ICMP报文的种类分为两种:一种是差错报告报文,另一种是查询报文。

  对于差错报告报文来说,ICMP总是把差错报文报告给发送数据源端(源主机)。比如:主机A给主机发送一个数据,结果这个数据在网络传输过程中出错了,然后ICMP协议的机制就会返回一个差错报告给主机A(相当于把数据在传输过程中出错的信息发回给主机A)。

2. 差错报告报文

差错报告报文常见有以下几类:

  类型3:终点不可达,当数据包不能发送到目标主机或路由时,就会丢弃该数据包向源点发送终点不可达报文。出错的原因有很多,具体参考错误代码。

  类型4:源点抑制,也就是数据在传输过程中,如果源点发送数据很快,而目的地接收数据慢,造成拥塞,这时就会向源点发送源点抑制报文,告知源点应该降低发送数据包的速率。比如主机A给主机B发送数据,可能主机A每次发送数据都比较快,而主机B每次接收数据比较慢,导致主机B可能会造成数据拥塞,这时主机B会发送一个源点抑制的ICMP数据报文告诉主机A:你发送的数据太快,我这边接收的很慢。

  类型11:超时,当路由器收到TTL值为0的数据包时,会丢弃该数据包并向源点发送超时报文,也有可能数据分片在进行重组超过规定时间也会丢弃已收到的报文然后向源点发送超时报文。
这里写图片描述
  类型为11,code值为0,说明该数据包在发送时超时原因是TTL值为0造成的,也就是说该数据包可能造成路由环路了,通俗来说就是数据在传输过程中一直在路 由器之间转圈。而Time to live exceeded in transit这句话的大意就是生存时间超时的意思。

  类型12:参数问题,可能是IP首部有的字段值是错误的或者IP首部被修改,破坏都有可能,因为IP数据报文有一个首部校验和的字段会对IP首部进行校验。

  类型5:改变路由(路由重定向)。主机A在给主机B发送数据时,数据在传输过程中选择的传输路线不是最优的,这时主机B会发送一个改变路由的ICMP数据报文告知主机A下次发送数据时选择另外的路线。

3.查询报告报文

查询报文常见有以下几类:
  类型8或0:类型8表示请求,类型0表示回答。比如:经常使用ping命令来ping一个网络是否连通。

  类型13或14:类型13表示时间戳请求,类型14表示时间戳回答,。记录数据报文的发送时间和接收时间,一般来说发送时间和接收时间是一样的,比如主机A发送的时间是14点,那么主机B接收的时间是16点,说明这两个时间不同步,是有问题的。

  类型17或18:类型17表示地址码请求,类型18表示地址码回答,地址码一般指的是子网掩码,如果主机A不知道自己的子网掩码会发送一个地址码请求,收到请求的主机会发送一个地址码回答,告诉主机A的子网掩码是多少。

c类型10或9:路由器查询通告,一般指的是返回路由的状态信息

4. ICMP数据抓包

  下面,我们通过wireshark来抓一个icmp包,如下图所示:request表示这是一个ICMP请求报文,reply表示这个是一个ICMP回答报文。


这里写图片描述

图1-ICMP请求和响应

  图中ICMP数据报的Type字段时8,表示这是一个请求报文,Type字段为0的表示这是一个回答报文。

5.关于ICMP报文的几点

1.对于携带ICMP差错报文的数据报,不再产生ICMP差错报文。
  如果主机A发送了一个ICMP的数据报文给主机B,数据在传输过程中经过其中一个路由器出现错误,由于该路由器已经接收到一个ICMP数据报文,所以不会再产生一个ICMP差错报文。

2.对于分片的数据报,如果不是第一个分片,则不产生ICMP差错报文
  对于主机A发送了一个分片的数据,如果路由设备或主机接收到的分片数据不是第一个分片数据,不会产生ICMP差错报文。

3.对于具有多播地址的数据报,不产生ICMP差错报文
  如果一个ip地址是一个广播地址的话,不会产生ICMP差错报文。

4.对于具有特殊地址如(127.0.0.0或0.0.0.0)的数据报,不产生ICMP差错报文

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

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

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


相关推荐

  • jlink烧录教程_自制flash烧录器

    jlink烧录教程_自制flash烧录器本文主要向大家介绍了Flash基础入门之J-Link固件烧录以及使用J-Flash向arm硬件板下载固件程序,通过具体的内容向大家展现,希望对大家学习Flash基础入门有所帮助。一、始于安装新版的MDK5.11a后,J-Link不能使用,提示安装新固件云云用新版本的STM32集成开发环境MDK5.11a(之前用的4.13a)链接J-Link下载程序,如果J-Link固件版本过低则点击J-Link设…

    2025年11月13日
    5
  • 用原子操作实现无锁编程[通俗易懂]

    用原子操作实现无锁编程[通俗易懂]假设我们要维护一个全局的线程安全的int类型变量count,下面这两行代码都是很危险的:count++;count+=n;我们知道,高级语言中的一条语句,并不是一个原子操作.比如一个最简单的自增操作就分为三步: 1.从缓存取到寄存器2.在寄存器加13.存入缓存。多个线程访问同一块内存时,需要加锁来保证访问操作是互斥的. 所以,我

    2022年5月27日
    50
  • MySQL性能优化

    MySQL性能优化

    2022年1月26日
    47
  • oracle 分页查询 优化_oracle分页查询封装

    oracle 分页查询 优化_oracle分页查询封装对于数据库中表的数据的 Web 显示,如果没有展示顺序的需要,而且因为满足条件的记录如 此之多,就不得不对数据进行分页处理。常常用户并不是对所有数据都感兴趣的,或者大部分情 况下,他们只看前几页。 通常有以下两种分页技术可供选择。 1234567Select * from (Select rownumrn,t.* from table t)Where rn>&minnum and rn或者Sel

    2025年7月18日
    8
  • Pycharm中全局查找及替换关键字「建议收藏」

    Pycharm中全局查找及替换关键字「建议收藏」在Pycharm的不同文件中查找或替换某个词。

    2022年8月25日
    9
  • 16G kingston U盘 解除写保护[通俗易懂]

    16G kingston U盘 解除写保护[通俗易懂]前些天买的16Gkingstonu盘忽然有了写保护,但是拆开u盘又没有看到有写保护开关。纠结加郁闷。然后一天后又忽然发生了电脑无法识别U盘,连盘符也读不出来了。里面好多资料全无,彻底让我伤心了,

    2025年10月16日
    5

发表回复

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

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