一.实验目的
1、了解网络连通性测试的方法和工作原理
2、了解网络路径跟踪的方法和工作原理
3、掌握 MTU 的概念和 IP 分片操作
4、掌握 IP 分组生存时间(TTL)的含义和作用
5、掌握路由表的作用和路由查找算法
二.预备知识
1、ICMP 原理和作用
2、Windows 系统中的 Ping 命令及其各种选项
3、Windows 中的 Tracert 命令及其各种选项
三.实验原理
“PING”这个名字源于声纳定位操作。PING 程序的目的是测试另一台主机是否可达,它发送 ICMP 回送请求报文给被测主机,并等待返回的 ICMP 回送应答或差错报告报文。ICMP 协议(RFC 792)是 IP 协议的辅助协议,提供差错报告和查询机制。
一台主机的可达性不仅取决于 IP 层是否可达,还取决于使用的高层协议及端口号。仅当被测主机可达时,PING 程序才能收到返回的 ICMP 回送应答报文,并能测出到该主机的往返时间。如果被测主机不可达,PING 程序会收到一些 ICMP 差错报告报文,甚至收不到任何返回信息。根据 ICMP 差错报告报文的类型可粗略判定主机不可达的原因。
不同的物理网络具有不同的最大传送单元(MTU)值,因此可能需要对 IP 分组进行分片操作使其能够通过这些物理网络。当 IP 分组被分片时,需要修改分组头中的标志、分片偏移和总长度值,其余各字段将被复制到所有分片中。已经分片的 IP 分组在遇到具有更小 MTU 的网络时还会被再次分片。
TTL 字段是由发送端初始设置在 IP 分组首部中的一个 8 bit 字段,不同操作系统上的不同应用程序指定的 TTL 初始值不同。路由器在转发每个 IP 分组时需要将该分组的TTL 值减 1 或减去该分组在路由器中停留的秒数。由于大多数路由器转发 IP 分组的时延都小于 1 秒钟,因此 TTL 最终成为一个跳站计数器,即分组每经过一台路由器其 TTL 值被减 1。TTL 字段的目的是为了防止分组在选路时被无休止的转发。当路由器收到一份需转发的 IP 分组时,如果该分组的 TTL 值为 1,路由器则丢弃该分组,并向分组源发送一份 ICMP 的TTL 超时报文。
TRACE 程序使用 IP 分组首部的TTL 字段(生存时间)和 ICMP 报文,让使用者可以看到IP 分组从一台主机传到另一台主机所经过的路由。TRACE 程序首先发送一份TTL 值为 1 的 IP 分组给目的主机,处理该 IP 分组的第 1 个路由器即会返回一份以自己的 IP 地址为源的携带有 ICMP 超时报文的 IP 分组,这样 TRACE 程序就得到了该路径中第 1 个路由器的 IP 地址。然后,TRACE 程序发送一份 TTL 值为 2 的 IP 分组,同样又可获得该路径中第 2 个路由器的 IP 地址。TRACE 程序不断增加所发送 IP 分组的 TTL 值直至 IP 分组到达目的主机,即可获得到目的主机所经过的每一个路由器地址。
但是,IP 分组的目的主机不处理该分组的 TTL 值,即使收到 TTL 值为 1 的 IP 分组也不会丢弃该分组并产生一份 ICMP 超时报文。因此,TRACE 程序必须判断 IP 分组是否已到达目的主机,不同操作系统上的 TRACE 程序的判断方法不同。目前通常有两种
实现方法:一种是利用“端口不可达”的 ICMP 差错报文,另一种则是使用 ICMP 回送请求和回送应答报文。
在前一种方法中,TRACE 程序发给目的主机的IP 分组中携带的是一份UDP 数据报,该UDP 数据报的目的端口是一个目的主机上任一应用程序都不可能使用的UDP 端口(通常大于 30000)。当该 IP 分组到达目的主机时,目的主机的 UDP 模块会产生一份“端口不可达”的 ICMP 差错报文返回给TRACE 程序。这样,TRACE 程序即可根据收到的ICMP报文是超时还是端口不可达来判断何时结束。
在后一种方法中,TRACE 程序发给目的主机的 IP 分组中携带的是 ICMP 回送请求报文。当该 IP 分组到达目的主机时,目的主机即会返回一份 ICMP 回送应答报文给TRACE 程序。这样,TRACE 程序即可根据收到的 ICMP 报文是超时还是回送应答来判断何时结束
四.实验内容
|
五.实验步骤
实验步骤详见TCP//IP实验指导书。由于步骤过长,就在此不在赘述。
六、实验数据及结果分析
1、按照显示顺序记录步骤 3 中PC2 的路由表信息:
No. | Network Destination | Netmask | Gateway |
1 | 0.0.0.0 | 0.0.0.0 | 192.168.11.254 |
2 | 127.0.0.0 | 255.0.0.0 | 127.0.0.1 |
3 | 192.168.11.0 | 255.255.255.0 | 192.168.11.2 |
4 | 192.168.11.2 | 255.255.255.255 | 127.0.0.1 |
5 | 192.168.11.255 | 255.255.255.255 | 192.168.11.2 |
6 | 224.0.0.0 | 240.0.0.0 | 192.168.11.2 |
7 | 255.255.255.255 | 255.255.255.255 | 192.168.11.2 |
Default Gateway | 192.168.11.254 |
【分析】
- 请按照网关(gateway)地址分类分析主机路由表中每条路由表项的网关地址的特征,路由的目的地,以及所采取的分组交付方式。
第一类:缺省路由
当接收到一个报文的目的地址网络不在路由表内,就会发送到缺省网关192.168.11.254。采用间接交付。
第二类:环回地址
当主机收到一个目的网络在127.0.0.0数据包时,主机就会接收该数据包。采用直接交付。
第三类:直连网络
当主机收到一个目的网络在192.168.11.0的数据包时,主机会将数据包通过192.168.11.2这个接口转发,路由的目的地是192.168.11.0/24上的一台设备。采用直接交付
第四类:本地主机路由
当主机收到一个目的IP地址为本机网卡的IP地址的数据包时,主机会接收该数据包。采取直接交付。
第五类:本地广播路由
当主机收到一个目的网络在直连网络的广播数据包时,主机会将数据包从192.168.11.2这个接口以广播的形式发出去。路由的目的地是192.168.11.0/24上的所有设备,采用直接交付。
第六类:组播路由
当系统收到一个组播数据包,系统会将分组直接从192.168.11.2这个接口以组播的防守转发出去。路由的目的地是192.168.11.0/24上的某些设备,采用的是直接交付。
第七类:广播路由
当系统收到一个广播数据包,系统会将分组直接从192.168.11.2这个接口转发出去。目的地是局域网内的所有设备,采用直接交付。
- 本实验中PC2 将使用哪条路由发送对目的主机的ping 报文?
第一条,缺省路由,即发送给默认网关。
2、记录步骤 4 中PC2 上显示的PING 命令选项-n、-l、-f 的含义。
-n count :Number of echo requests to send(要发送的回显请求次数)
-l size: Send buffer size(发送缓冲区的大小)
-f : Set Don’t Fragment flag in packet(在数据包中设置不分段标记)
3、记录步骤 6 中PC2 上的 ping 命令回应信息,并按分组的捕获顺序记录该步骤在子网A 和子网 B 上捕获的ICMP 报文信息:
Ping命令 | Ping回应信息 | |||||
Ping -n l 192.168.22.3 | Reply from 192.168.22.3:bytes=32 time=271ms TTL=124 | |||||
子网 | IP分组首部 | ICMP报文首部 | ||||
TTL | 源IP地址 | 目的IP地址 | Type | Code | 报文类型 | |
A | 128 | 192.168.11.2 | 192.168.22.3 | 8(Echo request) | 0 | Echo request |
124 | 192.168.22.3 | 192.168.11.2 | 0(Echo reply) | 0 | Echo reply | |
B | 124 | 192.168.11.2 | 192.168.22.3 | 8(Echo request) | 0 | Echo request |
128 | 192.168.22.3 | 192.168.11.2 | 0(Echo reply) | 0 | Echo reply |
说明:IP 地址用点分十进制表示,其他值均用十进制表示。
【分析】解释 PING 命令回应信息中的 bytes、time 和 TTL 参数的含义。
Bytes:报文的字节数
Time:发送ICMP请求到收到回应的之间的时间。
TTL:生存时间
- 记录步骤 7 中PC2 上的 ping 命令回应信息,并按分组的捕获顺序记录该步骤在子网
A 和子网 B 上捕获的ICMP 报文的 IP 分组头信息:
Ping命令 | Ping回应消息 | ||||||
Ping -n 1 -l 1500 192.168.22.3 | Reply from 192.168.22.3:bytes=1500 time=330ms TTL=124 | ||||||
子网 | IP分组首部 | ||||||
总长度 | 标识 | 不分片 | 还有分片 | 分片偏移 | 源IP地址 | 目的IP地址 | |
A | 1500 | 74 | 0 | 1 | 0 | 192.168.11.2 | 192.168.22.3 |
48 | 74 | 0 | 0 | 185 | 192.168.11.2 | 192.168.22.3 | |
796 | 103 | 0 | 1 | 0 | 192.168.22.3 | 192.168.11.2 | |
48 | 103 | 0 | 0 | 185 | 192.168.22.3 | 192.168.11.2 | |
724 | 103 | 0 | 1 | 97 | 192.168.22.3 | 192.168.11.2 | |
B | 796 | 74 | 0 | 1 | 0 | 192.168.11.2 | 192.168.22.3 |
724 | 74 | 0 | 1 | 97 | 192.168.11.2 | 192.168.22.3 | |
48 | 74 | 0 | 0 | 185 | 192.168.11.2 | 192.168.22.3 | |
1500 | 103 | 0 | 1 | 0 | 192.168.22.3 | 192.168.11.2 | |
48 | 103 | 0 | 0 | 185 | 192.168.22.3 | 192.168.11.2 |
【分析】
- PC2 发出的 IP 分组(源 IP 地址 PC2,目的 IP 地址 PC3)在子网 A 和子网B 上分别有几个分片?这些分片分别是由实验拓扑中的哪些设备划分的? 为什么要划分这些分片?这些分片的重组操作将由实验拓扑中的哪台设备进行?
①在子网A有两个分片,在子网B有三个分片
②子网A中的两个分片是由PC2主机划分的,因为子网A的MTU是1500字节,而PC2要发送的数据部分就有1500字节,加上首部信息等等会超过MTU,所以会进行分片。
③子网B收到三个分片是由R3划分的,因为PC2发出的数据包在经过R3之后,由于R3-R4之间的链路带宽比较大,所以分组会选择这个路径,接下来下一跳网络的MTU是800,而第一个分组有1500字节,所以还需要被分片。
④分片重组操作由目的主机PC3完成。
- PC3 发出的 IP 分组(源 IP 地址 PC3,目的 IP 地址 PC2)在子网 A 和子网B 上分别有几个分片?这些分片分别是由实验拓扑中的哪些设备划分的? 为什么要划分这些分片?这些分片的重组操作将由实验拓扑中的哪台设备进行?
①PC3发出的IP分组在子网A会有3个分片,在子网B会有2个分片。
②子网B的分片由PC3划分,子网A的分片由R4划分。
③原因:在子网B中,MTU为1500字节,而PC3要发送的数据部分就有1500字节,加上首部信息等等会超过MTU,所以会进行分片,将分组划分长2个分片。
在子网A中会有三个分片的原因是:因为PC2发出的数据包在经过R3之后,由于R2-R4之间的链路带宽比较大,所以分组会选择这个路径,当分组经过路由器R4时,接下来下一跳网络的MTU是800,而第一个分组有1500字节,所以还需要被分片。
④分片重组操作由目的主机PC2完成。
- 在分片重组操作中,应根据分片首部中的什么信息判断收到的分片属于哪 个 IP 分组?属于同一 IP 分组的分片需按照分片首部中的什么信息进行重组?
应该根据分片首部中的“标识”字段判分片所收到的IP分组;属于同一 IP 分组的分片按照分片首部的“标识”字段中的第三位和“分片偏移”进行重组。
5、记录步骤 8 中PC2 上的 ping 命令回应信息。
步骤 | Ping命令 | PING回应消息 |
8 | Ping -n 1 -l 1500 -f 192.168.22.3 | Packet needs to be fragmented but DF set |
【分析】本步骤中是否捕获到 PC2 发送或接收的报文?结合 PING 回应信息解释其原因。
没有捕获到PC2发送或者接收的报文。
①PING回应消息的意思是,分组被分片才能正常传输。
②Ping -f命令使得分组不被分片,而子网A的最大的MTU只有1500字节,所以不会被传输。
6、记录步骤 9 中PC2 上的 ping 命令回应信息。
步骤 | Ping命令 | PING回应消息 |
9 | ping -n 1 192.168.22.20 | Request timed out |
【分析】
- 本步骤中是否捕获到 PC2 发送或接收的报文?结合 PING 回应信息解释其原因。
子网A内能捕获到PC2发送的PING请求报文,但是不能收到Reply报文。
原因:192.168.22.20是不存的主机的IP,所以无法给与PC2回应信息。
- 在 ping 时如果收到“Request timed out.”信息,是否能确定目的主机一定未开机响应或一定没有可达的路由?为什么?
不能,因为也有可能是分组丢失或者网络拥塞等原因。
7、记录步骤 10 中PC2 上的 ping 命令回应信息,并按分组的捕获顺序记录该步骤在子网A 上捕获的 ICMP 报文信息:
Ping命令 | PING回应信息 | ||||
Ping -n 10.1.1.1 | Reply from 192.168.11.254:Destination host unreachable | ||||
IP分组首部 | ICMP报文首部 | ICMP差错报文的数据 | |||
标识 | 源IP地址 | Type | Code | 标识 | 源IP地址 |
77 | 192.168.11.2 | 8 | 0 | - | - |
98 | 192.168.11.254 | 3 | 1 | 79 | 192.168.11.2 |
【分析】请指出步骤 9 和步骤 10 中目的主机可达性的差异之处,并解释其差异产生的原因。
①差异在于PING回应的消息不同。步骤9中只是目的主机不可达,但是步骤10中目的主机所在的网络和目的主机都不可达。
②差异产生的原因是:步骤9中目的地址所在的网络存在于整个拓扑当中,路由器有相应的表项;但是步骤10中目的主机所在的网络不在拓扑当中,路由器的路由表项中不会存在这个网络。
8、记录步骤 12 中主机上输入的 TRACE 命令及其回应信息,并按分组的捕获顺序记录该步骤在子网A 和子网 B 上捕获的如下报文信息:
子网 | IP分组首部 | ICMP报文首部 | ||||
TTL | 源IP地址 | 目的IP地址 | Type | Code | 报文类型 | |
A | 1 | 192.168.11.2 | 192.168.22.3 | 8 | 0 | Echo request |
255 | 192.168.22.3 | 192.168.11.2 | 11 | 0 | Time-to-live exceeded | |
2 | 192.168.11.2 | 192.168.22.3 | 8 | 0 | Echo request | |
254 | 192.168.22.3 | 192.168.11.2 | 11 | 0 | Time-to-live exceeded | |
3 | 192.168.11.2 | 192.168.22.3 | 8 | 0 | Echo request | |
253 | 192.168.22.3 | 192.168.11.2 | 11 | 0 | Time-to-live exceeded | |
4 | 192.168.11.2 | 192.168.22.3 | 8 | 0 | Echo request | |
252 | 192.168.22.3 | 192.168.11.2 | 11 | 0 | Time-to-live exceeded | |
5 | 192.168.11.2 | 192.168.22.3 | 8 | 0 | Echo request | |
124 | 192.168.22.3 | 192.168.11.2 | 11 | 0 | Echo reply | |
B | 1 | 192.168.11.2 | 192.168.22.3 | 8 | 0 | Echo request |
128 | 192.168.22.3 | 192.168.11.2 | 11 | 0 | Echo reply |
【分析】
- TRACE 程序根据什么报文中的什么信息获得每一跳路由器的 IP 地址?
根据返回的类型11(Time-to-live exceeded类型)的ICMP报文中的源IP地址获得每一跳路由器的 IP 地址。
- TRACE 程序在跟踪每一跳路由器时,发送了几个测试报文?这样做的目的是什么?
发送了3条测试报文。防止分组丢失或者网络拥塞,路由器收不到报文。
3)WinXP 系统的 TRACE 程序使用何种方法判断测试分组是否已到达目的主机?
根据应答信息中的源IP是否有目的主机的IP,若收到了来自目的主机的应答,说明了分组已经到达了目的主机。从下图中可以看到存在目的IP地址,所以分组一定到达了目的主机。
- 实验结论
- 总结 ICMP 差错报告机制的作用和 ICMP 差错报告报文中数据部分的作用。
①ICMP差错报告机制可以及时通告源主机报文不可达,出现了差错。
具体:ICMP差错报告机制只是向发生差错数据报的源端报告这个错误,但是不会纠正这个错误。
②ICMP 差错报告报文中数据部分的作用:通告源主机错误类型(终点不可达,源点抑制,超时,参数问题,路由重定向等)。并且数据部分不仅有类型还有代码,可以具体确定发生差错的原因。
- 交付出错的哪些 IP 分组不会产生 ICMP 差错报告报文?
①携带ICMP差错报告的数据报,不会再产生ICMP差错报文
②分片的数据段,且不是第一个分片
③具有多播地址的数据报
④特殊地址(127.0.0.0或0.0.0.0)的数据报
3、请根据实验中的TRACE 回应信息和实验拓扑图,写出路由器R1 的 F0/1 接口、R2 的 F0/1 和 S1/0 接口、以及 R3 和 R4 的所有接口的 IP 地址,并指出本实验中子网A 到子网 B 的通信路径。
路由器 | 接口的IP地址 |
R1 | F0/1:192.168.13.1 |
R2 | F0/1:192.168.24.1 S1/0:无法确定 |
R3 | F0/0:192.168.13.2 S1/0:无法确定 S1/1:192.168.34.2 |
R4 | F0/0: 192.168.24.2 S1/0:192.168.34.1 |
本实验中子网A 到子网B的通信路径是:PC2→R1→R3→R4→R2→PC3。
八、总结及心得体会
1.在此次实验当中,学习ICMP报文中的ping,以及常见的ICMP差错报告报文。还有使用trace命令跟踪报文的路径。
2.掌握了ICMP基本的差错报告机制和查询机制的内容。
3.在实验过程中,要认真仔细,不要把步骤操作顺序搞反了。
九、对本实验过程及方法、手段的改进建议
1.不借助wireshark分析数据,让学生们加深对相关协议报文格式的理解。