【网络层】网际控制报文协议ICMP(湖科大慕课自学笔记)

网际控制报文协议ICMP

1:网际控制报文协议ICMP基本概述

ICMP报文被封装在IP数据报中发送

1:ICMP报文格式

ICMP报文作为IP数据报的数据载荷,IP协议为其添加一个首部使之成为IP数据报

2:ICMP报文类型

ICMP报文分为两大类,一类是差错报告报文,一类是询问报文

这两类报文的功能如下:

2:ICMP差错报告报文

常见的ICMP差错报告报文有以下五种

1:终点不可达

注释:上图是发送终点不可达报文,不是发送终点可达报文,表述有误

简单举例:

主机H1给H2发送IP数据报,H1会将IP数据报发送给路由器R1,由R1帮其转发,若R1的路由表中没有与网络N3匹配的路由条目,例如H2的特定主机路由,N3的路由,默认路由,则R1就不知道如何转发该数据报了,只能将其丢弃,并向发送该数据报的源主机H1发送ICMP差错报告报文,具体类型为终点不可达

2:源点抑制

简单举例:

还是主机H1给H2发送IP数据报,当该数据报传送到路由器R2时,由于R2拥塞,也就是R2比较繁忙,R2根据自己的丢包策略丢弃了该IP数据报,并向发送该数据报的源主机H1发送ICMP差错报告报文,具体类型为源点抑制,同理,主机也有可能出现因为拥塞而丢弃IP数据报,并发送ICMP差错报告报文的情况(例子:服务器拒绝服务)

3:时间超过(超时)

简单举例:

还是主机H1给H2发送IP数据报,该IP数据报从H1发出时,其首部中生存时间TTL字段的值被设置为2,当该数据报传送到路由器R1后,R1将其TTL字段的值减去1,结果是1这表明该数据报的生存时间还没有结束,R1将其转发出去,当该数据报传送到路由器R2后R2将其TTL的字段值减去1,结果是0,这表明该数据报的生存时间结束了,R2丢弃该数据报,并向发送该数据报的源主机H1发送ICMP差错报告报文,具体类型为时间超过

其他情况:

4:参数问题

简单举例:

还是主机H1给H2发送IP数据报,但是该数据报在从H1到路由器R1的传送过程中受到了干扰,其首部出现了误码,当该数据包传送到R1后,R1检测到该数据报的首部出错,于是丢弃该数据报,并向发送该数据报的源主机H1发送ICMP差错报告报文,具体类型为参数问题

5:改变路由(重定向)

简单举例:

假设给主机H1指定的默认网关是路由器R1,则H1要发送到网络N2的IP数据报,都会传送给R1,由其帮忙转发,但是久而久之R1发现发往N2的数据报的最佳路由不应该经过R1而是应该经过R4时,就由改变路由报文把这个情况告诉H1,于是H1就在自己的路由表中添加一个项目,即到达N2应该经过R4而不是默认网关R1,之后H1要发往N2的IP数据报都会传送给R4,由其帮忙转发

特殊情况:

练习1:

3:ICMP询问报文

常用的ICMP询问报文有以下两种:

回送请求和回答报文

时间戳请求和回答报文

这两类报文的功能如下:

1:ICMP的两个典型应用

分组网间探测与跟踪路由

1:分组网间探测PING

简单举例:

使用windows命令行工具PING测试我的主机与中国互联网络信息中心官方网站服务器的连通性,主机总共发送了四个ICMP回送请求报文,并且成功收到了相应的四个ICMP回送回答报文,由于往返的ICMP报文上都有时间戳,因此很容易得出往返时间

注释:有些主机或服务器为了防止恶意攻击,并不会理睬外界发来的这种报文

2:跟踪路由traceroute

简单举例:

图中的每一行有三个时间这是因为针对路径中的每一个路由器,要进行三次测试,时间中出现*号表示在超时时间内,没有收到路由器发来的响应报文,出现这种情况的原因有多种,例如路由器对IP数据报出现差错的情况进行策略性的差错报告,例如10个同样的差错只报告一个,而不是针对每一个同样的错误,都发送一个相应的差错报告,否则容易受到恶意攻击

接下来我们以windows版本为例,看看ICMP是如何实现跟踪路由的功能

如下图所示:

假设主机H1想知道到达主机H2需要经过那些路由器,于是H1给H2发送ICMP回送请求报文,该报文被封装在IP数据报中进行发送,IP数据报首部中,生存时间TTL的值被设置为1,IP数据报到达路由器R1后,其TTL的字段的值被减去1,结果为0,因此R1丢弃该数据报,并向发送该数据报的源主机H1发送封装有ICMP差错报告报文的IP数据报,ICMP差错报告报文类型为时间超过,这样,H1就知道了,到达H2路径中的第一个路由器的IP地址,如下图所示:

H1继续发送下一个封装有ICMP回送请求报文的IP数据报,IP数据报首部中,生存时间TTL的值被设置为2,经过路由器R1的转发后,该数据报TTL的字段的值被减去1,该数据报到达R2后,数据报TTL的字段的值再被减去1,结果为0,因此R2丢弃该数据报,并向发送该数据报的源主机H1发送封装有ICMP差错报告报文的IP数据报,ICMP差错报告报文类型为时间超过,这样,H1就知道了,到达H2路径中的第二个路由器的IP地址

如下图所示:

后面的以此类推,知道到达目的主机H2,并发送ICMP回送回答报文的IP数据报,这样H1就知道已经跟踪到路径中的最后一站

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

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

相关文章

NGUI基础-三大基础组件之Event System(Uicameras)

目录 主要作用 相关参数 (建议:红色是重点,黑色的了解即可) Event Type Events go to Process Events in Event Mask​编辑 Debug Command Click Allow Multi Touch Auto Hide Cursor Sticky ToolTip/Long press ToolTip/ToolTip…

vue实现点击复制功能方法封装demo。

源码如下 copyTextToClipboard(text, that) { const textArea document.createElement("textarea"); textArea.value text; document.body.appendChild(textArea); 在子节点末尾添加元素 textArea.select(); select方法讲解可以了解一下 JavaScri…

工业协议转换网关:打破通信壁垒,实现设备互联

在工业自动化领域,各种设备和系统间的通信协议不尽相同,这给不同设备间的集成和数据交互带来了挑战。工业协议转换网关作为一种解决这一问题的关键设备,能够实现不同协议间的转换和数据传输,打破通信壁垒,提高设备的协…

【PostgreSQL】模式Schema

PostgreSQL 数据库集群包含一个或多个命名数据库。角色和一些其他对象类型在整个集群中共享。与服务器的客户端连接只能访问单个数据库中的数据,该数据库在连接请求中指定。 数据库包含一个或多个命名schema,而这些schema又包含表。schema还包含其他类型…

Java 基础知识点1 (含面试题)

本次Java 知识点主要是关于SE的相关基础,同时也包含了数据结构中的一些API,例如Set,List,Map等,最后也附上了相关重要的面试题,可供大家学习与参考! 目录 重要知识点数据结构API面试题 重要知识点 Java 是一门面向对象…

税法相关的基础知识

文章目录 税法原则1.税法基本原则2.税法适用原则3.税收收入划分 来和大家聊聊税法相关的基础知识 税法原则 1.税法基本原则 2.税法适用原则 3.税收收入划分

Flume基础知识(十):Flume 聚合实战

1)案例需求: hadoop100上的 Flume-1 监控文件/opt/module/group.log, hadoop101上的 Flume-2 监控某一个端口的数据流, Flume-1 与 Flume-2 将数据发送给 hadoop102 上的 Flume-3,Flume-3 将最终数据打印 到控制台。…

数据库事务的特性

数据库事务具有 ACID 特性,其中 ACID 是指原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。这些特性是为了确保数据库在事务处理中的可…

Android 13.0修改recovery 菜单项字体大小

1.概述 在13.0的系统rom定制化开发中,在系统进入recovery模式后,界面会g_menu_actions 菜单选项和 提示文字,而这些文字的大小不像上层一样是通过设置属性来表示大小的 而它确是通过字体png图片的大小来计算文字的宽和高的,然后可以修改字体大小,接下来就实现菜单项字体大…

RocketMQ详细介绍及核心问题解释(很全)

1. RocketMq是什么 一个纯Java、分布式队列模型的消息中间件,具有高可用、高可靠、高实时、低延迟的特点。(记住这句就行了) 2. RocketMq有什么功能 1、业务解耦:这也是发布订阅的消息模型。生产者发送指令到MQ中,然…

python中parsel模块的css解析

一、爬虫页面分类 1.想要爬取的内容全部在标签中,可以使用xpath去进行解析如下图 2.想要爬取的内容呈现json的数据特征,用.json()转换为字典格式 3.页面不规则,标签中包含大括号,如下面想要获取键值内容怎么做,先用re正…

Binius:基于binary fields的SNARKs(Part 2)

1. 引言 前序博客有: Binius:基于binary fields的SNARKs(Part 1)Binius:助力ZK行业发展 本文重点关注: 1)concatenated codes:可扩展对small fields的多项式承诺方案2&#xff0…

Docker学习与应用(六)-Docker网络

1、Docker网络 Docker有多种网络模式可以选择,可以根据应用场景和需求选择合适的网络模式。 桥接模式(Bridge Mode):默认情况下,Docker使用桥接模式创建一个虚拟网络,所有容器会连接到这个虚拟网络中。每个…

回家用go?还是go to?

语法 go 副词 go to 名词 home比较特殊 前面无修饰词就是副词 前面有修饰词就是名词 案例

【MATLAB第88期】基于MATLAB的6种神经网络(ANN、FFNN、CFNN、RNN、GRNN、PNN)多分类预测模型对比含交叉验证

【MATLAB第88期】基于MATLAB的6种神经网络(ANN、FFNN、CFNN、RNN、GRNN、PNN)多分类预测模型对比含交叉验证 前言 本文介绍六种类型的神经网络分类预测模型 1.模型选择 前馈神经网络 (FFNN) 人工神经网络 (ANN) 级联前向神经网络 (CFNN) 循环神经网…

消息队列-什么是MQ?何时使用MQ?怎么选择MQ?

什么是MQ? MessageQueue:就是消息 队列,任务队列,指令 队列。 功能:应用程序之间(生产者与消费者)的通信方式。 使用场景 从下面这个场景来感受MQ 的诞生 如果我们有很多任务需要处理,任务…

Logstash相关问题及答案(2024)

1、什么是Logstash? Logstash是Elastic Stack(曾被称为ELK Stack,即Elasticsearch、Logstash、Kibana三者的组合)的一部分,是一个开源的服务器端数据处理管道,可以同时从多个来源采集数据,转换数…

Mac打包Unix可执行文件为pkg

Mac打包Unix可执行文件为pkg 方式一:通过packages页面打包 1.下载packages app Distribution:自定义化更高,包括修改安装页面的内容提示 我这里主要演示Distribution模式的项目:通过unix可执行文件postinstall.sh脚本实现通过ma…

听GPT 讲Rust源代码--compiler(31)

File: rust/compiler/rustc_ast_passes/src/node_count.rs 在Rust源代码的rust/compiler/rustc_ast_passes/src/node_count.rs文件中,它定义了Rust编译器中的AST节点计数器。该文件的作用是统计不同类型的AST节点在程序中的数量,以便在优化和调试过程中能…

【Python】Excel多sheet逐行合并为一个sheet

我有一个excel,内含多个sheet,我要将不同sheet合并在一个sheet中,依然保存在这个excel文件中,命名为合并,要求列名依次对应,逐行合并,请为我写出python代码 import pandas as pd# 读取 Excel 文…