4.4 网际控制报文协议ICMP

2023-10-19 06:36

本文主要是介绍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 是一个强大的工具,用于网络诊断和错误报告。理解其基础知识和应用是网络学习的重要部分。

 

这篇关于4.4 网际控制报文协议ICMP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/237979

相关文章

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

使用DrissionPage控制360浏览器的完美解决方案

《使用DrissionPage控制360浏览器的完美解决方案》在网页自动化领域,经常遇到需要保持登录状态、保留Cookie等场景,今天要分享的方案可以完美解决这个问题:使用DrissionPage直接... 目录完整代码引言为什么要使用已有用户数据?核心代码实现1. 导入必要模块2. 关键配置(重点!)3.

SpringSecurity 认证、注销、权限控制功能(注销、记住密码、自定义登入页)

《SpringSecurity认证、注销、权限控制功能(注销、记住密码、自定义登入页)》SpringSecurity是一个强大的Java框架,用于保护应用程序的安全性,它提供了一套全面的安全解决方案... 目录简介认识Spring Security“认证”(Authentication)“授权” (Auth

python之流程控制语句match-case详解

《python之流程控制语句match-case详解》:本文主要介绍python之流程控制语句match-case使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录match-case 语法详解与实战一、基础值匹配(类似 switch-case)二、数据结构解构匹

Spring Security注解方式权限控制过程

《SpringSecurity注解方式权限控制过程》:本文主要介绍SpringSecurity注解方式权限控制过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、摘要二、实现步骤2.1 在配置类中添加权限注解的支持2.2 创建Controller类2.3 Us

Python中如何控制小数点精度与对齐方式

《Python中如何控制小数点精度与对齐方式》在Python编程中,数据输出格式化是一个常见的需求,尤其是在涉及到小数点精度和对齐方式时,下面小编就来为大家介绍一下如何在Python中实现这些功能吧... 目录一、控制小数点精度1. 使用 round() 函数2. 使用字符串格式化二、控制对齐方式1. 使用

Springboot控制反转与Bean对象的方法

《Springboot控制反转与Bean对象的方法》文章介绍了SpringBoot中的控制反转(IoC)概念,描述了IoC容器如何管理Bean的生命周期和依赖关系,它详细讲解了Bean的注册过程,包括... 目录1 控制反转1.1 什么是控制反转1.2 SpringBoot中的控制反转2 Ioc容器对Bea

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

Spring IOC控制反转的实现解析

《SpringIOC控制反转的实现解析》:本文主要介绍SpringIOC控制反转的实现,IOC是Spring的核心思想之一,它通过将对象的创建、依赖注入和生命周期管理交给容器来实现解耦,使开发者... 目录1. IOC的基本概念1.1 什么是IOC1.2 IOC与DI的关系2. IOC的设计目标3. IOC