Ethernet 系列(9)-- 基础学习::ICMP

目录

[1. 缩写词:](#1. 缩写词:)

[2. ICMP的目的:](#2. ICMP的目的:)

[2.1 什么是ICMP:](#2.1 什么是ICMP:)

[2.2 什么时候使用ICMP:](#2.2 什么时候使用ICMP:)

[3. ICMP 头部:](#3. ICMP 头部:)

[4. ICMP 报文类型:](#4. ICMP 报文类型:)

[4.1 目标不可达:](#4.1 目标不可达:)

[4.2 重定向:](#4.2 重定向:)

[4.3 超时:](#4.3 超时:)

[4.4 Ping(回波请求和回波回复):](#4.4 Ping(回波请求和回波回复):)

[5. ICMP如何工作:](#5. ICMP如何工作:)

[5.1 目标不可达:](#5.1 目标不可达:)

[5.2 重定向:](#5.2 重定向:)

[5.3 超时:](#5.3 超时:)


1. 缩写词:

|------------------|-----------------------------------|
| Abbreviation | Meaning |
| ToS | Type of Service |
| ICMP | Internet Control Message Protocol |
| IP | Internet Protocol |
| MTU | Maximum Transmission Unit |
| TTL | Time To Live |

2. ICMP的目的:

2.1 什么是ICMP:

  • ICMP - Internet Control Message Protocol,互联网控制消息协议,是一种辅助协议,是IP不可或缺的一部分。
  • 这意味着每个IP设备都必须支持ICMP,ICMP消息被封装在协议号为1的IP数据包中。

2.2 什么时候使用ICMP:

当网络设备想要报告错误消息、提出路由建议或诊断网络性能时,使用此协议。

3. ICMP 头部:

  • 类型:此字段指示ICMP消息的类型。请参阅第3节了解此字段的值。
  • 代码:此字段表示附加信息。例如:如果类型为"Destination Unreachable",则代码将提供问题的答案:"为什么目标不可达?"。请参阅第3节了解此字段的值。
  • 校验和:此字段用于检查ICMP标头和封装数据中的错误。
  • 标头其余部分:此字段因消息类型/代码而异。

此标头用于封装ICMP数据。内容取决于ICMP消息类型。

  • 对于错误消息,将发送导致错误的数据包的IP报头和IP有效载荷的前8个字节。
  • 对于回显消息,回显请求中的数据必须在回显回复中回显。例如,如果请求中有500个字节,那么这500个字节必须在回复中回显。

注意:并非所有ICMP消息都封装数据。例如,ping可以有一个0字节的有效载荷,其中只包含ICMP报头。

4. ICMP 报文类型:

有许多消息类型。在这篇文章中,我们主要关注两种流行的类型:

  • 错误消息。这种类型有三种形式:
    • 无法到达目的地。
    • 重定向。
    • 时间已过。
  • 查询消息。这种类型有两种形式:
    • 回声请求。
    • 回声回复

4.1 目标不可达:

  • 目标不可达消息用于通知主机数据包无法到达其目标。
  • ICMP类型=3。
  • ICMP代码见下表:

|-----|-------------------------------------------|-----------------|
| * 0 | Destination network unreachable | 目标网络无法连接 |
| 1 | Destination host unreachable | 目标主机不可达 |
| 2 | Destination protocol unreachable | 无法访问目标协议 |
| 3 | Destination port unreachable | 无法访问目标端口 |
| 4 | Fragmentation needed and DF-bit set | 需要分段和DF-bit set |
| 13 | Communication administratively prohibited | 行政禁止通信 |

  • 本例中的header如下:
  • 红色框表示数据包无法到达目的地。
  • 蓝色框表示数据包无法到达目的地的原因。
  • 粉红色框仅用于代码4。
  • 绿色框表示哪个数据包无法到达目的地。

4.2 重定向:

  • 路由器使用重定向消息通知主机使用不同的路由器(更好的路由)到达目的地。
  • ICMP Type=5。
  • ICMP Code见下表:

|---|------------------------------|---------------------------------|---------------------------|
| 0 | Redirect for network | 主机不仅应重定向到此目标IP,还应重定向到同一网络中的所有目标 | Prohibited since RFC 1812 |
| 1 | Redirect for host | 主机应将所有数据包重定向到此目标IP | |
| 2 | Redirect for ToS and network | 与Code 0相同,但仅适用于与此代码具有相同ToS值的数据包 | Prohibited since RFC 1812 |
| 3 | Redirect for ToS and host | 与Code 1相同,但仅适用于与此代码具有相同ToS值的数据包 | |

  • 本例中的header如下:
  • IP地址:此字段表示应将数据包发送到的路由器的IP地址,而不是此路由器。
  • IP报头和原始数据报数据的前8个字节:此字段指示导致发送此重定向消息的消息。

4.3 超时:

  • 超时消息用于两种情况:
    • 通知发送方路由器无法转发数据包,因为IP TTL已过期。
    • 通知发送方,由于并非所有碎片都及时到达,设备必须丢弃碎片数据包。
  • ICMP Type=11。
  • ICMP Code见下表:

|---|-----------------------------------|
| 0 | TTL exceeded in transit |
| 1 | Fragment reassembly time exceeded |

  • 本例中的header如下:
  • IP报头和原始数据报数据的前8个字节:此字段指示导致发送此超时消息的消息。

4.4 Ping(回波请求和回波回复):

  • 如果主机收到回声请求,它应该向请求的源发送回声回复。
  • 对于回显请求,ICMP Type=0。对于回显应答,ICMP Type=0。
  • ICMP Code = 0.
  • 本例中的header如下:
  • 标识符:此字段用于跟踪它发送的ping。对于发送的每个ping序列,此值将递增1。应答消息将使用与请求消息相同的标识符。
    • 例如:ping 8.8.8.8,主机将发送5个标识符为0的Echo请求。那么。ping 1.1.1.1,主机将发送5个标识符为1的回声请求。
  • 序列号:此字段用于跟踪一系列中的每个请求和应答交换。
    • 例如:ping 8.8.8.8,主机将发送5个标识符为0的Echo请求。请求1和应答1将具有相应的序列号=0,请求2和应答2将具有相应序列号=1,。。。
    • 注意:此序列号可以解释为大端阶或小端阶(下图中的蓝色框)。示例:Wireshark显示两者。
  • 有效载荷:此字段只是一串ASCII字符。注:
    • 请求的有效载荷必须在回复中发回。
    • Ping可以在没有有效载荷的情况下发送。消息大小为28字节(IP报头+ICMP报头)。

5. ICMP如何工作:

5.1 目标不可达:

  • 步骤1:PC1向R1发送一个数据包(目的地为PC3)。
  • 步骤2:R1有一个匹配的路由,因此它将数据包转发给R2。
  • 步骤3:R2没有与目标192.168.3.10匹配的路由,因此它丢弃了数据包。→ 解释一下?
  • 步骤4:R2向PC1发送ICMP目标不可达消息。

5.2 重定向:

  • 步骤1:PC1向R1发送数据包(目的地SRV1)。
  • 步骤2:R1将数据包转发到目的地R2。
  • 步骤3:R1向PC1发送ICMP重定向,说明:"发送到SRV1 IP地址的数据包应通过R2发送"。
  • 步骤4:PC1通过R2而不是R1向SRV1发送未来的数据包。

5.3 超时:

  • 步骤1:PC1向R1发送一个TTL=2的数据包(目标PC3)。
  • 步骤2:R1接收到一个数据包,并意识到必须将其转发给R2,然后将TTL减为1并转发给R2。
  • 步骤3:R2接收到一个数据包,并意识到必须将其转发给R3,然后将TTL减为1,这将导致TTL=0。然后,R2丢弃该数据包。
  • 步骤4:R2向PC1发送ICMP超时消息。
相关推荐
璞~24 分钟前
MQTT 课程概览 (学习笔记)02
笔记·学习
云和数据.ChenGuang34 分钟前
《XML》教案 第1章 学习XML基础
xml·java·学习
今天你比昨天博学了吗1 小时前
CFD POST导出动画
学习
γ..1 小时前
基于MATLAB的图像增强
开发语言·深度学习·神经网络·学习·机器学习·matlab·音视频
小王爱吃月亮糖1 小时前
C++进阶-1-单继承、多继承、虚继承
开发语言·c++·笔记·学习·visual studio
SONG_YIH1 小时前
5G -- 网络安全
网络·5g·移动通信
zxguan1 小时前
Springboot 学习 之 logback-spring.xml 日志压缩 .tmp 临时文件问题
spring boot·学习·spring
纪伊路上盛名在1 小时前
爬虫1:uniprot蛋白质序列数据+canvas图片
数据库·学习·知识图谱·学习方法
小王爱吃月亮糖1 小时前
补充--C++的项目结构和管理
数据结构·c++·笔记·学习
PP东7 小时前
ES6学习Generator 函数(生成器)(八)
javascript·学习·es6