ICMP 理解

news2024/11/10 17:36:41

icmp

差错报告机制,tcp/ip协议族中重要的子协议,通常被ip层或者更高的(tcp/udp)使用,,属于网络层协议,主要用于在ip主机和路由器之间传递控制消息,用于报告主机是否可达、路由是否可用等。这些控制消息虽然并不传输用户数据,但是对于收集各种网络信息、诊断和排除各种网络故障以及用户数据的传递具有至关重要的作用。

为什么需要ICMP?

在数据传输的过程中,IP提供尽力而为的服务,指为了把数据包发送到目的地址尽最大努力。它并不对目的主机是否收到数据包进行验证,无法进行流量控制和差错控制。因此在数据包传输过程中,产生各种错误在所难免。为了更有效地转发IP数据包和提高数据包交付成功的机会,ICMP应运而生。使用ICMP,当网络中数据包传输出现问题时,主机或设备就会向上层协议报告差错情况和提供有关异常情况的报告,使得上层协议能够通过自己的差错控制程序来判断通信是否正确,以进行流量控制和差错控制,从而保证服务质量。

从技术角度来说,ICMP就是一个差错报告机制,其工作机理也比较简单,即当数据包处理过程出现差错时,ICMP向数据包的源端设备报告这个差错,它既不会纠正这个差错,也不会通知中间的网络设备。因为ICMP报文被封装在IP数据包内部,作为IP数据包的数据部分通过互联网传递。IP数据包中的字段包含源端和最终的目的端,并没有记录报文在网络传递中的全部路径(除非IP数据包中设置了路由记录选项)。因此当设备检测到差错时,它无法通知中间的网络设备,只能向源端发送差错报告。

ICMP报文格式如图所示,每一个ICMP消息都将包含引发这条ICMP消息的数据包的完全IP包头,ICMP报文则作为IP数据包的数据部分封装在IP数据包内部。ICMP包头中包含的三个固定字段就是源端设备确定发生错误的类型的主要依据。

  • Type字段表示ICMP消息的类型;

  • Code字段表示ICMP消息类型细分的子类型;

  • Checksum字段表示ICMP报文的校验和。

请求和应答

TypeCode描述查询/差错
0-Echo响应0Echo响应报文查询
3-目的不可达0目标网络不可达报文差错
1目标主机不可达报文差错
2目标协议不可达报文差错
3目标端口不可达报文差错
4要求分段并设置DF flag标志报文差错
5源路由失败报文差错
6未知的目标网络报文差错
7未知的目标主机报文差错
8源主机隔离报文差错
9禁止访问的网络报文差错
10禁止访问的主机报文差错
11对特定的TOS网络不可达报文差错
12对特定的TOS主机不可达报文差错
13由于过滤 网络流量被禁止报文差错
14主机越权报文差错
15优先权终止生效报文差错
5-重定向0重定向网络报文差错
1重定向主机报文差错
2基于TOS的网络重定向报文差错
3基于TOS的主机重定向报文差错
8-Echo请求0Echo请求报文查询
9-路由器通告0路由通告报文查询
10-路由器请求0路由器的发现/选择/请求报文查询
11-ICMP超时0TTL超时报文差错
1分片重组超时报文差错
12-参数问题0IP报首部参数错误报文差错
1丢失必要选项报文差错
2不支持的长度报文差错
13-时间戳请求0时间戳请求报文查询
14-时间戳应答0时间戳应答报文查询
15-信息请求0信息请求报文查询
16-信息应答0信息应答报文查询

icmp的一些应用

Ping

Ping程序是最常见的用于检测IPv4和IPv6网络设备是否可达的调试手段,它使用ICMP的echo信息来确定:

  • 远程设备是否可达;

  • 与远程主机通信的来回旅程(round-trip)的延迟;

  • 报文包的丢失情况。

Tracert

Tracert程序主要用于查看数据包从源端到目的端的路径信息,从而检查网络连接是否可用。当网络出现故障时,用户可以使用该命令定位故障点。

Tracert利用ICMP超时信息和目的不可达信息来确定从一个主机到网络上其他主机的路由,并显示IP网络中每一跳的延迟(这里的延迟是指:分组从信息源发送到目的地所需的时间,延迟也分为许多的种类——传播延迟、传输延迟、处理延迟、排队延迟等)。

也就是依次去发ttl=1 2 3 ..的icmp请求包,通过对应路由器回应的超时icmp包去确定路由器信息

具体过程如下:

  1. 在终端中输入 Traceroute 命令,指定要访问的目标 IP 地址,例如:

Tracert www.baidu.com
  1. Tracert命令会依次发送 TTL 值递增的 ICMP 请求包,例如第一次发送 TTL=1 的 ICMP 请求包,第二次发送 TTL=2 的 ICMP 请求包,以此类推。

  2. 当 ICMP 请求包到达第一个路由器时,TTL 值为1,路由器将其转发到下一个路由器,并将 TTL 值减1。由于 TTL 值为0,第一个路由器无法将 ICMP 请求包转发到下一个路由器,因此它会发送一个超时 ICMP 响应包,告诉源主机该 ICMP 请求包已经超时。

  3. 当源主机收到第一个路由器发送的超时 ICMP 响应包时,Tracert命令会显示该路由器的 IP 地址、主机名和响应时间。

  4. Tracert命令会继续发送 TTL 值递增的 ICMP 请求包,直到到达目标主机为止。在每一跳路由器上,Tracert命令都会触发超时 ICMP 响应包,并从中获取路由信息。

所以ping关注的是结果,而tracert关注的是过程

看到这有的人可能会说traceroute,没错俩都是当作网络诊断工具的,只不过Tracert是在windows下命令行工具,发的包默认也是icmp,,traceroute是linux下的,,发的包默认是udp,,总的来说两个过程都是类似的。具体区别可以去自行搜索

NQA

网络质量分析NQA(Network Quality Analysis)是一种实时的网络性能探测和统计技术,可以对响应时间、网络抖动、丢包率等网络信息进行统计。NQA能够实时监视网络服务质量,在网络发生故障时进行有效的故障诊断和定位。

利用不同类型的ICMP报文,NQA实现了Ping和Tracert功能的扩展和增强,可以实现对网络运行状况的准确测试,输出统计信息。比如NQA的ICMP测试、ICMP Jitter测试和Trace测试等。

  • ICMP测试

    ICMP测试是通过发送ICMP Echo请求报文和Echo响应报文来判断目的地的可达性、计算网络响应时间及丢包率,从而清晰地反映出网络性能及畅通情况。ICMP测试提供类似于命令行下的Ping命令功能,但输出信息更为丰富。

  • ICMP Jitter测试

    ICMP Jitter测试是以ICMP报文为承载,通过记录在报文中的时间戳信息来统计时延、抖动、丢包的一种测试方法。Jitter(抖动时间)是指相邻两个报文的接收时间间隔减去这两个报文的发送时间间隔。

  • Trace测试

    NQA的Trace测试用于检测源端到目的端的转发路径,并沿该路径记录源设备到中间各个设备的时延等信息。Trace测试类似于Tracert命令功能,但输出信息更为丰富。每一跳信息中能够显示平均时延、丢包、最后一个包接收时间等信息。

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

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

相关文章

融邦JAVA面试题

1. Java线程池的作用及使用方式 线程池的作用: (1) 降低系统资源消耗:通过重用已存在的线程,降低线程创建和销毁造成的消耗。 (2) 提高系统响应速度:当有任务到达时,无需等待新线程的创建便能立即执行。 (3) 提高线程…

SpringBoot3基础用法

技术和工具「!喜新厌旧」 一、背景 最近在一个轻量级的服务中,尝试了最新的技术和工具选型; 即SpringBoot3,JDK17,IDEA2023,Navicat16,虽然新的技术和工具都更加强大和高效,但是适应采坑的过程…

阿里云瑶池 PolarDB 开源官网焕新升级上线

导读近日,阿里云开源云原生数据库 PolarDB 官方网站全新升级上线。作为 PolarDB 开源项目与开发者、生态伙伴、用户沟通的平台,将以开放、共享、促进交流为宗旨,打造开放多元的环境,以实现共享共赢的目标。 立即体验全新官网&…

【测试】软件测试工具JMeter简单用法

简明扼要,点到为止。 1. JMeter介绍 JMeter的全称是Apache JMeter,是一款用于软件测试的工具软件,其是开源免费的,由Apache基金会运营。 官网:Apache JMeter - Apache JMeter™ 2. 下载安装及运行 2.1 安装 Java8…

RabbitMQ的6种工作模式

RabbitMQ的6种工作模式 官方文档: http://www.rabbitmq.com/ https://www.rabbitmq.com/getstarted.html RabbitMQ 常见的 6 种工作模式: 1、simple简单模式 1)、消息产生后将消息放入队列。 2)、消息的消费者监听消息队列,如果队列中…

深入探究Spring核心模块

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

Flowise AI:用于构建LLM流的拖放UI

推荐:使用NSDT场景编辑器助你快速搭建可二次编辑的3D应用场景 什么是Flowise AI? Flowise AI是一个开源的UI可视化工具,用于帮助开发LangChain应用程序。在我们详细介绍 Flowise AI 之前,让我们快速定义 LangChain。LangChain是…

谈谈如何使用ShellExecute的返回值

之前的一篇文章中,我们讲到了在 16 位 Windows 中,实例句柄(HINSTANCE)唯一标识了一个进程。到了 32 位 Windows,内核得到了完全的重新设计,其中之一是:它引入了 “内核对象” 和 “安全描述符”。 在 16 位 Windows …

vue项目实战-脑图编辑管理系统kitymind百度脑图

前言 项目为前端vue项目,把kitymind百度脑图整合到前端vue项目中,显示了脑图的绘制,编辑,到处为json,png,text等格式的功能 文章末尾有相关的代码链接,代码只包含前端项目,在原始的…

GET和POST的区别,java模拟postman发post请求

目录 一、先说一下get和post1、看一下人畜无害的w3schools怎么说:2、问一下文心你言哥,轻轻松松给你一个标准答案:3、卧槽,懂了,好像又没懂 二、让我们扒下GET和POST的外衣,坦诚相见吧!三、我们…

MySQL5.7源码编译Debug版本

编译环境Ubuntu22.04LTS 1 官方下载MySQL源码 https://dev.mysql.com/downloads/mysql/?spma2c6h.12873639.article-detail.4.68e61a14ghILh5 2 安装基础软件 cmakeclangpkg-configperl 参考:https://dev.mysql.com/doc/refman/5.7/en/source-installation-prere…

网络安全进阶学习第十二课——SQL手工注入3(Access数据库)

文章目录 注入流程:1、判断数据库类型2、判断表名3、判断列名4、判断列数1)判断显示位 5、判断数据长度6、爆破数据内容 注入流程: 判断数据库类型 ——> 判断表名 ——> 判断列名 ——> 判断列名长度 ——> 查出数据。 asp的网…

Acwing.877 扩展欧几里得算法

题目 给定n对正整数ai , bi,对于每对数,求出一组ai ,g,使其满足ai* xi bi * yi gcd(ai ,bi)。 输入格式 第一行包含整数n。 接下来n行,每行包含两个整数ai , bi。 输出格式 输出共n行,对于每组ai, bi&#xff0c…

hcip的ospf综合实验

题目 拓扑图 IP地址分配及环回 R1 < Huawei>sy Enter system view, return user view with CtrlZ. [Huawei]sysname r1 [r1]int g0/0/0 [r1-GigabitEthernet0/0/0]ip add 172.16.0.1 27 Aug 6 2023 19:03:33-08:00 r1 %%01IFNET/4/LINK_STATE(l)[0]:The line protocol I…

第3章 语言基础

引言 任何语言的核心所描述的都是这门语言在最基本的层面上如何工作&#xff0c;涉及语法、操作符、数据类型以及内置功能&#xff0c;在此基础之上才可以构建复杂的解决方案 本章接下来的内容主要基于ECMAScript第6版。ES6 语法 js的语法借鉴了c/c&#xff0c;java。js是相对…

如何在PCB设计过程中处理好散热

在现代高性能电子设备中&#xff0c;散热是一个常见而重要的问题。正确处理散热问题对于确保电子设备的可靠性、稳定性和寿命至关重要。 下面将介绍在PCB设计过程中处理散热问题的方法和技巧&#xff0c;以帮助大家提高设计质量和性能。 首先&#xff0c;在处理散热问题之前&…

项目部署(前后端分离)

1、前端项目 &#xff08;打包成dist文件,放到nginx的html目录下面&#xff09;&#xff0c;然后配置nginx 2、后端项目部署 使用之前的shell脚本&#xff08;然后赋予用户权限&#xff09;&#xff0c;最后运行脚本 查看进程

Flutter编译一直显示Running Gradle task ‘assembleDebug‘

&#x1f525; 目前开发的Android Studio版本 &#x1f525; &#x1f525; 当前Flutter SDK 版本 &#x1f525; Flutter 3.10.6 • channel stable • https://github.com/flutter/flutter.git Framework • revision f468f3366c (3 周前) • 2023-07-12 15:19:05 -0700 Eng…

算法与数据结构-哈希表

文章目录 什么是散列表散列函数的设计原则散列冲突的解决办法1. 开放寻址法2. 链表法 什么是散列表 散列表用的是数组支持按照下标随机访问数据的特性&#xff0c;所以散列表其实就是数组的一种扩展&#xff0c;由数组演化而来。可以说&#xff0c;如果没有数组&#xff0c;就…

网络安全预警分类流程

网络安全预警指南 随着信息技术的广泛应用与快速发展&#xff0c;传统业务与信息系统的融合程度不断加深&#xff0c;网络安全对国家政治、经济、文化、公共服务活动的影响进一步增大。网络安全形势日趋复杂&#xff0c;安全威胁不断变化&#xff0c;利用网络漏洞、恶意程序从…