TCP/IP第六章笔记ICMP协议

news2024/12/26 20:48:53

文章目录

    • 6.1 引言
    • 6.2 ICMP报文分组格式和类型
    • 6.3 ICMP地址掩码请求与应答
    • 6.4 ICMP时间戳请求与应答
    • 6.5 ICMP端口不可达差错
    • 6.6 ICMP的处理(4.4BSD系统下)

6.1 引言

第三章在IP选择路由时,如果一个报文最后限制转发次数用完后还传输不到目的地址,该报文就会被丢弃,并发送一个ICMP报文给源IP。

ICMP通常被认为是IP的一部分,用来传输差错报文和其他需要注意的信息。ICMP报文在IP数据报内部被传输

在这里插入图片描述

它通常被IP或者更高层协议(TCP和UDP)使用

6.2 ICMP报文分组格式和类型

在这里插入图片描述

所有报文前四个字节都是一样的,剩下字节各不相同。

  • 类型字段:可以有15个不同的值即15中不同类型选项。
  • 代码字段:某些ICMP还用代码字段进一步描述不同的条件。
  • 检验和:检验和覆盖整个ICMP报文。检验和是必须的。

ICMP的类型由类型字段和代码字段共同决定。大类上分为查询报文和差错报文,因为差错报文要进行特殊处理,所以要对两者进行区分

在这里插入图片描述

注意在对一个ICMP差错报文进行响应时永远不会生成另一份差错报文(不然就会出错再出错无限循环)。

下面各种情况都不会产生ICMP差错报文。是为了防止ICMP差错报文对广播分组带来的广播风暴。

  1. ICMP差错报文(ICMP查询报文可能会)。
  2. 目的地址是广播地址或多播地址的IP数据报。
  3. 作为链路层广播的数据报。
  4. 不是IP分片的第一片。
  5. 源地址不是单个主机的数据报。

6.3 ICMP地址掩码请求与应答

ICMP地址掩码请求用于无盘系统在引导过程中获取自己的子网掩码(3.5节)。系统广播它的ICMP请求报文(这一过程与无盘系统在引导过程中用 RARP获取IP地址是类似的)。无盘系统获取子网掩码的另一个方法是BOOTP协议

ICMP地址掩码请求与应答报文分组格式如下:

在这里插入图片描述

ICMP报文中的标识符和序列号字段由发送端任意选择设定,这些值在应答中将被返回。这样,发送端就可以把应答与请求进行匹配。


6.4 ICMP时间戳请求与应答

ICMP时间戳请求允许系统向另一个系统查询当前的时间。返回的建议值是自午夜开始计算的毫秒数,协调的统一时间( Coordinated Universal Time, UTC)(早期的参考手册认为UTC是格林尼治时间)。这种ICMP报文的好处是它提供了毫秒级的分辨率,而利用其他方法从别的主机获取的时间(如某些 Unix系统提供的rdate命令)只能提供秒级的分辨率。由于返回的时间是从午夜开始计算的,因此调用者必须通过其他方法获知当时的日期,这是它的一个缺陷。

在这里插入图片描述

请求端填写发起时间戳,然后发送报文。应答系统收到请求报文时填写接收时间戳,在发送应答时填写发送时间戳。但是,实际上,大多数的实现把后面两个字段都设成相同的值(提供三个字段的原因是可以让发送方分别计算发送请求的时间和发送应答的时间)。

我们还能计算出往返时间(rtt),它的值是收到应答时的时间值减去发送请求时的时间值。difference的值是接收时间戳值减去发起时间戳值。这些值之间的关系如图6 - 7所示。

在这里插入图片描述

如果我们相信RTT的值,并且相信RTT的一半用于请求报文的传输,另一半用于应答报文的传输,那么为了使本机时钟与查询主机的时钟一致,本机时钟需要进行调整,调整值是difference减去RTT的一半

其他获得时间的方式:

  1. 日期服务程序和时间服务程序。
  2. 网络时间协议(NTP)。广域网范围工作。
  3. 分布式时间服务(DTS)也提供计算机之间的时钟同步。广域网范围工作
  4. Unix的timed(8),用来同步局域网上的系统时钟。

6.5 ICMP端口不可达差错

是一种ICMP差错报文,即端口不可达报文,它是ICMP目的不可到达报文中的一种,以此来看一看ICMP差错报文中所附加的信息。

UDP的规则之一是,如果收到一份 UDP数据报而目的端口与某个正在使用的进程不相符,那么UDP返回一个ICMP不可达报文。可以用 TFTP来强制生成一个端口不可达报文。

注意,ICMP报文是在主机之间交换的,而不用目的端口号,而每个20字节的UDP数据报则是从一个特定端口(2924)发送到另一个特定端口( 8888)。

我们可以看到每个返回的 ICMP端口不可达报文的完整长度。这里的长度为70字节

在这里插入图片描述

ICMP的一个规则是, ICMP差错报文(参见图 6 - 3的最后一列)必须包括生成该差错报文的数据报IP首部(包含任何选项),还必须至少包括跟在该 IP首部后面的前 8个字节。在我们的例子中,跟在IP首部后面的前8个字节包含UDP的首部。

一个重要的事实是包含在 UDP首部中的内容是源端口号和目的端口号。就是由于目的端口号(8888)才导致产生了 ICMP端口不可达的差错报文。接收 ICMP的系统可以根据源端口号(2924)来把差错报文与某个特定的用户进程相关联(在本例中是 TFTP客户程序)。

导致差错的数据报中的 IP首部要被送回的原因是因为 IP首部中包含了协议字段,使得ICMP可以知道如何解释后面的 8个字节(在本例中是 UDP首部)。如果我们来查看 TCP首部,可以发现源端口和目的端口被包含在 TCP首部的前8个字节中。


6.6 ICMP的处理(4.4BSD系统下)

由于ICMP覆盖的范围很广,从致命差错到信息差错,因此即使在一个给定的系统实现中,对每个ICMP报文的处理都是不相同的。

在这里插入图片描述

如果最后一列标明是“内核”,那么ICMP就由内核来处理。如果最后一列指明是“用户进程”,那么报文就被传送到所有在内核中登记的用户进程,以读取收到的 ICMP报文。如果不存在任何这样的用户进程,那么报文就悄悄地被丢弃(这些用户进程还会收到所有其他类型的IC MP报文的拷贝,虽然它们应该由内核来处理,当然用户进程只有在内核处理以后才能收到这些报文)。有一些报文完全被忽略。最后,如果最后一列标明的是引号内的一串字符,那么它就是对应的 Unix差错。

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

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

相关文章

【高并发】- 不可不知道的RPC框架服务通信

前言 前面章节讲解了高并发系统中相关指标、为什么要学习高并发设计思想、高并发系统中每个环节的流量处理等思想。本章节讲解服务通信,来帮助大家更好理解系统间通信过程。 1 RPC框架介绍 RPC(Remote Procedure Call,远程过程调用&#xff0…

Win10家庭版和Win10专业版有什么区别?

win10操作系统拥有7个不同的版本,其中win10家庭版和专业版被人们广泛的应用,很多用户都不知道如何区分win10家庭版和专业版,接下来把win10家庭版和专业版有什么不同的地方告诉大家。我们一起来看看吧。 win10家庭版和专业版的区别&#xff1a…

java服务框架高级之微服务保护 Sentinel 限制规则,流控模式,流控效果

初识Sentinel 雪崩问题: 解决雪崩问题的常见方式有四种: 1.超时处理:设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待 2.舱壁模式:限定每个业务能使用的线程数,避免耗尽…

2023外企还香吗?2022届计算机谈谈入职外企的感受和经历

互联网寒冬,大规模“毕业”的环境下,2023年外企又香了吗? 大家好,我是2022届计算机应届毕业生,毕业入职了一家大型非互联网外企,2022年由于只上了半年班,所以只有半年工资,总收入在1…

【JavaScript速成之路】一文带你初识JavaScript

📃个人主页:「小杨」的csdn博客 🔥系列专栏:【JavaScript速成之路】 🐳希望大家多多支持🥰一起进步呀! 文章目录前言1,JavaScript1.1,JavaScript概述1.2,Java…

【人工智能学习笔记】人工智能里的数学1——概述

与软件开发相比,人工智能领域需要大量数学知识。主要涉及微积分、线性代数、概率论和最优化。本文主要介绍人工智能里用到了哪些数学知识,试图向您提供一个目录式的、导读式的概述。后期计划一一展开讲解。本文作为我学习人工智能的笔记,主要…

C++继承(上)

我们知道,面向对象有三大特性:封装,继承,多态。封装前面已经说过,这篇文章主要说说继承。 文章目录1.继承的概念及定义1.1继承的概念1.2 继承定义1.2.1定义格式1.2.2继承关系和访问限定符2. 基类和派生类对象赋值转换…

vue.js客服系统实时聊天项目开发(十四)点击加载展示历史消息列表

当访客一进去聊天界面以后,需要获取一下历史消息展示到界面,并且需要能分页的原理展示 在顶部有一个加载更多记录的按钮,点击就能按分页获取数据 //展示历史消息记录getHistoryList(){var _thisthis;let pagesize5;this.$axios.get(this.ApiH…

Python | 数据类型之列表

知识目录一、定义和遍历1.1 定义列表1.2 打印和截取列表1.3 遍历列表二、增删改查2.1 更新和删除列表2.3 脚本操作符 * in三、函数和方法3.1 函数3.2 方法列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。列表的数据项不需要具有相同的类型…

springboot-rocketmq整合NOT_CONSUME_YET问题处理

一、测试流程1.添加POM<dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.1</version></dependency>2.配置属性参数# 默认的消息组 rocketmq.producer.…

微信小程序项目初试总结

微信小程序项目初试总结准备工作注册小程序账号获取AppID下载 微信开发者工具下载 HBuilderX安装 scss/sass 编译HBuilderX 的调试新建项目把项目运行到微信开发者工具使用 Git 管理项目把项目托管到码云模块制作通用tabBar首页分类搜索商品列表商品详情加入购物车购物车页面登…

【手把手教你C#如何使用SqlSugar操作MySQL数据库】三 SqlSugar使用案例

SqlSugar 连接数据库、创建数据表、增删改查用法1.SqlSugar 连接MySQL数据库1.创建数据库2.创建库中的数据表3.数据的插入4.数据的查询5.数据更新6.数据保存7.数据删除2.整体案例脚本代码1.SqlSugar 连接MySQL数据库 1.创建数据库 using SqlSugar; public class DB : Singlet…

Word数据恢复,简单几个方法恢复未保存的Word文档!

日常生活中&#xff0c;我们经常会用到Word文档&#xff0c;里面记录着我们很多重要内容。当遇到电脑死机、没电关机&#xff0c;或者是编辑文档的软件突然崩溃&#xff0c;我们又没有及时保存Word文档里面的数据&#xff0c;这时该怎么办&#xff1f;Word数据恢复&#xff0c;…

[LeetCode]2319. 判断矩阵是否是一个 X 矩阵

如果一个正方形矩阵满足下述 全部 条件&#xff0c;则称之为一个 X 矩阵 &#xff1a; 矩阵对角线上的所有元素都 不是 0矩阵中所有其他元素都是 0 给你一个大小为 n x n 的二维整数数组 grid &#xff0c;表示一个正方形矩阵。如果 grid 是一个 X 矩阵 &#xff0c;返回 true…

VX拜年红包测试用例设计分享

功能测试 1.红包最多可以输入的金额&#xff1b;2.红包一次性可以发送的最大个数3.在输入红包的钱数和个数时只能输入数字4.当余额不足时&#xff0c;红包发送失败5.发送的红包自己是否可以领取6.发送的红包别人是否可以领取7.红包超过 24 小时是否可以领取8.红包超时未领取&a…

刑啊,为什么不刑

前言 你还在为使用浏览器的时候&#xff0c;忘记密码而烦恼吗&#xff1f;今天要分享的不为人知的小技巧&#xff0c;利用前端技术原理来帮助你找回原密码。 在我们使用各种网站登录时&#xff0c;总会勾选上记住密码这一项。 但长时间依赖记住密码&#xff0c;难免有遗忘的情…

CVE-2022-30331-TigerGraph 3.6.0 UDF 功能漏洞分析

TigerGraph UDF 漏洞&#xff1a;详细信息和示例 CVE 参考地址&#xff1a;http://www.cnnvd.org.cn/web/xxk/ldxqById.tag?CNNVDCNNVD-202209-215 TigerGraph 图数据库为用户提供了远程上传任意 C 源代码以创建用户定义函数的工具。该代码会自动编译并安装到敏感的系统组件中…

涨薪【20k】的python接口自动化系列文章(一)--什么是接口、接口优势、类型(详解)

简介 经常听别人说接口测试&#xff0c;接口测试自动化&#xff0c;但是你对接口&#xff0c;有多少了解和认识&#xff0c;知道什么是接口吗&#xff1f;它是用来做什么的&#xff0c;测试时候要注意什么&#xff1f;坦白的说&#xff0c;笔者之前也不是很清楚。接下来先看一下…

go 实现抓包 ,盗取浏览器接口信息|反反爬虫

项目地址 https://github.com/kxg3030/shermie-proxy 安装方法 如果有现有的项目可以可安装&#xff1a; go get github.com/kxg3030/shermie-proxy 尝试源码 git clone gitgithub.com:kxg3030/shermie-proxy.git 运行代码 克隆项目下来之后 安装依赖包 go mod tidy 运行程序…

详解注意力机制和Transformer

本文的学习路线&#xff1a; &#x1f4cd; Attention 从生物学的角度引入到计算机视角&#xff0c;介绍了什么是Attention ▶️介绍Encoder-Decoder框架 (目前大部分Attention Model都是依附于该框架实现)▶️ 介绍了Attention模型中的基础概念查询、键和值 ▶️ 通过讲解Nad…