tcp/ip学习之7: ICMP协议格式
ICMP是什么
ICMP(Internet Control Message Protocol,互联网控制报文协议)是网络层的一个重要协议,主要用于在IP主机和路由器之间传递控制消息。
1. ICMP的主要功能
差错报告
当IP数据报在传输过程中出现问题时,ICMP会生成相应的差错报告消息。例如,如果一个路由器收到一个IP数据报,但发现该数据报的TTL(Time to Live,生存时间)字段为0,那么它会丢弃该数据报,并向源主机发送一个“时间超过”(Time Exceeded)的ICMP消息。这可以帮助源主机了解数据报在传输过程中出现了超时问题。
如果一个IP数据报的格式错误,比如数据报的长度与报头中的长度字段不一致,接收方会向发送方发送一个“参数问题”(Parameter Problem)的ICMP消息,指出数据报中存在问题的参数位置,以便发送方进行修正。
路径探测
ICMP的“回显请求”(Echo Request)和“回显应答”(Echo Reply)消息常用于路径探测。例如,我们常用的“ping”命令就是基于这两种消息。当用户执行“ping”命令时,发送方主机向目标主机发送一个ICMP回显请求消息,目标主机收到后会回复一个ICMP回显应答消息。通过这种方式,可以检测发送方与目标方之间的网络连接是否正常,以及测量往返时间(RTT,Round - Trip Time),从而评估网络的延迟情况。
网络诊断
ICMP可以用于网络诊断。例如,当网络管理员需要了解网络中的路由情况时,可以利用ICMP的“重定向”(Redirect)消息。如果一个路由器发现主机发送的数据报不是通过最优路径到达目的地,它会向该主机发送一个重定向消息,建议主机使用更优的路由。这有助于优化网络流量的传输路径。
2. ICMP的应用场景
- 网络故障排查:当网络出现故障时,ICMP消息可以帮助快速定位问题。例如,通过分析收到的“目的不可达”消息,可以判断是由于网络路由问题、目标主机关闭还是目标端口未开放等原因导致通信失败。
- 网络监控:网络管理员可以利用ICMP消息监控网络设备的状态。例如,定期向网络中的设备发送ICMP回显请求消息,如果设备能够正常回复回显应答消息,则说明设备处于正常运行状态;如果长时间没有收到回复,则可能表示设备出现故障或网络连接中断。
- 网络安全防御:虽然ICMP主要用于网络管理和诊断,但也可能被恶意利用。例如,ICMP洪水攻击(ICMP Flood Attack)是一种常见的网络攻击方式,攻击者向目标主机发送大量的ICMP回显请求消息,使目标主机忙于处理这些请求,从而导致网络拥塞或主机资源耗尽。因此,在网络安全策略中,通常会对ICMP消息进行适当的限制和过滤,以防止恶意攻击。
ICMP在网络通信中扮演着重要的角色,它通过传递控制消息,帮助实现网络的正常运行和故障排查,同时也需要合理管理以防止被恶意利用。
ICMP 的位置
在 TCP/IP 协议栈中,ICMP 位于 网络层,与 IP 协议同层。它直接在 IP 数据包中封装,用于在 IP 网络中传输控制消息。
以下是 TCP/IP 协议栈的层次结构:
- 应用层(Layer 7):
- 包括 HTTP、HTTPS、FTP、SMTP、DNS 等协议。
- 传输层(Layer 4):
- 包括 TCP 和 UDP 协议。
- 网络层(Layer 3):
- 包括 IP 协议和 ICMP 协议。
- 链路层(Layer 2):
- 包括以太网(Ethernet)、Wi-Fi 等协议。
ICMP 的数据包格式
ICMP 数据包封装在 IP 数据包中,其格式如下:
| 字段 | 长度(字节) | 说明 |
|---|---|---|
| 类型 | 1 | ICMP 消息类型(例如,回显请求、目标不可达等) |
| 代码 | 1 | ICMP 消息代码(用于进一步细化类型字段) |
| 校验和 | 2 | ICMP 数据包的校验和 |
| 数据 | 可变 | ICMP 数据(例如,回显请求/响应数据、错误信息等) |
ICMP 的常见消息类型
- 类型 0:回显响应(Echo Reply)
- 类型 3:目标不可达(Destination Unreachable)
- 类型 5:路由器重定向(Redirect)
- 类型 8:回显请求(Echo Request)
- 类型 11:超时(Time Exceeded)
- 类型 12:参数问题(Parameter Problem)
总结
ICMP 是一个重要的网络层协议,用于在 IP 网络中发送错误消息和操作信息。它在 TCP/IP 协议栈中位于网络层,与 IP 协议同层。ICMP 的主要功能包括错误报告、诊断和测试以及网络管理。

浙公网安备 33010602011771号