实验七 ICMP 协议分析实验
1.ICMP 协议介绍
ICMP(Internet Control Message Protocol)是因特网控制报文协议[RFC792]的缩写,是因特网的标准协议。ICMP允许路由器或主机报告差错情况和提供有关信息,用以调试、监视网络。
(1)ICMP 的报文格式
图1 ICMP 回送请求和应答报文格式
在网络中,ICMP 报文将封装在IP数据报中进行传输。由于ICMP的报文类型很多,且又有各自的代码,因此,ICMP并没有一个统一的报文格式供全部 ICMP 信息使用,不同的 ICMP 类别分别有不同的报文字段。
ICMP报文只在前4个字节有统一的格式,即类型、代码和校验和 3 个字段。接着的4 个字节的内容与ICMP 报文类型有关。图1描述了ICMP 的回送请求和应答报文格式,ICMP 报文分为首部和数据区两大部分。其中:
* 类型:一个字节,表示ICMP 消息的类型,内容参见表1;
* 代码:一个字节,用于进一步区分某种类型的几种不同情况;
* 校验和:两个字节,提供对整个ICMP 报文的校验和;
(2)ICMP 的报文类型
ICMP 报文的种类可以分为ICMP 差错报告报文和ICMP 询问报文两种,表5 列出了已定义的几种ICMP 消息。
表1 ICMP 消息及类型码
类型的值 ICMP 消息类型 类型的值 ICMP 消息类型
0 回送(Echo)应答 12 参数出错报告
3 目的站点不可达 13 时间戳(Timestamp)请求
4 源站点抑制(Source quench) 14 时间戳(Timestamp)应答
5 路由重定向(Redirect) 15 信息请求
8 回送请求 16 信息应答
9 路由器询问 17 地址掩码(Address mask)请求
10 路由器通告 18 地址掩码(Address mask) 应答
11 超时报告
其中差错报告报文主要有目的站点不可达、源站点抑制、超时、参数问题和路由重定向5种;ICMP 询问报文有回送请求和应答、时间戳请求和应答、地址掩码请求和应答以及路由器询问和通告4种。
(3)ICMP 常见的消息类型
下面介绍几种常用的ICMP 消息类型。
* 目的站点不可达(3)
产生 “目的站点不可达”的原因有多种。在路由器不知道如何到达目的网络、数据报指定的源路由不稳定、路由器必须将一个设置了不可分段标志的数据报分段等情况下,路由器都会返回此消息。如果由于指明的协议模块或进程端口未被激活而导致目的主机的IP 不能传送数据报,这时目的主机也会向源主机发送 “目的站点不可达”的消息。
为了进一步区分同一类型信息中的几种不同情况,在ICMP 报文格式中引入了代码字段,该类型常见信息代码及其意义如下:
表2 ICMP 类型3 的常见代码
代码 描述 处理 代码 描述 处理
0 网络不可达; 无路由到达主机 1 主机不可达; 无路由到达主机
2 协议不可用; 连接被拒绝 3 端口不可达; 连接被拒绝
4 需分段但DF 值为 0; 报文太长 5 源路由失败; 无路由到达主机
- 源站点抑制 (4)
此消息类型提供了流控制的一种基本形式。当数据报到达得太快,路由器或主机来不及处理时,这些数据报就必须被丢弃。丢弃数据报的计算机就会发一条“源站点抑制”的ICMP报文。“源站点抑制”消息的接收者就会降低向该消息发送站点发送数据报的速度。 - 回送请求 (8)和回送应答 (0)
这两种ICMP消息提供了一种用于确定两台计算机之间是否可以进行通信的机制。当一个主机或路由器向一个特定的目的主机发出ICMP 回送请求报文时,该报文的接收者应当向源主机发送ICMP 回送应答报文。 - 时间戳请求 (15)和时间戳应答 (16)
这两种消息提供了一种对网络延迟进行取样的机制。时间戳请求的发送者在其报文的信息字段中写入发送消息的时间。接收者在发送时间戳之后添加一个接收时间戳,并作为时间戳应答消息报文返回。 - 地址掩码请求 (17)和地址掩码应答 (18)
主机可以用 “地址掩码请求”消息来查找其所连接网络的子网掩码。主机在网络上广播请求,并等待路由器的包含子网掩码的 “地址掩码应答”消息报文的到来。 - 超时报告 (11)
当一个数据报的TTL 值到达 0 时,路由器将会给源主机发送超时报文。
2.基于ICMP 的应用程序
目前网络中常用的基于ICMP 的应用程序主要有ping 命令和tracert 命令。
(1)ping 命令
Ping 命令是调试网络常用的工具之一。它通过发出ICMP Echo 请求报文并监听其回应来检测网络的连通性。图2显示了Ethereal 捕获的ICMP Echo 请求报文和应答报文。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201123170558433.png#pic_center)
图2 ICMP Echo 请求报文和应答报文
Ping 命令只有在安装了TCP/IP 协议之后才可以使用,其命令格式如下:
ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS] [-r count] [-s count]
[[-j host-list] | [-k host-list]] [-w timeout] target_name
这里对实验中可能用到的参数解释如下:
* -t :用户所在主机不断向目标主机发送回送请求报文,直到用户中断;
* -n count:指定要Ping 多少次,具体次数由后面的count 来指定 ,缺省值为4;
* -l size:指定发送到目标主机的数据包的大小 ,默认为32字节,最大值是65,527;
* -w timeout:指定超时间隔,单位为毫秒;
* target_name:指定要 ping 的远程计算机。
3.实验环境与说明
(1)实验目的
掌握ping 和tracert 命令的使用方法,了解ICMP 协议报文类型及其作用。
执行ping 和tracert 命令,分别截获报文,分析截获的ICMP 报文类型和ICMP 报文格式,理解ICMP 协议的作用。
(2)实验设备和连接
实验设备和连接图如图3 所示,一台锐捷R1760 路由器连接2 台PC 机,分别命名为 PC1、PC2。
图3 ICMP 协议分析实验连接图
4.实验步骤
步骤1:按照如图22 所示连接好设备;
步骤2:完成路由器和PC1、PC2 的相关配置;(编者注:实验室中任何一台PC都可以作为模型中的PC1。PC2用202.202.43.125等另一网段机器代理即可。)
路由器的配置参考如下:
router#configure terminal
router(config)#interface fastEthernet 1/0
router(config-if)#ip address 172.16.10.1 255.255.255.0
router(config-if)#no shutdown
router(config-if)#interface fastEthernet 1/1
router(config-if)#ip address 172.16.20.1 255.255.255.0
router(config-if)#no shutdown
PC1 和PC2 的IP 地址、子网掩码、网关按照图中有关参数配置。
步骤3:分别在PC1 和PC2 上运行 wireshark,开始截获报文,为了只截获和实验内容有关的报文,将wireshark的Captrue Filter 设置为 “No Broadcast and no Multicast ”;
步骤4:在PC1上以PC2 为目标主机,在命令行窗口执行Ping 命令;
请写出执行的命令:ping 172.27.64.119
步骤 5:停止截获报文,将截获的结果保存为 ICMP-1-学号,分析截获的结果,回答下列问题:
1)您截获几个ICMP 报文?分别属于那种类型?
总共截获8个ICMP报文
分别属于回送请求和回送应答两种类型
2)分析截获的ICMP 报文,查看表2 中要求的字段值,填入表中。
表2 ICMP 报文分析
报文号 源IP 目标IP ICMP 报文格式
类型 代码 标识 序列号
1436 172.27.64.120 172.27.64.119 8 00 0x0001 1
1437 172.27.64.119 172.27.64.120 0 00 0x0001 1
1528 172.27.64.120 172.27.64.119 8 00 0x0001 2
1529 172.27.64.119 172.27.64.120 0 00 0x0001 2
1578 172.27.64.120 172.27.64.119 8 00 0x0001 3
1579 172.27.64.119 172.27.64.120 0 00 0x0001 3
1629 172.27.64.120 172.27.64.119 8 00 0x0001 4
1630 172.27.64.119 172.27.64.120 0 00 0x0001 4
3)分析在上表中哪个字段保证了回送请求报文和回送应答报文的一一对应,仔细体会Ping 命令的作用。
序号保证了请求报文和回送报文的一一对应,ping可以用来检验网络能否通。
步骤6:在PC1 上运行wireshar 开始截获报文;
步骤7:在PC1 上执行Tracert 命令,向一个本网络中不存在的主机发送数据报,如:Tracert 百度
步骤 8:停止截获报文,将截获的结果保存为 ICMP-2-学号,分析截获的报文,
回答下列问题:
1)截获了报文中哪几种ICMP 报文?其类型码和代码各为多少?
共截获了3种ICMP报文
Echo request 0 0
Echo reply 8 0
Time-to-live exceeded 11 0
2)在截获的报文中,超时报告报文的源地址是多少?这个源地址指定设备和PC1 有何关系?
源地址39.156.27.1,这个地址是百度IP39.156.66.14的网关地址
3)通过对两次截获的ICMP 报文进行综合分析,仔细体会ICMP 协议在网络中的作用。
ICMP报文有两种:差错报告报文和询问报文。其中差错报告报文用来报告差错类型,询问报文用与寻找目标主机应用有ping、tracert,时间戳可以用来计算RTT时间。