ICMP协议

来源:互联网 发布:js url encode php 编辑:程序博客网 时间:2024/06/04 00:23

ICMP协议
ICMP是TCP/IP协议簇的核心协议之一,它用于在IP网络设备之间发送 控制报文,传递差错、控制、查询等信息。

ICMP Redirect重定
ICMP Redirect重定向消息用于支持路由功能。如图所示,主机A希望发 送报文到服务器A,于是根据配置的默认网关地址向网关RTB发送报文 。网关RTB收到报文后,检查报文信息,发现报文应该转发到与源主机 在同一网段的另一个网关设备RTA,因为此转发路径是更优的路径。所 以RTB会向主机发送一个Redirect消息,通知主机直接向另一个网关 RTA发送该报文。主机收到Redirect消息后,向RTA发送报文,RTA会 将报文转发给服务器A。

ICMP定义的错误消息:
ICMP定义了各种错误消息,用于诊断网络连接性问题;根据这些错误 消息,源设备可以判断出数据传输失败的原因。
1、如果网络中发生 了环路,导致报文在网络中循环,最终TTL超时,这种情况下网络设备 会发送TTL超时消息给发送端设备。

2、又比如如果目的不可达,则中间的 网络设备会发送目的不可达消息给发送端设备。目的不可达的情况有多 种。
(1)如果是网络设备无法找到目的网络,则发送目的网络不可达消息;
(2)如果网络设备无法找到目的网络中的目的主机,则发送目的主机不可达 消息。

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

Ping命令的输出信息中包括目的地址、ICMP报文长度、序号、TTL值、 以及往返时间。序号是包含在Echo回复消息(Type=0)中的可变参数 字段,TTL和往返时间包含在消息的IP头中。
ping的实例

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

源端(RTA)向目的端(主机B)发送一个UDP报文,TTL值为1,目的 UDP端口号是大于30000的一个数,因为在大多数情况下,大于30000 的UDP端口号是任何一个应用程序都不可能使用的端口号。

第一跳(RTB)收到源端发出的UDP报文后,判断出报文的目的IP地址 不是本机IP地址,将TTL值减1后,判断出TTL值等于0,则丢弃报文并 向源端发送一个ICMP超时(Time Exceeded)报文(该报文中含有第 一跳的IP地址113.55.24.1),这样源端就得到了RTB的地址。 源端收到RTB的ICMP超时报文后,再次向目的端发送一个UDP报文, TTL值为2。 第二跳(RTC)收到源端发出的UDP报文后,回应一个ICMP超时报文 ,这样源端就得到了RTC的地址(10.191.47.1)。 以上过程不断进行,直到目的端收到源端发送的UDP报文后,判断出目 的IP地址是本机IP地址,则处理此报文。根据报文中的目的UDP端口号 寻找占用此端口号的上层协议,因目的端没有应用程序使用该UDP端口 号,则向源端返回一个ICMP端口不可达(Destination Unreachable) 报文。 源端收到ICMP端口不可达报文后,判断出UDP报文已经到达目的端, 则停止Tracert程序,从而得到数据报文从源端到目的端所经历的路径。

0 0
原创粉丝点击