HCNA学习笔记(五)ICMP协议

来源:互联网 发布:命令行启动mysql 编辑:程序博客网 时间:2024/05/26 20:23
Internet控制报文协议ICMP(Internet Control Message Protocol)是网络层的一个重要协议。ICMP协议用来在网络设备间传递各种差错和控制信息,它对于收集各种网络信息、诊断和排除各种网络故障具有至关重要的作用。使用基于ICMP的应用时,需要对ICMP工作原理非常熟悉。
ICMP是TCP/IP协议簇的核心协议之一,它用于在IP网络设备之间发送控制报文,传递差错、控制、查询等信息(ping命令用的就是ICMP协议的应用之一)。
1.1 ICMP重定向
ICMP Redirect重定向消息用于支持路由功能。如图所示,主机A希望发送报文到服务器A,于是根据配置的默认网关地址向A的网关网关RTB发送报文。网关RTB收到报文后,检查报文信息,发现报文应该转发到与源主机在同一网段的另一个网关设备RTA,因为此转发路径是更优的路径,所以RTB会向主机发送一个ICMP Redirect重定向消息,通知主机A直接向另一个网关RTA发送该报文。主机收到Redirect重定向消息后,以后会访问20.网段时候直接向RTA发送报文,然后RTA会将该报文再转发给服务器A。
注意:ICMP重定向是针对不同网段的,如果主机A又要访问一个30.网段,那么还是要首先发往A主机的网关RTB后进行重定向。

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

1.3 ICMP消息类型和编码类型
ICMP定义了多种消息类型,并用于不同的场景。有些消息不需要Code字段来描述具体类型参数,仅用Type字段表示消息类型。比如,ICMP Echo回复消息的Type字段设置为0。有些ICMP消息使用Type字段定义消息大类,用Code字段表示消息的具体类型。比如,类型为3的消息表示目的不可达,不同的Code值表示不可达的原因,包括目的网络不可达(Code=0)、目的主机不可达(Code=1)、协议不可达(Code=2)、目的TCP/UDP端口不可达(Code=3)等。

1.4 ICMP应用-Tracert
ICMP的另一个典型应用是Tracert。向一个目的地,如下图的30.0.0.2/24执行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端口号。
总结:
1.Ping使用的是哪两个ICMP消息?
答:Ping利用ICMP Echo request请求消息(Type值为8)来发起检测目的可达
性。目的端收到ICMP Echo请求消息后,根据IP报文头中的源地址向源端发送
ICMP Echo replay回复消息(Type值为0)
2. 当网络设备收到TTL值为0的IP报文时,会如何操作?
答:如果IP数据包在到达目的地之前TTL值已经降为0,则收到IP数据包的网络设备会丢弃该数据包,并向源端发送ICMP消息通知源端TTL超时。