【网络层】网际控制报文协议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.mfbz.cn/a/299392.html

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

相关文章

FlinkAPI开发之自定义函数UDF

案例用到的测试数据请参考文章: Flink自定义Source模拟数据流 原文链接:https://blog.csdn.net/m0_52606060/article/details/135436048 概述 用户自定义函数(user-defined function,UDF),即用户可以根据…

论文浅尝 | 以词-词关系进行分类的统一命名实体识别

笔记整理:曹旭东,东南大学硕士,研究方向为知识图谱构建、自然语言处理 链接:https://arxiv.org/abs/2112.10070 1. 动机 在以前的工作中,命名实体识别(NER)涉及的主要问题有三种类型&#xff0c…

每日一题——LeetCode1051.高度检查器

方法一 sort排序: 创建一个元素和heights一模一样的expect数组 ,将expect数组从小到大进行排序,比较heights和expect相同位置不同的元素个数 var heightChecker function(heights) {var expect [],count0for(const n of heights){expect.…

1、Excel工作场景和知识点总结

参考: 戴师兄–戴你玩转数据分析 Excel发挥战斗力的场景 地量级数据的存储 我们日常所用的各种数据表格,基本都以excel的.xlsx或者.xls格式进行存储。并且因为大家电脑上都有excel,这就使excel的通用性很高(我用excel做好一个表发给你&#x…

消息队列-RocketMQ-概览与搭建

RocketMQ 领域模型 RockeMQ整体结构预览 RocketMQ 中的一些概念 Topic:主题,可以理解为类别、分类的概念 MessageQueue:消息队列,存储数据的一个容器(队列索引数据),默认每个 Topic 下有 4 个队…

登录验证

JWT Json Web Token 定义了一种简洁的,自包含的格式,用于在通信双方以json数据格式安全的传输信息。由于数字签名的存在,这些信息是可靠的 组成 第一部分 header 头:记录令牌类型,签名算法等 第二部分 Payload 有效载荷…

servlet+jdbc+jsp实现登录界面的验证(基于MVC思想)

一、MVC的概念 MVC是模型(Model)和视图(View)以及控制器(Controller)的简写,是一种将数据、界面显示和业务 逻辑进行分离的组织方式,这样在改进界面及用户交互时,不需要重新编写业务逻辑,从而提高了 代码的可维护性。 M&#xf…

基于JavaWeb+SSM+Vue基于微信小程序的消防隐患在线举报系统的设计与实现

基于JavaWebSSMVue基于微信小程序的消防隐患在线举报系统的设计与实现 源码获取入口KaiTi 报告Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 KaiTi 报告 1.1 题目背景 随着信息化飞速发展,互联网不…

RabbitMQ(八)消息的序列化

目录 一、为什么需要消息序列化?二、常用的消息序列化方式1)Java原生序列化(默认)2)JSON格式3)Protobuf 格式4)Avro 格式5)MessagePack 格式 三、总结 RabbitMQ 是一个强大的消息中间…

网络层协议及IP编址

0x00 前言 本节为网络层协议及IP编址内容 IP地址的范围:0.0.0.0-255.255.255.255 IP分为网络位以及主机位。子网划分就是向主机位借位。 网络层协议 IPICMP(internet Control message protocol)IPX IP协议的作用 为网络层的设备提供逻…

程序语言相关知识——偏向Eigen矩阵

1 查看 Eigen库表示的矩阵 方法 1.1 列矩阵x在监视中,这样查看,数值右侧的圈圈 可用于更新数值 随程序 1.2 比较全的方法:来自于知乎:https://zhuanlan.zhihu.com/p/625334009?utm_id0 1.3 eigen的用法:https://ww…

linux高级管理——Squid代理

一、squid服务基础: 1.1缓存代理的概述: 代理的工作机制 当客户机通过代理来请求Web页面时.指定的代理服务器会先检查自己的缓存,如果缓存中已经有客户机需要的页面,则直接将缓存中的页面内容反馈给客户机:如果缓存中…

整合事务,名词,概念

1、MySQL是单进程多线程(而Oracle等是多进程),也就是说MySQL实例在系 统上表现就是一个服务进程,即进程,(通过多种方法可以创建多实例,再安装一个端口号不同的mysql,或者通过workben…

滞回比较器(施密特触发器)在软件中的应用-电池电压显示

1、单限比较器和滞回比较器的区别 在单限比较器中,输入电压在阈值电压附近的任何微小变化,都会引起输出电压的跃变。不管这种微小变化是来源于输入电压还是来源于外部干扰。因此,虽然单限比较器很灵敏,但是抗干扰能力差。在单限比…

学习Redis缓存

学习Redis缓存 NoSQL和SQL的区别缓存缓存作用缓存成本添加Redis缓存 Redis特征Redis中数据结构Redis通用命令String类型Key的层级格式Hash类型Redis的Java客户端 NoSQL和SQL的区别 缓存 缓存就是数据交换的缓冲区,是存储数据的临时地方,一般读写性比较高…

10款有趣的前端源码分享(附效果图及在线演示)

分享10款非常有趣的前端特效源码 其中包含css动画特效、js原生特效、svg特效以及小游戏等 下面我会给出特效样式图或演示效果图 但你也可以点击在线预览查看源码的最终展示效果及下载源码资源 自毁按钮动画特效 自毁按钮动画特效 点击打开盒子可以点击自毁按钮 进而会出现自毁…

使用Python+selenium3.0实现第一个自动化测试脚本

这篇文章主要介绍了使用Pythonselenium实现第一个自动化测试脚本,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 最近在学web自动化,记录一下学习过程。…

Linux驱动学习—中断

1、中断基础概念 1.1 什么是中断 CPU在正常运行期间&#xff0c;由外部或者内部引起的时间&#xff0c;让CPU停下当前正在运行的程序&#xff0c;转而去执行触发他的中断所对应的程序&#xff0c;这就是中断。 响应中断的过程&#xff1a; <1>中断请求 <2>中断…

Spring Cloud之OpenFeign异常处理

简易原理图 原理基于请求头传递错误消息&#xff0c;利用aop和全局异常拦截机制实现。 服务提供者 远程调用本地方法b&#xff0c;throw异常出来FeignExceptionAspect AOP拦截处理异常到请求头中&#xff0c;继续throwGlobalExceptionHandler处理&#xff0c;返回响应Respons…