ICMP 是个啥破玩意?(一)

简介: ICMP 的全称是 Internet Control Message Protocol(互联网控制协议),它是一种互联网套件,它用于IP 协议中发送控制消息。也就是说,ICMP 是依靠 IP 协议来完成信息发送的,它是 IP 的主要部分,但是从体系结构上来讲,它位于 IP 之上,因为 ICMP 报文是承载在 IP 分组中的,就和 TCP 与 UDP 报文段作为 IP 有效载荷被承载那样。

微信图片_20220416153524.png

我们之前的文章中了解过 TCP/IP 协议,我那时候码了一句

微信图片_20220416153529.png

原文链接见如下:

TCP/IP 基础知识总结

下面我们就来真正认识一下 ICMP 协议

什么是 ICMP

ICMP 的全称是 Internet Control Message Protocol(互联网控制协议),它是一种互联网套件,它用于IP 协议中发送控制消息。也就是说,ICMP 是依靠 IP 协议来完成信息发送的,它是 IP 的主要部分,但是从体系结构上来讲,它位于 IP 之上,因为 ICMP 报文是承载在 IP 分组中的,就和 TCP 与 UDP 报文段作为 IP 有效载荷被承载那样。这也就是说,当主机收到一个指明上层协议为 ICMP 的 IP 数据报时,它会分解出该数据报的内容给 ICMP,就像分解数据报的内容给 TCP 和 UDP 一样。

ICMP 协议和 TCP、UDP 等协议不同,它不用于传输数据,只是用来发送消息。因为 IP 协议现在有两类版本:IPv4 和 IPv6 ,所以 ICMP 也有两个版本:ICMPv4 和 ICMPv6

ICMP 的主要功能

对于 ICMP 的功能,主要分为两个

  • ICMP 的第一个功能是确认 IP 包是否能够成功到达目标地址,当两个设备通过互联网相连时,任意一个设备发送给另一个设备的 IP 包如果没有到达,就会生成 ICMP 数据包发送给设备共享。
  • ICMP 的第二个功能是进行网络诊断,经常使用 ICMP 数据包的两个终端程序是 pingtraceroute,traceroute 程序用于显示两台互联网设备之间可能的路径并测量数据包在 IP 网络上的时延。ping 程序是 traceroute 的简化版本,我们经常使用 ping 命令来测试两台设备之间是否互联,ping 通常用来测试两台主机之间的连接速度,并准确报告数据包到达目的地并返回后所花费的时间。

现在我们知道了,如果在 IP 通信过程中由于某个 IP 包由于某种原因未能到达目标主机,那么这个具体的原因将由 ICMP 进行通知,下面是一个 ICMP 的通知示意图

微信图片_20220416153533.png

上面我们只是画出了路由器 2 给主机 A 发送了一个 ICMP 数据包,而没有画出具体的通知类型,但实际情况是,上面发送的是目标不可达类型(Destination unreachable),ICMP 也是具有不同的通知类型的,下面我们汇总了 ICMP 数据包的具体通知类型。

通知类型(十进制数) 具体内容
0 回送应答(Echo Reply)
3 目标不可达(Destination Unreachable)
4 原点抑制(Source Quench)
5 重定向或改变路由(Redirect)
8 回送请求(Echo Request)
9 路由器公告(Router Advertisement)
10 路由器请求(Router Solicitation)
11 ICMP 超时(Time Exceeded)
17 地址子网请求(Address Mask Request)
18 地址子网应答(Address Mask Reply)

上表显示的 ICMP 通知类型主要分为两类:有关 IP 数据报传递的 ICMP 报文,这类报文也叫做差错报文(error message),以及有关信息采集和配置的 ICMP 报文,这类报文也被称为查询 query 或者信息类报文。

信息类报文包括回送请求和回送应答(类型 8 和 类型 0 ),路由器公告和路由器请求(类型 9 和 类型 0 )。最常见的差错报文类型包括目标不可达(类型 3 )、重定向(类型 5)、超时(类型 11)。

ICMP 在 IPv4 和 IPv6 的封装

我们知道,ICMP 是承载在 IP 内部的,而且 IPv4 和 IPv6 的封装位置不同:

ICMP 在 IPv4 协议中的封装

微信图片_20220416153537.png

ICMP 在 IPv6 协议中的封装

微信图片_20220416153540.png

上面两张图显示了 ICMPV4 和 ICMPv6 的报文格式。开头的 4 个字节在所有的报文中都是一样的。但是其余部分在不同的报文中却不一样。

ICMP 头部包含了整个 ICMP 数据段的校验和,具体格式如下

微信图片_20220416153543.png

所有的 ICMP 报文都以 8 位的类型(Type)代码(Code) 字段开始,其后的 16 位校验和涵盖了整个报文,ICMPv4 和 ICMPv6 种的类型和代码字段是不同的。

相关文章
|
9月前
|
网络协议 算法 开发者
[网络坦白局] TCP粘包 数据包:我只是犯了每个数据包都会犯的错 |硬核图解
[网络坦白局] TCP粘包 数据包:我只是犯了每个数据包都会犯的错 |硬核图解
72 1
|
缓存 网络协议 网络架构
太强了,5幅图就拿下了ARP协议
在上一篇文章 别再恐惧 IP 协议 中, 我们了解到,网络层实现主机之间的通信,而链路层实现具体每段链路之间的通信。也就是说:只要在网络层确定了 IP 地址,就可以向这个目标地址发送 IP 数据报。然而,在底层数据链路层,进行实际通信时却有必要了解每个 IP 地址所对应的 MAC 地址。
|
缓存 运维 前端开发
看完对于跨域还有疑问,请顺着网线过来打死我
跨域,在前后端分离的项目中是很常见的一个问题,跨域是对于浏览器操作来说的,脱离了浏览器来谈跨域是没有任何意义的,笔者目前所在的项目组就是一个前后端分离的项目,也出现过跨域问题,这里对跨域以及跨域涉及到的CORS、OPTIONS请求、Referer字段、Origin字段等信息做个总结。这篇文章分三个步骤去总结跨域问题,第一部分介绍什么是跨域,以及跨域相关的一些概念;第二部分介绍跨域带来的问题有哪些。第三部分总结解决跨域问题的方式。
132 0
看完对于跨域还有疑问,请顺着网线过来打死我
|
人工智能 文字识别 网络协议
关于我尝试抓包微信失败后想到的新方法居然和奥特曼有关~
关于我尝试抓包微信失败后想到的新方法居然和奥特曼有关~ 以前 微信网页版 还可以登录的时候,我们还可以使用 python 帮助我们实现 自动化操作,调用各种各样的 API ,做做机器人啥的 ,但是现在呢~ 微信网页版 好像不开放了😐 扫码登录都会出现下面的画面 😵 来到之前 很火的 python 库 wxpy, 我看到下面这个场景, 果然也是一片哀嚎 哈哈哈 wireshark 抓包 于是我做了个大胆的决定,尝试用 wireshark 去抓取微信发出的数据包~ (我实在太天真了!🙃) 在电脑上打开微信,参考下面三次握手的图~ 可以看到这里就已经 发出了这么多信息 我晕
254 0
|
网络协议 网络架构
ICMP 是个啥破玩意?(三)
ICMP 的全称是 Internet Control Message Protocol(互联网控制协议),它是一种互联网套件,它用于IP 协议中发送控制消息。也就是说,ICMP 是依靠 IP 协议来完成信息发送的,它是 IP 的主要部分,但是从体系结构上来讲,它位于 IP 之上,因为 ICMP 报文是承载在 IP 分组中的,就和 TCP 与 UDP 报文段作为 IP 有效载荷被承载那样。
ICMP 是个啥破玩意?(三)
|
缓存 网络协议 网络架构
ICMP 是个啥破玩意?(二)
ICMP 的全称是 Internet Control Message Protocol(互联网控制协议),它是一种互联网套件,它用于IP 协议中发送控制消息。也就是说,ICMP 是依靠 IP 协议来完成信息发送的,它是 IP 的主要部分,但是从体系结构上来讲,它位于 IP 之上,因为 ICMP 报文是承载在 IP 分组中的,就和 TCP 与 UDP 报文段作为 IP 有效载荷被承载那样。
ICMP 是个啥破玩意?(二)
|
JavaScript 前端开发 数据可视化
字节不给大伙发月饼?🎑那我亲自给大伙发!🥮人人都有!
字节不给大伙发月饼?🎑那我亲自给大伙发!🥮人人都有!
|
编译器 C++
【C/C++教程】关于C/C++那些坑爹的破事儿,你被坑了吗?
今天,就带大家看看C/C++里面究竟有多少不为人知的秘(keng)密(die)吧。可以测试一下,不看答案,自己能get到多少。
111 0
【C/C++教程】关于C/C++那些坑爹的破事儿,你被坑了吗?
|
缓存 网络协议 Linux
ARP,这个隐匿在计网背后的男人(一)
只要确定了 IP 地址后,就能够向这个 IP 地址所在的主机发送数据报,这是我们所熟知的事情。但是再往深了想,IP 地址只是标识网络层的地址,那么在网络层下方数据链路层是不是也有一个地址能够告诉对方主机自己的地址呢?是的,这个地址就是MAC 地址。
ARP,这个隐匿在计网背后的男人(一)
|
网络协议 Linux
ARP,这个隐匿在计网背后的男人(二)
只要确定了 IP 地址后,就能够向这个 IP 地址所在的主机发送数据报,这是我们所熟知的事情。但是再往深了想,IP 地址只是标识网络层的地址,那么在网络层下方数据链路层是不是也有一个地址能够告诉对方主机自己的地址呢?是的,这个地址就是MAC 地址。
ARP,这个隐匿在计网背后的男人(二)