4.4 网际控制报文协议ICMP

 

思维导图: 

4.4 网际控制报文协议ICMP - 笔记

---

**定义**:
- 网际控制报文协议ICMP(Internet Control Message Protocol)是根据[RFC 792]定义的一种协议。它的主要功能是为了提高IP数据报的转发效率和确保交付的成功率。

**主要功能**:
1. **差错报告**: ICMP允许主机或路由器报告网络中发生的差错情况。
2. **异常情况的报告**: 它不仅限于差错报告,还提供有关异常情况的其他相关信息。

**ICMP与IP的关系**:
- 虽然从形式上看,ICMP报文装在IP数据报中并作为其数据部分,可能会被误解为高层协议。但实际上,ICMP是IP层的协议。当发送ICMP报文时,它作为IP数据报的数据部分,加上数据报的首部后,组成完整的IP数据报发送出去。

**ICMP报文格式**:
- 参见图4-27,ICMP报文的前4个字节是统一格式,包括:
  1. **类型**: 指明ICMP报文的类型。
  2. **代码**: 提供与类型相关的更多信息。
  3. **检验和**: 用于检测报文在传输过程中的任何更改。
  
- ICMP报文后面的数据部分长度会根据其类型而变化。

图4-27为我们提供了ICMP报文的视觉结构,可以清晰地看到它的首部和数据部分是如何组合成IP数据报的。

---

4.4.1 ICMP报文的种类 - 笔记

---

**概览**:

- ICMP报文大致分为两大类:**ICMP差错报告报文**和**ICMP询问报文**。

**统一格式**:

- ICMP报文的前4个字节采用统一格式。
    - 字段包括:类型、代码和检验和。
    - 这4个字节的内容与ICMP的具体类型有关。
    - 数据字段的长度与ICMP的具体类型有关。

**常用的ICMP报文类型 (表4-8)**:

1. **差错报告报文**:
    - **终点不可达**: 当路由器或主机无法交付数据报时,会向发送方返回此报文。
    - **时间超过**: 当路由器接收到生存时间为零的数据报或目的地在指定时间内未完整接收数据报时,会返回此报文。
    - **参数问题**: 如果接收到的数据报头中存在异常字段值,则返回此报文。
    - **改变路由(Redirect)**: 用于指示主机改变初始的路由方向。

2. **询问报文**:
    - **回送(Echo)请求或回答**: 用于测试网络连接的可达性。
    - **时间戳(Timestamp)请求或回答**: 请求或回答从指定日期和时间到现在的时间。

**注意事项**:

- ICMP标准在不断更新。有些报文如“信息请求与回答报文”、“掩码请求与回答报文”、“路由器请求与通告报文”和“源点抑制报文”在[RFC 6633]中已被移除。

- ICMP报文的**代码字段**用于进一步区分某种类型中的不同情况。

- ICMP报文的**检验和字段**检查整个ICMP报文的完整性,与IP数据报首部的检验和不同,IP数据报首部的检验和不涉及IP数据内容。

---

4.4.2 ICMP的使用与特点 - 笔记

---

**ICMP的作用**:

- **改变路由 (重定向)**: 
    - 路由器可以通过重定向报文告诉主机更好的路由选择。
    - 主机开始工作时,常设默认路由器IP地址,所有数据报均先传至默认路由器。
    - 默认路由器根据与其他路由器交换的路由信息,知道各目的网络的最佳路由。
    - 若默认路由器判定某数据报的最佳路由不经过自己,会通知源主机更改路由,从而提高网络效率。

**ICMP差错报告报文的数据字段**:

- 所有ICMP差错报告报文的数据字段具有同样的格式。
    - 提取接收到进行差错报告的IP数据报的首部和数据字段的前8个字节。
    - 前8个字节提取是为了获得运输层的端口号及发送序号。
    - 这些信息对通知高层协议很重要,如TCP或UDP端口号、TCP的发送序号。
    - 整个ICMP报文作为IP数据报的数据字段发送给源点。

**不应发送ICMP差错报告报文的情况**:

- 对已发送ICMP差错报告报文的数据报,不再发送。
- 对分片的后续数据报片,不发送。
- 对具有多播地址或特定地址(如127.0.0.0或0.0.0.0)的数据报,不发送。

**常用的ICMP询问报文**:

1. **回送请求和回答**:
    - ICMP回送请求由主机或路由器发给特定主机。
    - 收到的主机需回发ICMP回送回答报文。
    - 主要用于测试目标站可达性及状态了解。

2. **时间戳请求和回答**:
    - 请求某主机或路由器提供当前日期和时间。
    - ICMP时间戳回答报文含32位字段,表示从1900年1月1日起至现在的秒数。
    - 用于时钟同步和时间测量。

---

 4.4.2 ICMP的应用举例

**1. PING:** 
- **定义:** PING (Packet InterNet Groper) 是 ICMP 的一个重要应用,主要用于测试两台主机之间的连通性。
- **工作机制:** PING 使用 ICMP 的回送请求与回送回答报文。这是一个应用层直接使用网络层 ICMP 的例子,不通过运输层的 TCP 或 UDP。
- **如何使用:** 在 Windows 操作系统中,用户可以在接入互联网后打开 MS DOS (点击“开始”, 点击“运行”, 再键入“cmd”)。在提示符后键入“ping hostname”(其中的 hostname 是要测试连通性的主机名或其 IP 地址)。
- **示例:** 图4-29 描述了从南京的一台 PC 到新浪网的邮件服务器 mail.sina.com.cn 的连通性测试结果。结果显示了发送的、接收的、丢失的分组数和往返时间。

**2. Traceroute:** 
- **定义:** Traceroute 是用于跟踪数据包从源点到终点的路径的工具。在 UNIX 系统中叫做 traceroute,而在 Windows 中是 tracert。
- **工作机制:** 
  - Traceroute 发送一系列的 IP 数据报,其中封装的是无法交付的 UDP 用户数据报。
  - 数据报的生存时间 (TTL) 从1开始并逐渐增加。当数据报到达一个路由器,该路由器会减少TTL。当TTL等于零时,路由器会丢弃数据报并向源主机发送一个ICMP时间超过差错报告报文。
  - 源主机继续发送数据报并逐渐增加TTL值,直到达到目的主机。
- **示例:** 图4-30 展示了从南京的一个 PC 向新浪网的邮件服务器 mail.sina.com.cn 发送的 tracert 命令的结果。每行显示三次往返时间,代表了对于每个 TTL 值,源主机发送三次相同的 IP 数据报。

**注意点:**
- 从原则上说,数据包经过的路由器越多,所需时间越多。但实际上由于网络的拥塞程度随时都在变,有时候可能会出现经过更多的路由器但时间更短的情况。
- 无法交付的UDP用户数据报使用了非法的端口号。

--- 

总结:

4.4 网际控制报文协议 ICMP

**重点:**

1. **定义:** ICMP (Internet Control Message Protocol) 是 IP 协议的一个重要补充,主要用于IP主机或路由器间的错误报告和查询。
 
2. **功能:** 主要包括:
   - 错误报告:例如,目的地不可达、时间超过等。
   - 查询:如回送请求和回送应答,常用于诊断网络问题。

3. **ICMP 报文格式:** 主要由类型、代码和校验和字段组成。不同的类型和代码值表示不同的错误或查询类型。

4. **应用:** 如 PING 和 Traceroute,都是利用ICMP报文进行网络诊断。

**难点:**

1. **ICMP 与 IP 的关系:** ICMP 是为 IP 提供必要的错误报告和诊断功能的,但它本身也是基于 IP 工作的。理解它们之间的这种关系可能初学时有些复杂。

2. **理解不同的 ICMP 报文类型:** 由于 ICMP 有多种报文类型和代码,对于初学者来说,区分和理解这些报文的具体用途和工作原理可能是一个挑战。

3. **Traceroute 的工作原理:** 了解如何通过修改 TTL (生存时间) 值来跟踪数据包的路径,并理解返回的 ICMP 错误消息与路径跟踪的关系。

**易错点:**

1. **混淆 ICMP 与 IP:** 由于 ICMP 是基于 IP 的,初学者可能会混淆它们的功能和工作方式。

2. **PING 与 ICMP 的关系:** 可能错误地认为 PING 是一个协议,而不是一个使用 ICMP 的工具。

3. **误解 ICMP 错误报告:** 当接收到 ICMP 错误报告时,可能错误地认为这是一个致命错误,而实际上它只是提供了关于网络问题的信息。

4. **TTL 和 Traceroute:** 在使用 Traceroute 时,可能不理解为什么要逐渐增加 TTL 值,以及这与 ICMP 错误报告之间的关系。

总的来说,ICMP 是一个强大的工具,用于网络诊断和错误报告。理解其基础知识和应用是网络学习的重要部分。

 

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

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

相关文章

阿里云starrocks监控告发至钉钉群

背景:新入职一家公司,现场没有对sr的进行监控,根据开发的需求编写了一个python脚本。 脚本逻辑:抓取sr的be/fe/routine load状态信息,判读是否触发告警,若满足告警条件,则发送告警信息到钉钉群…

二维码智慧门牌管理系统:确保数据准确,强制校验GPS信号强度

文章目录 前言一、数据采集多种方式二、提高工作效率与管理效率 前言 在快速发展的科技时代,我们推出了一款最新的门牌系统解决方案——二维码智慧门牌。这款门牌不仅具备高效的管理功能,还为入口管理提供全新的智慧化解决方案。 一、数据采集多种方式 …

【Arduino TFT】 记录使用DMA优化TFT屏帧率

忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-10-18 ❤️❤️ 本篇更新记录 2023-10-18 ❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝&#x1f64…

【马蹄集】—— 概率论专题

概率论专题 目录 MT2226 抽奖概率MT2227 饿饿!饭饭!MT2228 甜甜花的研究MT2229 赌石MT2230 square MT2226 抽奖概率 难度:黄金    时间限制:1秒    占用内存:128M 题目描述 小码哥正在进行抽奖,箱子里有…

Transformer模型 | Transformer模型描述

谷歌推出的BERT模型在11项NLP任务中夺得SOTA结果,引爆了整个NLP界。而BERT取得成功的一个关键因素是Transformer的强大作用。谷歌的Transformer模型最早是用于机器翻译任务,当时达到了SOTA效果。Transformer改进了RNN最被人诟病的训练慢的缺点,利用self-attention机制实现快…

身份证二要素核验API:提高身份验证的便捷性与安全性

引言 随着数字化时代的不断发展,身份验证变得愈发重要。在互联网上,身份验证是保护用户隐私和数据安全的关键环节。为了满足这一需求,身份证二要素核验API应运而生,成为提高身份验证的便捷性与安全性的得力工具。 身份验证的重要…

大数据Hadoop之——部署hadoop+hive+Mysql环境(window11)

一、安装JDK8 【温馨提示】对应后面安装的hadoop和hive版本,这里使用jdk8,这里不要用其他jdk了,可能会出现一些其他问题。 1)JDK下载地址 Java Downloads | Oracle 按正常下载是需要先登录的,这里提供一个不用登录下载…

GLEIF携手TrustAsia,共促数字邮件证书的信任与透明度升级

TrustAsia首次发布嵌入LEI的S/MIME证书,用于验证法定实体相关的电子邮件账户的真实与完整性 2023年10月,全球法人识别编码基金会(GLEIF)与证书颁发机构(CA)TrustAsia通力合作,双方就促进LEI在数…

vscode使用

vscode 快捷键1、ctrl f 文件内搜索2、ctrlp 快速打开最近打开的文件3、ctrlshiltn 打开新的编辑器窗口4、ctrlshiftw 关闭编辑器5、ctrlhome 跳转到页头6、ctrlend 跳转到页尾 插件1、Markdown Preview 参考文章 https://zhuanlan.zhihu.com/p/113222681?utm_sourcecom.tenc…

米哈游、复旦发布,具备感知、大脑、行动的大语言模型“智能体”

ChatGPT等大语言模型展示了前所未有的创造能力,但距AGI(通用人工智能)还有很大的距离,缺少自主决策、记忆存储、规划等拟人化能力。 为了探索大语言模型向AGI演变,进化成超越人类的超级人工智能,米哈游与复…

SpringBoot集成Activiti7

SpringBoot集成Activiti7 SpringBoot版本使用2.7.16 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.16</version><relativePath/> <!-- lookup…

OTP语音芯片和TTS语音芯片的差异性

OTP&#xff08;One-Time Programmable&#xff09;语音芯片和TTS&#xff08;Text-to-Speech&#xff09;语音芯片是两种不同类型的声音处理芯片。OTP主要用于播放预录声音片段&#xff0c;而TTS则根据文本实时生成语音。OTP的灵活性较弱&#xff0c;适用于固定声音输出&#…

05 依赖倒置原则

官方定义&#xff1a; 依赖倒置原则&#xff08;Dependence Inversion Principle&#xff0c;DIP&#xff09;是指在设计代码架构 时&#xff0c;高层模块不应该依赖于底层模块&#xff0c;二者都应该依赖于抽象。抽象不应该依 赖于细节&#xff0c;细节应该依赖于抽象。 通俗…

深度学习 | CNN卷积核与通道

10.1、单通道卷积 以单通道卷积为例&#xff0c;输入为&#xff08;1,5,5&#xff09;&#xff0c;分别表示1个通道&#xff0c;宽为5&#xff0c;高为5。 假设卷积核大小为3x3&#xff0c;padding0&#xff0c;stride1。 运算过程&#xff1a; 不断的在图像上进行遍历&#…

Ask Milvus Anything!聊聊被社区反复@的那些事儿ⅠⅠ

在上月的 “Ask Milvus” 专题直播中&#xff0c;我们为大家带来了 Backup 的技术解读&#xff0c;收到了社区成员很多积极的反馈。本期直播&#xff0c;我们将继续为大家带来社区呼声很高的 “Birdwatcher” 和 “Range Search” 两项功能的技术解读。 BirdWatcher 作为 Milvu…

Eolink Apikit 接口自动化测试流程

自动化测试是一种软件测试方法&#xff0c;利用自动化工具和脚本来执行测试用例&#xff0c;以验证软件应用程序的功能、性能、稳定性等特性。自动化测试的主要目的是提高测试效率、减少测试成本&#xff0c;并确保软件的质量和可靠性。 作为测试人员&#xff0c;在进行比较大…

国际十大优质期货投资app软件最新排名(综合版)

在当今的金融市场中&#xff0c;期货投资成为了越来越多人的选择。随着科技的发展&#xff0c;许多优质的期货投资app软件也应运而生。这些软件不仅提供了便捷的投资交易工具&#xff0c;还为投资者提供了丰富的市场分析和风险管理手段。 本文将介绍国际十大优质期货投资app软…

Python中Scrapy框架搭建ip代理池教程

在网络爬虫开发中&#xff0c;使用代理IP池可以提高爬取效率和匿名性&#xff0c;避免被目标网站封禁IP。本文将介绍如何使用Python中的Scrapy框架搭建IP代理池&#xff0c;并提供代码实例&#xff0c;帮助您快速搭建一个稳定可靠的代理池。 Python中Scrapy框架搭建ip代理池教程…

基于 Servlet 的博客系统

基于 Servlet 的博客系统 一、准备工作1、创建项目2、创建包3、导入前端静态页面 二、数据库设计1、blog&#xff08;博客表&#xff09;2、user&#xff08;用户表&#xff09;3、建库建表的 SQL 语句 三、封装数据库操作1、为什么要封装数据库&#xff1f;2、封装数据库的连接…

鸿蒙初体验

下载与安装DevEco Studio 在HarmonyOS应用开发学习之前&#xff0c;需要进行一些准备工作&#xff0c;首先需要完成开发工具DevEco Studio的下载与安装以及环境配置。 进入DevEco Studio下载官网&#xff0c;单击“立即下载”进入下载页面。 DevEco Studio提供了Windows版本和…