ICMP协议详解

ICMP(Internet Control Message Protocol)协议是一个网络层协议。 一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通;但是IP协议并不提供可靠传输。如果丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因。因此我们需要ICMP协议来完成这样的功能。

一、 功能

ICMP协议的功能主要有:

  1. 确认IP包是否成功到达目标地址
  2. 通知在发送过程中IP包被丢弃的原因

在这里插入图片描述

我们需要注意:ICMP是基于IP协议工作的,但是它并不是传输层的功能,因此仍然把它归结为网络层协议。

二、报文格式

ICMP报文包含在IP数据报中,IP报头在ICMP报文的最前面。一个ICMP报文包括IP报头(至少20字节)、ICMP报头(至少八字节)和ICMP报文(属于ICMP报文的数据部分)。当IP报头中的协议字段值为1时,就说明这是一个ICMP报文。

ICMP报头如下图所示:
在这里插入图片描述

  • 类型:占1字节,标识ICMP报文的类型,从类型值来看ICMP报文可以分为两大类。第一类是取值为1~127的差错报文,第2类是取值128以上的信息报文
  • 代码:占1字节,标识对应ICMP报文的代码。它与类型字段一起共同标识了ICMP报文的详细类型
  • 校验和:占2字节,这是对包括ICMP报文数据部分在内的整个ICMP数据报的校验和,以检验报文在传输过程中是否出现了差错
  • 内容:占8字节。

三、常见的差错报文

常见的ICMP报文可以分为两大类,即差错报文和查询报文。

1.差错报文

常见的ICMP差错报文有以下几种:目的站不可达、数据报超时等。

目的站不可达
目的地不可达由主机或其入站网关生成,以通知客户端由于某种原因目的地不可达。出现此消息的原因可能包括: 与主机的物理连接不存在(距离无限);指定的协议或端口未激活;数据必须分段,但“不分段”标志已打开。不可到达的 TCP 端口特别以TCP RST响应,而不是像预期的那样以目标不可到达类型 3 进行响应。对于IP 多播传输,永远不会报告目标不可达。
在这里插入图片描述
类型字段(位 0–7)必须设置为 3
代码字段(位 8-15)用于指定错误类型,可以是以下任何一种:

代码描述
0网络不可达错误。
1主机无法访问错误。
2协议不可达错误(不支持指定的传输协议)。
3端口不可达错误(指定协议无法通知主机传入消息)。
4数据报太大。数据包分段是必需的,但“不分段”(DF) 标志已打开。
5源路由失败错误。
6目标网络未知错误。
7目标主机未知错误。
8源主机隔离错误。
9目标网络在管理上被禁止
10目标主机被管理禁止。
11对于服务类型,网络无法访问。
12对于服务类型无法访问主机。
13通信被管理禁止(管理过滤阻止数据包转发)。
14主机优先级冲突(表示主机或网络和端口的组合不允许请求的优先级)。
15优先级截止有效(数据报的优先级低于网络管理员设置的级别)。

下一跳 MTU字段(位 48-63)包含发生代码 4 错误时下一跳网络的 MTU。[15]
包含IP 标头和附加数据以允许客户端将回复与导致目标无法到达回复的请求进行匹配。

数据报超时
超时由网关生成,以通知由于生存时间字段达到零而丢弃的数据报的源。如果主机未能在其时限内 重组分段数据报,则也可能会发送超时消息。

Traceroute实用程序使用超时消息来识别两个主机之间路径上的网关。
在这里插入图片描述
类型必须设置为 11
代码指定超时消息的原因,包括以下内容:

代码描述
0运输过程中超过了生存时间。
1超过片段重组时间。

源主机使用IP 标头和原始有效负载的前 64 位将超时消息与丢弃的数据报进行匹配。对于UDP和TCP等更高级别的协议,64 位有效负载将包括丢弃数据包的源端口和目标端口。

2.查询报文

常见的ICMP查询报文有以下几种:回送请求或回答、时间戳请求或回答、路由器询问和通告、信息请求或回答、地址掩码请求或回答。

其中用得较多的是回送请求或回答、时间戳请求或回答,其他的三种查询报文目前几乎很少被用到,以前它们主要在主机启动时使用,通过使用这三种查询报文,主机能确定自身在网络环境中IP地址、地址掩码、路由器状况等信息,现在,DHCP协议已经能够完全实现这些功能。此外,在互联网中的两台主机能够使用时间戳请求或回答报文来确定数据报在彼此之间往返所需要的时间。

时间戳

时间戳用于时间同步。原始时间戳设置为发送者最后一次接触数据包的时间(自午夜以来以毫秒为单位)。不使用接收和发送时间戳。
在这里插入图片描述

类型必须设置为 13
代码必须设置为0
客户端可以使用标识符和序列号来将时间戳回复与时间戳请求进行匹配。
原始时间戳是自世界时间(UT)午夜以来的毫秒数。如果 UT 参考不可用,则可以设置最高有效位来指示非标准时间值。

时间戳回复
时间戳回复回复时间戳消息。它由时间戳发送方发送的原始时间戳以及指示何时接收时间戳的接收时间戳和指示何时发送时间戳回复的传输时间戳组成。
在这里插入图片描述
类型必须设置为 14
代码必须设置为0
客户端可以使用标识符和序列号来将回复与引起回复的请求进行匹配。
原始时间戳是发送者在发送消息之前最后接触消息的时间。
接收时间戳是回显器在接收时第一次接触它的时间。
传输时间戳是回显器在发送消息时最后一次接触消息的时间。
所有时间戳均以自世界标准时间午夜以来的毫秒为单位。如果时间不可用(以毫秒为单位)或无法提供相对于午夜 UT 的时间,则可以将任何时间插入到时间戳中,前提是时间戳的高位也设置为指示此非标准值。

使用时间戳和时间戳回复消息来同步互联网节点的时钟已经很大程度上被基于UDP的网络时间协议和精确时间协议所取代。

四、应用

  1. 错误报告:

    • 目的地不可达:当路由器或网关无法将IP数据包转发到目的地时,会向发送方返回一个“目的地不可达”消息。
    • 时间超出:如果数据包在网络中的存活时间(TTL, Time to Live)耗尽,未到达目的地,会发送时间超出消息告知发送者。
    • 参数问题:如果IP数据包的头部有错误,将发送参数问题消息给发送方。
    • 改变路由(重定向):路由器发出重定向消息以告诉发送主机有一个更好的路由可供选择。
  2. 网络诊断工具:

    • 回声请求/应答(Echo Request/Reply):这是ping命令背后的机制。发送方发送一个回声请求消息,接收方以回声应答消息响应。这通常用于测试网络连接的连通性和延迟。
    • 时间戳请求/应答:用于请求/响应发送者和接收者之间的时间戳信息,可用于计算往返时间并同步时钟。
  3. 网络设备和服务的可达性测试:

    • 使用ICMP回声请求和应答,可以测试网络上特定设备是否可达,并获取有关网络延迟的信息。
  4. 网络拥塞控制:

    • 路由器通过ICMP“来源抑制”(Source Quench)消息向发送方报告网络拥塞情况,建议发送方减少发送速率。注:来源抑制消息在较新的网络实践中不常使用,因为其功能通常由更复杂的拥塞控制机制取代,如TCP的拥塞控制算法。
  5. 路径MTU发现:

    • ICMP通过不允许分片的“片过大”(Fragmentation Needed and DF Set)消息,被用来执行路径MTU发现过程。这个过程的目的是确定到目的地路径上任何一点的最大传输单元(MTU)的大小。

提问:为什么ping的地址不是完整的URL?

ping是在网络层工作的,并且直接与目标主机的IP地址交互,而不处理传输层或应用层的协议,如TCP/UDP或HTTPS。

当您在浏览器中输入https://作为网页的一部分时,这个前缀指定了您希望使用HTTP协议的安全变体(HTTPS)。HTTP和HTTPS是应用层协议,它们使用TCP协议(位于传输层)在客户端和服务器之间传输数据。HTTPS特别使用加密和TLS/SSL证书来保护传输数据的安全。

因此,“https://”前缀对于ping命令来说没有意义,因为ping不涉及这些高层的网络协议。当您想用ping测试服务器的可达性时,您应该直接使用服务器的IP地址或域名,而不是完整的URL。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/648090.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QY-18A 远程倾斜位移监测仪

产品概述 远程倾斜位移监测仪具有体积小、精度高、安装方便、功能完备等优势,可对被测物进行实时的监测,兼具自动化、云模式、高精度。能根据对设备自身的X、Y、Z三个方向的姿态倾斜状况进行实时监测,测量出监测点的相对位移量和方位角&…

Java中Integer(127)==Integer(127)为True,Integer(128)==Integer(128)却为False,这是为什么?

文章目录 1.前言2. 源码解析3.总结 1.前言 相信大家职业生涯中或多或少的碰到过Java比较变态的笔试题,下面这道题目大家应该不陌生: Integer i 127; Integer j 127;Integer m 128; Integer n 128;System.out.println(i j); // 输出为 true System.o…

阿里云之申请云服务器

阿里云注册建议使用支付宝扫码。 点击产品,勾选个人认证,云服务器。选择第二个。第一个会自动给你续费,第二个不会。 以下配置,只要是博主没说的都可以根据初始选项选择。(不用管) 地域:选择与…

嵌入式软件工程师面试题——2025校招社招通用(C/C++)(三十九)

说明: 面试群,群号: 228447240面试题来源于网络书籍,公司题目以及博主原创或修改(题目大部分来源于各种公司);文中很多题目,或许大家直接编译器写完,1分钟就出结果了。但…

C语言实现“空心”正方形图案输出的程序解析

我们可以利用循环结构和条件判断语句来绘制各种图形。下面&#xff0c;我将对一个通过while循环和嵌套for循环实现“空心”正方形输出的C语言代码进行详细解析。 #include <stdio.h>int main() {int a;while (scanf("%d", &a) ! EOF) { // 输入循环&#…

Unknown encoder ‘libmp3lame

环境&#xff1a; macos m1 &#xff0c; python3.10.x 背景 做视频切片&#xff0c; 使用moviepy 中VideoFileClip进行截取视频。 报错&#xff1a; Unknown encoder libmp3lameThe audio export failed because FFMPEG didnt find the specified codec for audio encoding …

【ARMv8M Cortex-M33 系列 7 -- RA4M2 移植 RT-Thread 问题总结】

请阅读【嵌入式开发学习必备专栏 】 文章目录 问题小结栈未对齐 经过几天的调试&#xff0c;成功将rt-thead 移植到 RA4M2&#xff08;Cortex-M33 核&#xff09;上&#xff0c;thread 和 shell 命令已经都成功支持。 问题小结 在完成 rt-thread 代码 Makefile 编译系统搭建…

Django开发_19_form表单前后端关联(1)

实例分析&#xff0c;过程使用URL反向解析知识&#xff1a; Django开发_12_URL反向解析、重定向-CSDN博客y 一、实例代码 (一)主路由urls.py: path("work4/", include("work4_app.urls",namespace"work4")), (二)app内urls.py: from djang…

利用大数据靶向肿瘤细胞的基因突变

在亚利桑那健康科学大学&#xff0c;研究人员正在应用大量数据&#xff0c;试图更多地了解这种突变、其变异以及任何可能有助于他们治疗患者的相关因素。 癌症的潜在原因很多&#xff0c;从食物和环境到创伤和感染。在遗传学方面&#xff0c;研究人员发现&#xff0c;有一种基因…

uniapp app更新

uniapp app更新 这个版本要随之增加&#xff0c;不然刚更新时直接用app, 新包增加的那些页面跳转会有问题&#xff0c;不能跳新的页面 //app更新检测 updataApp(){const that this;uni.showLoading({title:加载中...})plus.runtime.getProperty(plus.runtime.appid, functio…

Centos7.6之禅道开源版17.6.1安装记录

Centos7.6之禅道开源版17.6.1安装记录 文章目录 Centos7.6之禅道开源版17.6.1安装记录1. 下载2. 安装3. 登录4. 连接数据库1. 本地连接2. 远程连接1. 开启远程访问用户2. 更改mysql绑定的主机3. 重启Apache与MySQL服务 4. 常用命令1. Apache和Mysql常用命令2. 其他 1. 下载 官网…

C语言中的extern:全局变量和函数的声明与使用

概念&#xff1a; 在C语言中&#xff0c;extern是一个关键字&#xff0c;用于声明全局变量和函数。它告诉编译器该变量或函数在其他源文件中定义&#xff0c;让编译器知道在链接时需要从其他源文件中寻找其定义。extern关键字不会分配内存&#xff0c;只是告诉编译器该变量或函…

归并排序-逆序对

之前的文章里有写归并排序的最小和问题&#xff08;归并排序-最小和-CSDN博客&#xff09;&#xff0c;逆序对问题其实跟最小和问题的本质一样&#xff1a; 逆序对&#xff1a;给定一个数据&#xff0c;从左往右&#xff0c;从第一个数开始&#xff0c;它右边每一个比它小的都…

解密:消息中间件的选择与使用:打造高效通信枢纽

目录 第一章&#xff1a;消息中间件介绍 1.1 什么是消息中间件 1.2 消息中间件的作用 1.3 消息中间件的分类 第二章&#xff1a;消息中间件的选择标准 2.1 性能 2.2 可靠性 2.3 可扩展性 2.4 易用性 2.5 社区支持 2.6 成本 第三章&#xff1a;常见的消息中间件对比…

解决 [Vue warn]:Avoid mutating a prop directly 警告

错误信息 [Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop’s value. Prop being mutated: “xxx” 错误原因 所有的 prop 都使得…

图像分割的作用以及运用领域

图像分割 图像分割是数字图像处理领域的一种技术&#xff0c;其主要目的是将数字图像划分成多个部分或区域&#xff0c;以便于更简单、有效地分析和理解图像内容。在图像分割过程中&#xff0c;图像被分解成若干互不重叠的区域&#xff0c;这些区域通常对应于实际场景中的各种…

推荐几款AI绘图软件且提供psd源文件

AI绘图软件通常指的是支持人工智能辅助创作的绘图和设计工具&#xff0c;能够帮助用户更高效地进行图像、插画和设计工作。以下是一些具有AI功能且可以导出或处理PSD格式文件&#xff08;即Photoshop源文件格式&#xff09;的软件&#xff1a; Adobe Photoshop Adobe Photoshop…

Prometheus配置与管理

1 配置文件 Prometheus通过命令行和配置文件进行配置&#xff0c;命令行配置不能修改的系统参数&#xff08;例如存储位置&#xff0c;要保留在磁盘和内存中的数据量等&#xff09;&#xff0c;但配置文件定义了与抓取作业及其实例相关的所有内容&#xff0c;以及哪些规则文件…

2024阿里云优惠,云服务器61元一年起

2024年最新阿里云主机价格&#xff0c;最低配置2核2G3M起步&#xff0c;只要61元一年&#xff0c;还可以在阿里云CLUB中心领券 aliyun.club 专用满减优惠券。 1、云服务器ECS经济型e实例2核2G、3M固定带宽99元一年 2、轻量应用服务器2核2G3M带宽轻量服务器一年61元 3、阿里云轻…

ECMAScript日常总结--ES2019(ES10)

ECMAScript日常总结–ES2019(ES10) 文章目录 ECMAScript日常总结--ES2019(ES10)1. Object.fromEntries() -- 将键值对的列表转换为对象2. Array.prototype.flat() -- 用于将嵌套数组&#xff08;多维数组&#xff09;扁平化为一维数组3. String.prototype.trimStart() 和 Strin…