IPCM协议

ICMP简介

Intenet控制报文协议ICMP(Internet Control Message Protocol)是网络层的一个重要协议。ICMP协议用来在网络设备间传递各种差错和控制信息,它对手机各种网络协议,诊断和排除各种网络故障具有至关重要的作用。使用基于ICMP的应用时,需要对ICMP的工作原理很熟悉。

ICMP用来传递差错、控制、查询等信息。

图片.png

ICMP是TCP/IP协议簇的核心协议之一,它用在IP网络设备(PC也实现了第3层协议,所以也是网络设备)之间发送控制报文,传递差错、控制、查询等信息。

ICMP重定向

图片.png

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

ICMP 差错检测

图片.png

ICMP Echo RequestICMP Echo Reply分别用来查询和响应某些信息,进行差错检测。

ICMP Echo消息常用于诊断源和目的之间的网络连通性,还可以提供其他信息,如报文往返时间等。

当网络设备无妨访问目标时,会自动发送ICMP目的不可达报文到发送端设备。

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

ICMP 数据包格式

包含ICMP包的数据帧:

图片.png

Type表示ICMP消息类型,Code表示统一消息类型中的不同消息。

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

ICMP消息类型

图片.png

ICMP定义了多种消息类型,用于不同的场景。有些消息不需要Code字段来描述具体类型参数,仅用于Type字段表示消息类型。
eg:ICMP Echo回复消息的Type字段设置为0。

有些ICMP消息使用Type字段定义消息大类,用Code字段表示消息的具体类型。
eg:类型为3的消息表示目的不可达,不同的Code值(就是图上的编码)表示不可达原因,包括目的网络不可达,不同的Code值表示不可达原因,包括目的网络不可达(Code=0),目的主机不可达(Code=1),协议不可达(Code=2),目的TCP/IP端口不可达(Code=3)等。

ICMP应用ping

图片.png

ICMP的一个典型应用是Ping。Ping是检测网络联通性的常用工具,同时也能够收集其他相关信息。用户可以在Ping命令中指定不同参数,如ICMP报文长度,发送的ICMP报文个数,等待回复响应的超时时间等,设备根据配置的参数来构造并发送ICMP报文,进行Ping测试。

Ping常用的配置参数说明:

1. -a source-ip-address指定发送ICMP ECHO-REQUEST 报文的源IP地址。如果不指定源IP地址,将采用出接口的IP地址作为ICMP ECHO-REQUEST报文发送的源地址。
2. -c count指定发送ICMP ECHO-REQUEST报文次数。缺省情况下发送5个ICMP ECHO-REQUEST报文
3. -h ttl-value指定TTL的值。缺省值是255.
4. -t timeout指定发送完ICMP ECHO-REQUEST 后,等待ICMP ECHO-REPLY的超时时间。
图片.png

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

往返时间是计算的:https://networkengineering.stackexchange.com/questions/53253/where-does-the-pings-round-trip-time-store-in-the-ip-header#53253

ICMP头部.png
IP头部.png

ICMP应用 - Tracert

图片.png

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端口号
图片.png

Ping使用到的是哪两类ICMP消息?
Ping利用ICMP Echo请求消息(Type值为8)来发起检测目的可达性。目的端收到ICMP Echo请求消息后,根据IP报文头中的源地址向源端发送ICMP Echo回复消息(Type值为0)

当网络设备收到TTL值为-0的IP报文时,会如何操作?
如果IP数据报在达到目的之前TTL值已经降到了0,则收到IP数据报的网络设备会丢弃该数据报,并向源端发送ICMP消息通知源端TTL超时。

你可能感兴趣的:(IPCM协议)