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。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Kafka】开发实战和Springboot集成kafka

目录 消息的发送与接收生产者消费者 SpringBoot 集成kafka服务端参数配置 消息的发送与接收 生产者 生产者主要的对象有: KafkaProducer , ProducerRecord 。 其中 KafkaProducer 是用于发送消息的类, ProducerRecord 类用于封装Kafka的消息…

2023中国高速公路信息化发展盘点

文章目录 前言一、政策规范(一)《加快建设交通强国五年行动计划(2023—2027年)》(二)《关于推进公路数字化转型 加快智慧公路建设发展的意见》(三)《公路工程设施支持自动驾驶技术指南》(四)《贵州省智慧高速公路建设指南(试行)》(五)江苏省《智慧公路车路协同路…

监听元素宽高变化---new ResizeObserver

参考:ResizeObserver API详解-CSDN博客 有的时候需要监听某个元素的宽高变化,这个时候可以使用JS的 resizeObserver 钩子函数。 用于监视元素的大小变化。它可以观察一个或多个 DOM 元素,以便在元素的大小或形状发生变化时触发回调函数。R…

VsCode提高生产力的插件推荐-持续更新中

别名路径跳转 自定义配置// 文件名别名跳转 "alias-skip.mappings": { "~/": "/src", "views": "/src/views", "assets": "/src/assets", "network": "/src/network", "comm…

深圳工业元宇宙赋能新型工业化,推动工业制造业数字化转型发展

在当今数字化时代,工业制造业正面临着巨大的变革。随着技术的不断进步,工业元宇宙的概念逐渐成为推动工业制造业数字化转型的重要力量。深圳作为中国的高科技之都,在这方面走在了前列,积极探索工业元宇宙的应用,赋能新…

引领未来:云原生在产品、架构与商业模式中的创新与应用

文章目录 一、云原生产品创新二、云原生架构设计三、云原生商业模式变革《云原生落地 产品、架构与商业模式》适读人群编辑推荐内容简介目录 随着云计算技术的不断发展,云原生已经成为企业数字化转型的重要方向。接下来将从产品、架构和商业模式三个方面&#xff0c…

【洛谷】P1135奇怪的电梯(DFS)

这题利用 dfs 解决,编程实现比较简单。 具体来说,每层楼有两种可能,上楼或下楼,因此可以形成一个以 a 楼为根的二叉树,因此只需一个 for 循环遍历某个父节点的两个子节点,之后递归就行。 易错点&#xff…

浅出深入-机器学习

文章目录 一、K近邻算法1.1 先画一个散列图1.2 使用K最近算法建模拟合数据1.3 进行预测1.4 K最近邻算法处理多元分类问题1.5 K最近邻算法用于回归分析1.6 K最近邻算法项目实战-酒的分类1.6.1 对数据进行分析1.6.2 生成训练数据集和测试数据集1.6.3 使用K最近邻算法对数据进行建…

手把手教你用plotly绘制excel中常见的8种图表

目录: 0. 准备工作 1. 柱状图 2. 条形图 3. 折线图 4. 面积图 5. 饼图与圆环图 6. 散点图 7. 气泡图 8. 极坐标(雷达图) 0. 准备工作 我这边是在jupyterlab中演示的plotly图表,如果只安装plotly是无法正常显示图表的(会显示为空白…

Mac怎么录屏?简单易懂,关键技巧分享!

随着时代的变迁,人们对mac电脑的使用需求也越来越多样化。其中,屏幕录制成为了很多用户的常用需求,比如录制教程、游戏视频、会议记录等。可是很多用户不知道mac怎么录屏。本文将为你详细介绍两种mac录屏的方法,让大家轻松学会如何…

Internet Download Manager 6.42.3 (IDM) 中文破解免激活绿色版

Internet Download Manager 6.42.3中文破解版,全球最佳下载利器。Internet Download Manager (简称IDM) 是一款Windows 平台功能强大的多线程下载工具,国外非常受欢迎。支持断点续传,支持嗅探视频音频,接管所有浏览器,…

【并发编程】AQS——详细解释公平锁,非公平锁,独占锁,什么是可重入以及condition

目录 1、公平 2.非公平 3.独占锁 4.可重入 5.condition 1、公平 第一步:获取状态的 state 的值。如果 state0 即代表锁没有被其它线程占用,执行第二步。如果 state!0 则代表锁正在被其它线程占用,执行第三步。 第二步:判断队列…

ICSpector:一款功能强大的微软开源工业PLC安全取证框架

关于ICSpector ICSpector是一款功能强大的开源工业PLC安全取证框架,该工具由微软的研究人员负责开发和维护,可以帮助广大研究人员轻松分析工业PLC元数据和项目文件。 ICSpector提供了方便的方式来扫描PLC并识别ICS环境中的可疑痕迹,可以用于…

Spring与Web环境集成

1. Spring与Web环境集成 1.1 ApplicationContext应用上下文获取方式 应用上下文对象是通过new ClasspathXmlApplicationContext(spring配置文件) 方式获取的,但是每次从容器中获得Bean时都要编写new ClasspathXmlApplicationContext(spring配置文件) ,这…

RX4901CE (RTC模块)

RX4901CE是一个集成了32.768 kHz数字温度补偿晶体振荡器(DTCXO)的RTC模块。高稳定性,低电流消耗,时间戳功能,当外部或内部事件发生时,可以记录多达32个日期和时间,以及基本的RTC功能,如时间和日历&#xff…

江科大STM32 中

目录 6、TIM(Timer)定时器基本定时器通用定时器高级定时器示例程序(定时器定时中断&定时器外部时钟)TIM输出比较示例程序(PWM驱动LED呼吸灯&PWM驱动舵机&PWM驱动直流电机)TIM输入捕获示例程序&…

微信小程序登录获取手机号教程(超详细)

1. 背景介绍: 在我们开发微信小程序时,登录时,需要获取用户手机号作为唯一标识,下面我介绍一下获取手机号的教程。 本篇文章介绍后端获取方法: 前端工作 后端工作 前端 新建Page页面,在xxx.wxml中加入…

Linux的 .bashrc 有什么作用?

一、.bashrc 是什么? 有什么用? .bashrc是一个存储在你的home目录下的隐藏文件,它用来配置和自定义你的终端环境和行为。 每次你启动一个新的终端时,.bashrc文件就会被执行,加载你设置的环境变量,别名,函数…

Linux下的gcc与g++

文章目录 一.Linux gcc与g1.gcc如何生成可执行程序(g同)2.函数库 二.Linux项目自动化构建工具-make/makefile 一.Linux gcc与g 1.gcc如何生成可执行程序(g同) 预处理(宏定义替换,展开头文件代码,条件编译,去注释&…

京东云开发者DDD妙文欣赏(3-4)什么时候厨师是Actor

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 京东云开发者DDD妙文欣赏(1-2)报菜名和化繁为简的创新>> 图8 《餐厅》中的“用例图” (01) 原文 用例图 赏析 揉一揉眼睛仔细…