ICMP协议中的ICMP类型和代码有哪些?

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网络可管理性的关键协议之一。