Skip to content

ICMP 协议

1. ICMP 类型(Type)与代码(Code)

在 ICMP(Internet Control Message Protocol,互联网控制消息协议)中,每个 ICMP 报文都包含两个重要字段:类型(Type)代码(Code)。它们用于区分不同的 ICMP 消息类型,并进一步提供更详细的错误或状态信息。

1.1 Type(类型)

  • Type 字段表示 ICMP 消息的主要类别,用于指明该消息的用途。例如:
    • Type 0:表示 Echo Reply(回显应答,Ping 应答)
    • Type 3:表示 Destination Unreachable(目标不可达),用于通知数据包无法到达目的地。
    • Type 8:表示 Echo Request(回显请求,Ping 请求),通常用于 ping 命令。
    • Type 11:表示 Time Exceeded(超时),用于指示数据包在传输过程中 TTL(生存时间)归零。

1.2 Code(代码)

  • Code 字段是 Type 字段的细化扩展,它提供了更具体的错误或控制信息。例如:
    • Type = 3(Destination Unreachable,目标不可达)时:
      • Code 0Network Unreachable(网络不可达)
      • Code 1Host Unreachable(主机不可达)
      • Code 3Port Unreachable(端口不可达)
    • Type = 11(Time Exceeded,超时)时:
      • Code 0TTL equals 0 during transit(传输过程中 TTL 归零)
      • Code 1TTL equals 0 during reassembly(数据报组装过程中 TTL 归零)

1.3 Type 与 Code 结合示例

ICMP 消息的 TypeCode 结合使用,以明确指示网络状态。例如:

  • Ping(ICMP Echo Request & Reply)
    • Type 8, Code 0:发送 Ping 请求
    • Type 0, Code 0:Ping 响应
  • 目标不可达(Destination Unreachable)
    • Type 3, Code 1:主机不可达
    • Type 3, Code 3:端口不可达
  • TTL 超时(Time Exceeded)
    • Type 11, Code 0:数据包在传输过程中 TTL 归零(用于 traceroute

通过 TypeCode,ICMP 能够精确传递网络状态和故障信息,帮助诊断和优化网络连接。

2. 说明与补充

2.1 Ping(ICMP Echo Request & Reply)

  • Type 8, Code 0:表示 ICMP 回显请求(Echo Request),即 ping 命令的请求数据包。
  • Type 0, Code 0:表示 ICMP 回显应答(Echo Reply),即 ping 的响应数据包。

2.2 目标不可达(Destination Unreachable)

  • Type 3 代码中,Code 0-Code 15 涵盖了各种不可达情况,如主机、网络、协议、端口等。

2.3 TTL 超时(Time Exceeded)

  • Type 11, Code 0:数据包在传输过程中 TTL 归零,通常用于 traceroute 路由追踪工具。
  • Type 11, Code 1:数据报在重组过程中 TTL 归零。

2.4 重定向(Redirect)

  • Type 5 相关代码用于指示主机或网络的 IP 路由需要更改。

2.5 源端被关闭(Source Quench)

  • Type 4 旨在减少数据包发送速率,避免网络拥塞,但现代 IP 实现通常不会使用该机制。

2.6 作废的类型(Obsolete Types)

  • Type 8 以上部分类型已被废弃,例如 Timestamp request/replyInformation request/reply

这样整理后,表格更整齐,结构更清晰,并补充了一些关键信息。