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超时消息。
相关推荐
Octopus207712 分钟前
【Linux】开发工具(yum)
linux·服务器·笔记·学习
糊涂君-Q42 分钟前
Python小白学习教程从入门到入坑------习题课3(基础巩固)
python·学习·程序人生·职场和发展·学习方法·程序员创富·改行学it
独行soc1 小时前
#渗透测试#SRC漏洞挖掘#红蓝攻防#地址池搭建之自动化编排ZMap输出结果
网络·python·安全·面试·自动化·代理ip·代理池
网络安全Ash1 小时前
深信服技术服务工程师(网络安全、云计算方向)面试题
网络·网络协议·安全·网络安全
javaDocker1 小时前
防止DDos的技术方案
网络·ddos
9527华安1 小时前
FPGA实现PCIE3.0视频采集转SFP光口千兆UDP网络输出,基于XDMA+GTH架构,提供2套工程源码和技术支持
网络·fpga开发·udp·音视频·xdma·pcie3.0
我们的五年1 小时前
【Linux课程学习】:对操作系统(Operator System)的理解
linux·服务器·开发语言·学习
Token_w1 小时前
Python爬虫进阶实战项目:使用青果网代理高效爬取某手办网详情数据
大数据·网络·爬虫·python·tcp/ip·tcp
一水鉴天2 小时前
智能工厂的设计软件 为了监管控一体化的全能Supervisor 的监督学习 之 序5 架构for认知系统 总述 (架构全图)
人工智能·学习·中间件·架构
2201_757830632 小时前
网络通信基础
linux·服务器·网络