1.4 ICMP 协议(网络层)

1、ICMP

ICMP:Internet Control Message Protocol,Internet 控制消息协议。
ICMP 协议是网络层的一个重要协议,是 TCP/IP 协议簇的核心协议之一。它用来在 IP 网络设备间传递各种差错和控制信息,并对于收集各种网络信息、诊断和排除各种网络故障等方面起着至关重要的作用。

2、ICMP 重定向(ICMP Redirect)

ICMP Redirect 消息用于支持路由功能。网关收到报文后,检查报文信息,如果发现报文应该转发到到与源主机在同一网段的另一个路径更优的网关设备时,会向源主机发送一个 Redirect 消息,通知主机直接向另一个网关发送该报文。源主机收到 Redirect 消息后,会向路径更优的网关设备发送报文。

3、ICMP 差错检测(ICMP Echo)

ICMP Echo 消息常用于诊断源和目的地之间的网络连通性,同时还可以提供其它信息,如报文往返时间等。
ICMP Echo Request 和 ICMP Echo Reply 分别用来查询和响应某些信息,进行差错检测。

4、ICMP 错误报告

当网络设备无法访问目标网络时,会自动发送 ICMP 目的不可达报文到发送端设备。
ICMP 定义了各种错误消息,用于诊断网络连接性问题;根据这些错误消息,源设备可以判断出数据传输失败的原因。如,网络中发生了环路,导致报文在网络中循环,且最终 TTL 超时,网络设备会发送 TTL 超时消息给发送端设备。又如,目的不可达,则中间网络设备会发送目的不可达消息给发送端设备。目的不可达的情况有多种,如果是网络设备无法找到目的网络,则发送目的网络不可达消息;如果网络设备无法找到目的网络中的目的主机,则发送目的主机不可达消息。

5、ICMP 数据包格式

1.4 ICMP 协议(网络层)
ICMP 数据包格式

ICMP 消息封装在 IP 报文中。
ICMP 消息的格式取决于 Type 和 Code 字段,其中 Type 字段为消息类型,Code 字段包含该消息类型的具体参数。后面的检验和字段用于检查消息是否完整。
消息中包含 32 比特的可变参数,这个字段一般不使用,通常设置为 0。在 ICMP Redirect 消息中,这个字段用来指定网关 IP 地址,主机根据这个地址将报文重定向到指定网关。在 Echo 请求消息中,这个字段包含标识符和序号,源端根据这两个参数将收到的回复消息与本端发送的 Echo 请求进行关联。尤其是当源端向目的端发送了多个 Echo 请求消息时,需要根据标识符和序号将 Echo 请求和回复消息进行一一对应。

6、ICMP 消息类型和编码类型

ICMP 消息类型和编码类型

一般来说,ICMP 消息使用 Type 字段定义消息大类,用 Code 字段表示消息的具体类型。

7、ICMP 应用——Ping

Ping 是 ICMP 的一个典型应用。它是检测网络连通性的常用工具,同时也能收集其它相关信息。用户可以在 Ping 命令中指定不同参数,如 ICMP 报文长度、发送的 ICMP 报文个数和等待回复响应的超时时间等,设备根据配置的参数来构造并发送 ICMP 报文,进行 Ping 测试。
Ping 的常用参数:
-a source-ip-address
指定发送 ICMP Echo Request 报文的源 IP 地址。如果不指定,将采用出接口的 IP 地址作为 ICMP Echo Request 报文发送的源地址。
-c count
指定发送 ICMP Echo Request 报文次数。缺省情况下发送 5 个 ICMP Echo Request 报文。
-h ttl-value
指定 TTL 的值。缺省值是 255。
-t timeout
指定发送完 ICMP Echo Request 后,等待 ICMP Echo Reply 的超时时间。

8、ICMP 应用——Tracert

ICMP 的另一个典型应用是 Tracert。Tracert 基于报头中的 TTL 值来逐跳跟踪报文的转发路径。为了跟踪到达某特定目的地址的路径,源端首先将报文的 TTL 值设置为 1。该报文到达第一个节点后,TTL 超时,于是该节点向源发送 TTL 超时消息,消息中携带时间戳。然后源端将报文的 TTL 值设置为 2,报文到达第二个节点后超时,该节点同样返回 TTL 超时消息。以此类推,直到报文到达目的地。这样,源端根据返回的报文中的信息可以跟踪到报文经过的每一个节点,并根据时间戳信息计算往返时间。
Tracert 是检测网络丢包和时延的有效手段,同时可以帮助管理员发现网络中的路由环路。
Tracert 的常用参数:
-a source-ip-address
指定 Tracert 报文的源地址。
-f first-ttl
指定初始 TTL。缺省值是 1。
-m max-ttl
指定最大 TTL。缺省值是30。
-name
使能显示每一跳的主机名。
-p port
指定目的主机的 UDP 端口号。

分享