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

相关文章

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

控制反转 的种类

之前对控制反转的定义和解释都不是很清晰。最近翻书发现在《Pro Spring 5》(免费电子版在文章最后)有一段非常不错的解释。记录一下,有道翻译贴出来方便查看。如有请直接跳过中文,看后面的原文。 控制反转的类型 控制反转的类型您可能想知道为什么有两种类型的IoC,以及为什么这些类型被进一步划分为不同的实现。这个问题似乎没有明确的答案;当然,不同的类型提供了一定程度的灵活性,但

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

Modbus-RTU协议

一、协议概述 Modbus-RTU(Remote Terminal Unit)是一种基于主从架构的通信协议,采用二进制数据表示,消息中的每个8位字节含有两个4位十六进制字符。它主要通过RS-485、RS-232、RS-422等物理接口实现数据的传输,传输距离远、抗干扰能力强、通信效率高。 二、报文结构 一个标准的Modbus-RTU报文通常包含以下部分: 地址域:单个字节,表示从站设备

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理 秒杀系统是应对高并发、高压力下的典型业务场景,涉及到并发控制、库存管理、事务管理等多个关键技术点。本文将深入剖析秒杀商品业务中常见的几个核心问题,包括 AOP 事务管理、同步锁机制、乐观锁、CAS 操作,以及用户限购策略。通过这些技术的结合,确保秒杀系统在高并发场景下的稳定性和一致性。 1. AOP 代理对象与事务管理 在秒杀商品

PostgreSQL中的多版本并发控制(MVCC)深入解析

引言 PostgreSQL作为一款强大的开源关系数据库管理系统,以其高性能、高可靠性和丰富的功能特性而广受欢迎。在并发控制方面,PostgreSQL采用了多版本并发控制(MVCC)机制,该机制为数据库提供了高效的数据访问和更新能力,同时保证了数据的一致性和隔离性。本文将深入解析PostgreSQL中的MVCC功能,探讨其工作原理、使用场景,并通过具体SQL示例来展示其在实际应用中的表现。 一、

vue2实践:el-table实现由用户自己控制行数的动态表格

需求 项目中需要提供一个动态表单,如图: 当我点击添加时,便添加一行;点击右边的删除时,便删除这一行。 至少要有一行数据,但是没有上限。 思路 这种每一行的数据固定,但是不定行数的,很容易想到使用el-table来实现,它可以循环读取:data所绑定的数组,来生成行数据,不同的是: 1、table里面的每一个cell,需要放置一个input来支持用户编辑。 2、最后一列放置两个b

【电机控制】数字滤波算法(持续更新)

文章目录 前言1. 数字低通滤波 前言 各种数字滤波原理,离散化公式及代码。 1. 数字低通滤波 滤波器公式 一阶低通滤波器的输出 y [ n ] y[n] y[n] 可以通过以下公式计算得到: y [ n ] = α x [ n ] + ( 1 − α ) y [ n − 1 ] y[n] = \alpha x[n] + (1 - \alpha) y[n-1]