5.2.7 因特网控制报文协议ICMP

news2024/11/28 14:11:24

5.2.7 因特网控制报文协议ICMP

我们知道因特网的技术核心是IP数据报,IP数据报的最大特点是无连接不可靠,但实际中因特网中也会存在通信线路或者是处理器的故障、路由器拥塞等等使得无法接收或者处理数据报,路由表也误导导致出现路由环路等原因都有可能使得数据报交付失败,因此因特网也需要差错检查与纠正的机制,虽然他不直接纠错,但是在互联网网络层有一个IP配套的协议或者称之为扩充的协议称之为ICMP,他提供了一种差错报告机制,用于路由器或者目的主机把发生的交付的问题,或者是路由的问题通告给发出IP数据报的源主机,此外ICMP还能提供给用户有实际价值的信息,这里我们就来深入学习一下ICMP的知识。

一、ICMP概念

  • ICMP(Internet Control Message Protocol)是因特网控制报文协议的简称,是TCP/IP协议族的子协议

  • ICMP用于在IP主机、路由器之间传递控制消息。这里的控制信息是指:网络通不通、主机是否可达,路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但他对于用户数据的传递却起着非常重要的作用。

  • ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。如图

    ICMP报文格式

    ICMP报文是由ICMP的首部和数据两个部分组成,ICMP首部由固定的8字节,前4个字节是通用部分,后四个字节会随着报文类型的不同而有所差异,ICMP报文的传递需要IP的支持,也就是说每个ICMP报文不能够独立的去传输,而是要封装到IP数据报中,源IP地址为发送报告的机器的IP地址,目的IP地址为出现差错的数据报源站的IP地址。ICMP是IP协议必要的组成部分,因此我们不能将其当成高层的协议。它是在网络层的一个协议。所以ICMP在网络的传输过程中看起来就像一个普通的IP数据报一样。那么网络设备或者是主机如何识别网络中传输的就是ICMP报文呢?这里我们要回顾一下前面介绍的IP数据报首部中的一些知识。如图协议字段

    我们知道在IP数据报首部中有一个协议字段,该字段就指明了数据报封装了哪个协议的协议数据单元,可以是ICMP,IGMP,当协议字段的值为1的时候就表示IP数据报中封装的是来自于ICMP协议的报文。

  • ICMP报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报发送出去。

二、ICMP报文种类

  • ICMP报文分为两种大的类型即ICMP差错报告报文和ICMP讯问报文。

  • ICMPC差错报告报文是指当IP数据报出现差错的时候路由器或者主机就会发出此类报文,产生ICMP差错报告的同时会丢弃这个出现差错的IP数据报。ICMP差错报告报文只会向引起问题的IP数据报的源站报告差错,不负责纠正差错。纠正差错是留给高层进行操作的。

  • 为什么ICMP报文仅仅是发给引起问题的数据报的源站呢?原因是IP数据报只含有源目的主机的IP地址,一般它并不包含所走路径的完整记录。而且他也实在无法确定究竟这条路上的哪个网络节点应该为网络问题来负责。所以ICMP报文仅仅发给引起问题的数据报的源站是最合理的选择。

  • 报告差错的ICMP报文总是复制了产生问题IP数据报的首部和前8个字节也就是前64比特数据。这其中就包含了IP数据报的首部,端口号,TCP序列号等等信息以便让接收方能够更准确的去判断应该由哪个协议以及应用程序对已经发生的差错负责。

  • 五种ICMP差错报告报文

    1. 终点不可达

      终点不可达的差错报告报文有很多种情况,包括网络不可达、主机不可达、协议不可达等等,比如一个目的主机根本不存在,或者处于关机状态,当路由器收到了一份IP数据报,但是又不能转发的情况时,这个时候就会发送一份ICMP主机不可达的差错报告报文。一个数据报的目的主机的IP地址所指定的网络是不可达的,如到网络的距离是无穷的,此时路由器就会向该数据报的源主机发送一个网络不可达的差错报文。当目的主机收到一份UDP数据报而目的端口和它正在使用的进程不相符的时候UDP会返回一个ICMP的端口不可达的差错报告报文。

    2. 时间超过

      也称为超时的差错报告报文,前面我们学习过IP数据报首部中有一个TTL即生存时间,现实中TTL起着一个跳数限制的作用,因为网络中的路由表难免偶尔出现差错的情况,为了避免数据报在因特网中无休止的兜圈子而无法到达目的主机,所以在产生IP数据报的时候给TTL赋一个初值,数据报每经过一台路由器的转发,路由器就会把TTL值减一,一旦TTL值减为零,路由器就不再转发该IP数据报,而是予以丢弃并且向源站发送一个ICMP的差错报告报文。

    3. 源站拟制

    4. 参数问题

    5. 路由重定向

  • ICMP询问报文

    对于ICMP询问报文来说,它是用于给网络管理人员或者是应用程序对网络进行可达性分析,地址掩码设置,时钟同步等检测,从而对网络进行故障诊断和控制

  • 四种ICMP询问报文

    1. 回送请求和回答报文

      回送请求和回答报文主要用于测试目的主机的可达性,也可以计算发出请求到收到响应之间的时间差来估计源主机和目的主机之间的往返时延,此外通过适当的设置封装回送请求报文的数据报的TTL值还可以实现路由追踪。

    2. 时间戳请求和回答报文

    3. 掩码地址请求和回答报文

    4. 路由询问和通告报文

三、ICMP的应用

  • ICMP协议可以实现网络可达性检查,网络延迟测量、网络路由追踪、网络安全排查等方面都有重要应用。
  • 比如tracert(跟踪路由)这是一个非常实用的一个小程序,用于确定IP数据报访问目标所经过的路径,基于ICMP终点不可达和时间超过差错报告报文(超时报文)原理实现的。
  • 比如ping(因特网包探索器)我们经常用来测试网络连通性的ping命令就是基于ICMP询问报文类型中的回送请求和回答报文实现的。

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

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

相关文章

微软MFC技术运行机制

我是荔园微风,作为一名在IT界整整25年的老兵,今天总结一下微软MFC技术运行机制。 很多初学者误以为VC开发必须使用MFC,其实不一定的。MFC的使用只能是提高程序在某些情况下的开发效率,而不能替代整个Win32程序设计。我认为我们有…

python grpc使用示例

1. grpc简介 1.1 概述 gRPC是搭建分布式应用接口和客户端的框架。在 gRPC 中,客户端应用程序可以直接调用不同机器上的服务器应用程序上的方法,就像它是本地对象一样,可以更容易创建分布式应用程序和服务。与许多 RPC 系统一样,gR…

AI绘画MidJourney 酷炫艺术风格效果,总有一款你喜欢

文 / 高扬 今天六一儿童节,祝各位大朋友节日快乐。 这次以儿童为主题,看看MidJourney的绘画风格,在这里,我使用的默认V5.1版本。 图画场景是一个男孩和一个女孩在田野玩耍,对应的英文是:A boy and a girl a…

使用PyQT实现模拟表盘时钟的显示效果

代码 class clockThread(QThread):update_ui_signal pyqtSignal(str)def __init__(self, window):super(clockThread, self).__init__()# 信号绑定槽函数self.update_ui_signal.connect(self.draw_time)self.hour 0self.minute 0self.second 0self.window windowself.win…

数据结构与算法·第6章【树】

基本操作 树的相关定义 树的深度(高度):树中叶子结点所在的最大层次 森林: m m m棵互不相交的树的集合 二叉树 二叉树或为空树,或是由一个根结点加上两棵分别称为左子树和右子树的、互不交的二叉树组成。 性质 二…

JavaCV音视频开发宝典:使用JavaCV读取海康平台或海康网络摄像头sdk回调视频TS码流并解析预览图像

《JavaCV音视频开发宝典》专栏目录导航 《JavaCV音视频开发宝典》专栏介绍和目录 ​ 前言 两年前博主写了如何利用JavaCV解析各种h264裸流,《JavaCV音视频开发宝典:使用javacv读取GB28181、海康大华平台和网络摄像头sdk回调视频码流并解析预览图像》,但是随着时间变化,各…

企业邮箱如何设置邮件审核

有的时候对外给客户或合作伙伴等发送邮件需要领导审核后再发,以前都是先发给领导,领导审核以后再重新发给客户, 这样的流程太过繁琐。 新的邮件审核功能既能满足审核需求,又避免了重复发信,可以极大提高工作效率。 设…

使用VitePress静态网站生成器创建组件库文档网站并部署到GitHub

Vue3TSVite开发组件库并发布到npm 网站在线预览: Vue Amazing UI | Amazing UI Components LibraryAmazing UI 组件库https://themusecatcher.github.io/vue-amazing-ui/参考文档: VitePress 目录 一、安装依赖及配置 1、安装 vitepress 2、在 p…

想要精通算法和SQL的成长之路 - 反转链表

想要精通算法和SQL的成长之路 - 反转链表 前言一. 反转链表 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 反转链表 原题链接 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 思路如下: 我们可以通过一次遍历&#xff…

该怎么用设计测试用例测网上银行转账?

目录 前言 1、网上银行转账是怎么测的,设计一下测试用例。 回答思路: 2、测试工作的流程?缺陷状态有什么?设计测试用例有几种方法? 修改完以后,有两种处理情况: 3、在项目中找到的经典BUG是什么? 4、定期…

kali系统渗透

用kali远程ssh时,如果不能的话 按照以下方法 ┌──(root㉿kali)-[~]└─# mkdir ~/.ssh┌──(root㉿kali)-[~]└─# vim ~/.ssh/configHost *HostkeyAlgorithms ssh-rsaPubkeyAcceptedKeyTypes ssh-rsa msfconlole -q //进入马上发不显示内容,所以加…

编程实现人脸识别

1.更改url 用翔云平台下的人脸识别的API文档 把他贴到url中: 2.定义参数 (根据平台给定的这些串口接收参数来定义) key和secret在这里找: 3.指定post内容 把这部分定义成一个postString 4.字符串的拼接 sprintf函数调用的主…

使用粒子群优化算法(PSO)辨识锂电池二阶RC模型参数(附MATLAB代码)

目录 一、原理部分 二、代码详解部分 三、结果及分析 一、原理部分 PSO算法由美国学者于 1995 年提出,因其算法简单、效果良好,而在很多领域得到了广泛应用。该算法的起源是模拟鸟群的觅食过程,形成一种群体智能搜索算法。 其核心是&#…

使用Flask高效构建Web应用

1、聊聊Flask框架 Flask官方文档 Flask是Armin ronacher基于Python开发的微型Web框架,诞生于2010年,它依赖于jinja2模板和Werkzeug WSGI服务。Flask的核心简单易于扩展,它不会替你做出太多决策比如使用何种数据库或模板引擎,这些都…

抖音seo矩阵系统源码解析

抖音SEO矩阵系统源码是一种用于优化抖音视频内容的工具,可以帮助用户提高抖音视频的搜索排名和流量,从而增加视频曝光和转化率。该系统包括两部分,即数据收集和分析模块以及SEO策略和实施模块。 数据收集和分析模块主要负责从抖音平台上收集…

认识功能安全

01、什么是功能安全 1-背景简介 由于汽车的复杂性,整个行业正在致力于提供符合安全要求的零部件系统。比如,线控油门系统,当驾驶员踩下油门踏板,踏板上的传感器向控制器发送信号时,控制器会综合分析如发动机转速、车…

ERP系统实施,8个需要了解的关键绩效指标

实施ERP系统是一项复杂的、耗时的工作,但它也代表了企业重新思考其战略、目标和流程的绝佳机会。成功的ERP实施可以激发创新,改善企业的所有领域。例如,通过集中企业各部门不断增长的财务和业务数据,所有的决策者都在同一个页面上…

非煤矿山电子封条系统算法方案 opencv

非煤矿山电子封条系统算法部署方案是基于pythonopencv网络模型Ai视频图像识别技术,非煤矿山电子封条系统算法部署方案对出入井人员、人员变化及非煤矿山生产作业状态等状况,及时发现处理异常动态将自动发出警报。OpenCV的全称是Open Source Computer Vis…

亲身经历告诉你,0基础转行学Python,毕业就能15000

对生活现状的不满,对自己浑浑噩噩的厌恶,以及对互联网行业的憧憬,让我下定决心选择去黑马程序员开启转行之旅。 学科 | Python大数据开发 薪资 | 15000 时间总是在你回忆往事时才会觉得短暂,来黑马之前觉得六个月将是一段很漫长…

操作系统原理 —— 内存动态分区分配算法(二十一)

在上一个章节我们讲了内存连续分配的几种方式,有单一、固定、动态这三种,在固定、动态这种里面,操作系统会记录空闲分区表,这个表是用来记录当前空闲的内存。 那么在之后有新的进程装入内存,需要从空闲分区表中找到一…