跳转至

ICMP

ICMP (Internet Control Message Protocol 网际控制报文协议)主要用于网络设备之间的诊断和错误报告。ping命令就是基于ICMP协议。

协议格式

Image title
  • Type (8 bits): 指示 ICMP 报文的类型,例如回显请求(Echo Request,类型 8)和回显应答(Echo Reply,类型 0)。

  • Code (8 bits): 指示特定的 ICMP 报文类型的子类型,例如对于类型 3(目的不可达)的报文,代码字段可以指示具体的错误原因。

  • Checksum (16 bits): 校验和,用于检测报文在传输过程中是否出现错误。

  • Rest of Header (32 bits): 该部分根据具体的 ICMP 报文类型和代码的不同而有所变化,例如在回显请求和应答报文中,这部分包括标识符和序列号。

类型 名称 代码 描述
0 回显应答 (Echo Reply) 0 无特定子类型 (对 ping 的回答)
3 目的不可达 (Destination Unreachable) 0 网络不可达 (Network Unreachable)
1 主机不可达 (Host Unreachable)
2 协议不可达 (Protocol Unreachable)
3 端口不可达 (Port Unreachable)
4 需要进行分片但设置了不分片位 (Fragmentation Needed and Don't Fragment was Set)
5 源站路由失败 (Source Route Failed)
6 目的网络未知 (Destination Network Unknown)
7 目的主机未知 (Destination Host Unknown)
8 源主机被隔离 (Source Host Isolated)
9 通信管理受限网络禁止 (Communication with Destination Network is Administratively Prohibited)
10 通信管理受限主机禁止 (Communication with Destination Host is Administratively Prohibited)
11 目的网络不可到达,服务类型禁止 (Destination Network Unreachable for Type of Service)
12 目的主机不可到达,服务类型禁止 (Destination Host Unreachable for Type of Service)
13 通信被过滤 (Communication Administratively Prohibited)
14 主机优先权违反 (Host Precedence Violation)
15 优先权筛选 (Precedence cutoff in effect)
4 源抑制 (Source Quench) 0 无特定子类型
5 重定向 (Redirect) 0 重定向数据报到网络 (Redirect Datagram for the Network)
1 重定向数据报到主机 (Redirect Datagram for the Host)
2 重定向数据报到服务类型和网络 (Redirect Datagram for the Type of Service and Network)
3 重定向数据报到服务类型和主机 (Redirect Datagram for the Type of Service and Host)
8 回显请求 (Echo Request) 0 无特定子类型
9 路由器通告 (Router Advertisement) 0 无特定子类型
10 路由器请求 (Router Solicitation) 0 无特定子类型
11 时间超时 (Time Exceeded) 0 传输中生存时间 (TTL) 为 0 时超时 (TTL equals 0 during transit)
1 在分片重组过程中超时 (Fragment reassembly time exceeded)
12 参数问题 (Parameter Problem) 0 IP 头部错误 (Pointer indicates the error)
1 缺少必需选项 (Missing a required option)
2 错误的长度 (Bad length)
13 时间戳请求 (Timestamp Request) 0 无特定子类型
14 时间戳应答 (Timestamp Reply) 0 无特定子类型
15 信息请求 (Information Request) 0 无特定子类型 【已废弃】
16 信息应答 (Information Reply) 0 无特定子类型 【已废弃】
17 地址掩码请求 (Address Mask Request) 0 无特定子类型
18 地址掩码应答 (Address Mask Reply) 0 无特定子类型
30 追踪路由 (Traceroute) 0 无特定子类型 【实验性的,不常用】

ICMP 应用

ping

ping(Packet InterNet Groper)用来测试主机或路由器间的连通性。

traceroute

用来测试 IP 数据报从源主机到目标主机要经过那些路由器。Windows 版本为 tracert。

实现原理:依次发送 TTL = 1,TTL = 2,TTL = 3... 的 IP 报文,每当报文 TTL 减为 0 时,到达的路由器就会返回一个差错报文,就得到对应路由器的 IP 地址,直到 IP 返回的目标 IP 的地址,就停止发送。