本文主要是介绍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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!