ICMP(Internet控制消息协议)类型(Type)和代码(Code)用于表示ICMP消息的具体类型和代码。主要的ICMP类型和代码有:
- 类型0:回显请求(Echo Request)和回显应答(Echo Reply)。用于Ping测试,代码全部为0。
- 类型3:目标不可达(Destination Unreachable)。表示数据包无法到达目的地,代码表示不可达原因。如代码1表示主机不可达,代码5表示源路由失败。
- 类型4:源抑制(Source Quench)。表示接收端数据包接收速率太快,请求发送端降低发送速率。代码为0。
- 类型5:重定向(Redirect)。用于通知发送端更好的第一跳路由器,代码0代表网络,1代表主机。
- 类型8:回显请求(Echo Request)和回显应答(Echo Reply)。与类型0功能相同,代码全部为0。
- 类型11:超时(Time Exceeded)。表示数据包TTL值减为0,代码0代表中转超时,1代表重组超时。
- 类型12:参数问题(Parameter Problem)。表示ICMP数据包内容存在错误,代码指明具体问题所在。
- 类型13:时间戳请求(Timestamp Request)和时间戳应答(Timestamp Reply)。用于计算网络时延,代码为0。
- 类型14:信息请求(Information Request)和信息应答(Information Reply)。代码全部为0,目的未知。
代码示例:
python
# ICMP Echo Request (Type 8, Code 0)
echo_req = b''.join([
b'\x08', # ICMP Type: Echo Request
b'\x00', # ICMP Code: 0
b'\x0c\x12', # ICMP checksum
b'\x0f\x12', # ID
b'\x34\x12' # Sequence number
])
# ICMP Destination Unreachable (Type 3, Code 1, Host Unreachable)
unreach_host = b''.join([
b'\x03', # ICMP Type: Destination Unreachable
b'\x01', # ICMP Code: Host Unreachable
b'\x00\x00', # ICMP checksum
b'\x0c\x12' # As much of original datagram as fits
b'\x00\x00' # (Minimum 12 bytes total)
])
# ICMP Redirect (Type 5, Code 0, Redirect for Network)
redirect_net = b''.join([
b'\x05', # ICMP Type: Redirect
b'\x00', # ICMP Code: Redirect for Network
b'\x00\x00' # ICMP checksum
b'\xc0\xa8\x0a', # Original IP header + 64 bits
b'\xc0\xa8\x0b' # Updated IP address
])
ICMP作为IP协议的控制协议,提供了诊断和控制功能。不同的ICMP类型和代码映射了ICMP消息所要表达的具体含义,用于提供网络诊断、路由、时延测量等功能。ICMP广泛用于网络故障排除和路由控制,是实现IP网络可管理性的关键协议之一。