广州大学计算机网络实验二:理解子网掩码、网关和ARP协议的作用(不同网段的ARP请求、ARP响应)
一、实验题目
利用ping命令来检验主机间能否进行正常的双向通信。在"ping"的过程中,源主机向目标主机发送ICMP的Echo Request报文,目标主机收到后,向源主机发回ICMP的Echo Reply报文,从而可以验证源与目标主机能否进行正确的双向通信。
实验的拓扑结构:如图(1)所示。
A与B为实验用的PC机,使用Windows操作系统。
二、实验步骤
步骤1:设置主机的IP地址与子网掩码:
A(1号机): 202.192.31.机号 255.255.248.0,
B(2号机): 202.192.30.机号 255.255.248.0,
两台主机均不设置缺省网关。
用 arp -d 命令清除两台主机上的ARP表,然后在A与B上分别用ping命令与对方通信,记录实验显示结果。
用 arp -a 命令可以在两台PC上分别看到对方的MAC地址,记录A、B的MAC地址。
步骤2:将A的子网掩码改为:255.255.255.0,其他设置保持不变。
操作1:
- 用 arp -d 命令清除两台主机上的ARP表,然后在A上"ping"B,记录显示结果。
- 用 arp -a 命令能否看到对方的MAC地址。
操作2:
- 接着在B上"ping"A,记录B上显示的结果,此时用 arp -a 命令能否看到对方的MAC地址。
步骤3:在前面实验的基础上,把A的缺省网关设为:202.192.31.235。
在A与B上分别用ping命令与对方通信,记录各自的显示结果
在A与B上分别用tracert命令追踪数据的传输路径,记录结果
三、分析各步骤的ping流程
1、步骤一不进行分析
2、步骤二
操作一:
- PCA ping PCB
1. PCA准备ICMP请求报文(目标地址为PCB);
2. PCA判断PCB不在同一个网段上;
3. PCA没有设置默认网关;
4. PCA删除ICMP请求报文,打印超时。
操作二:
- PCB ping PCA
1. PCB准备ICMP请求报文(目标地址为PCA);
2. PCB判断PCA在同一个网段上;
3. PCB查ARP表发现没有PCA的MAC地址信息;
4. PCB准备ARP请求报文(目标地址为PCA),缓存ICMP请求报文,发送ARP请求报文;
5. 交换机进行广播;
6. PCA接收到ARP请求报文;
7. PCA判断PCB不在同一网段上,删除该ARP请求报文;
8. PCB等待ARP响应报文超时,删除ICMP请求报文,打印超时。
所以两PC的ARP表中都没有对方的MAC地址。
3、步骤三
**注意在前面实验的基础
- PCA ping PCB
1. PCA准备ICMP请求报文(目标地址为PCB);
2. PCA判断PCB不在同一个网段上;
3. PCA设置了默认网关;
4. PCA查ARP表发现没有网关的MAC地址信息;
5. PCA准备ARP请求报文(目标地址为网关),缓存ICMP请求报文,发送ARP请求报文;
6. 交换机进行广播ARP请求报文;
7. 网关接收到ARP请求报文,返回ARP响应报文;
8. 特别说一下PCB
- 假设PCB的ARP表中有PCA的MAC地址信息,PCB会读取这一份ARP请求报文,即使这份ARP请求报文的目的地址不是PCB。PCB读取到ARP请求报文的源地址(即PCA)也在自己的ARP表中,会用于更新PCB的ARP表;
- 但是步骤三是在前面实验的基础,PCB的ARP表中没有PCA的MAC地址信息。当PCB读取到这份ARP请求报文的目的地址不是PCB,就是丢弃该ARP请求报文。
9. 交换机进行单播ARP响应报文;
10. PCA收到ARP响应报文,将ICMP请求报文从缓存中取出,发送;
11. 交换机向网关进行单播ICMP请求报文;
12. 网关接收到ICMP请求报文;
13. 网关查ARP表发现没有PCB的MAC地址信息;
14. 网关获取PCB的MAC地址信息类似4~10;
15. 网关发送ICMP请求报文,
16. 交换机进行向PCB单播ICMP请求报文;
17. PCB收到ICMP请求报文,准备ICMP响应报文(目标地址为PCA);(之后同步骤二中的操作二)
18. PCB判断PCA在同一个网段上;
19. PCB查ARP表发现没有PCA的MAC地址信息;
20. PCB准备ARP请求报文,缓存ICMP请求报文,发送ARP请求报文;
21. 交换机进行广播;
22. PCA接收到ARP请求报文;
23. PCA判断PCB不在同一网段上,删除该ARP请求报文;
24. PCB等待ARP响应报文超时,删除ICMP响应报文,打印超时。
- PCB ping PCA
1. 同步骤二中的操作二。
四、问题
- 网上多份实验报告都是显示
1. 步骤二中最后PCB的ARP表中有PCA的MAC地址信息;
2. 步骤三能ping通。 - 这是我完全想不通的,我的实验流程分析是根据实验软件的仿真进行的;
- 我也问过老师,老师是赞成第一点的,但是解释的很模糊不清除,没有解决我的问题;
- 第2点在第1点的基础上是正确的,但是实验结果告诉我第1点是错误的;
- 我结合我自己在课上所学和仿真分析还是认为我的流程和结果是对的,希望有人和我讨论一下 第1点 是怎么实现的。
五、问题的最后解决
- 上网查阅相关资料,(发现有人和我有一样的疑问)[http://bbs.pceva.com.cn/thread-124423-1-1.html],然后我发现他的软件和我的是一样的,是packetTracer,
- 并且我发现能成功得到第一点的结果都是(用系统自带命令行的)[https://wenku.baidu.com/view/39fde1d9fc4ffe473268ab59.html];
- 所以我用两台电脑按实验要求配了ip、网关、子网掩码,用wireShark在PCA上抓包,得出了第一点结果,下面重新进行流程分析。
六、重新分析流程
2、步骤二
操作一:
- PCA ping PCB (与原来相同)
1. PCA准备ICMP请求报文(目标地址为PCB);
2. PCA判断PCB不在同一个网段上;
3. PCA没有设置默认网关;
4. PCA删除ICMP请求报文,打印PING传输失败。
操作二:
- PCB ping PCA
1. PCB准备ICMP请求报文(目标地址为PCA);
2. PCB判断PCA在同一个网段上;
3. PCB查ARP表发现没有PCA的MAC地址信息;
4. PCB准备ARP请求报文(目标地址为PCA),缓存ICMP请求报文,发送ARP请求报文;
5. 交换机进行广播;
6. PCA接收到ARP请求报文;(第7点开始更改)
7. PCA发送ARP响应报文;
8. 交换机进行单播;
9. PCB收到ARP响应报文,取出ICMP请求报文,发送;
10. 交换机进行单播;
11. PCA收到ICMP请求报文;
12. PCA判断PCB不在同一网段,删除ICMP请求报文;
13. PCB接收不到ICMP响应报文,打印超时。
3、步骤三
注意在前面实验的基础
- PCA ping PCB
1. PCA准备ICMP请求报文(目标地址为PCB);
2. PCA判断PCB不在同一个网段上;
3. PCA设置了默认网关;
4. PCA查ARP表发现没有网关的MAC地址信息;
5. PCA准备ARP请求报文(目标地址为网关),缓存ICMP请求报文,发送ARP请求报文;
6. 交换机进行广播ARP请求报文;
7. 网关接收到ARP请求报文,返回ARP响应报文(目标地址为PCA);
8. 交换机进行单播ARP响应报文;
9. PCA收到ARP响应报文,将ICMP请求报文从缓存中取出,发送;
10. 交换机向网关进行单播ICMP请求报文;
11. 网关接收到ICMP请求报文;
12. 网关查ARP表发现没有PCB的MAC地址信息;
13. 网关获取PCB的MAC地址信息类似4~10;
14. 网关发送ICMP请求报文,
15. 交换机进行向PCB单播ICMP请求报文;
16. PCB收到ICMP请求报文,准备ICMP响应报文(目标地址为PCA);(之后同步骤二中的操作二)
17. PCB判断PCA在同一个网段上;
18. PCB查ARP表发现有PCA的MAC地址信息;
19. PCB发送ICMP响应报文;
20. 交换机进行单播;
21. PCA接收到ICMP响应报文,打印数据。
- PCB ping PCA(类似步骤二中的操作二)
1. PCB准备ICMP请求报文(目标地址为PCA);
2. PCB判断PCA在同一个网段上;
3. PCB查ARP表发现有PCA的MAC地址信息;
4. PCB发送ICMP请求报文;
5. 交换机进行单播;
6. PCA接收到ICMP请求报文,准备ICMP响应报文(目标地址为PCB);
7. PCA判断PCB不在同一个网段上;
8. PCA设置了默认网关;
9. PCA查ARP表发现有网关的MAC地址信息;
10. PCA发送ICMP响应报文;
11. 交换机进行单播(目的地址为网关);
12. 网关接收到ICMP响应报文,判断目的地址为同一网段且ARP表中有PCB的MAC地址信息,转发该ICMP响应报文;
13. 交换机进行向PCB单播ICMP响应报文;
14. PCB接收到ICMP响应报文,打印数据。
关于TTL的分析
步骤三中还需要分析TTL
-
PCA ping PCB
1. PCB准备的ICMP响应报文,IP协议中TTL设置为128;
2. 途中没有经过路由器,直接到达PCA;
2. PCA接收到ICMP响应报文,TTL为128; -
PCB ping PCA
1. PCA准备ICMP响应报文,IP协议中TTL设置为128;
2. 途中经过默认网关,即路由器,TTL-1;
3. PCB接收到ICMP响应报文,TTL为127;
总结
-
ARP协议是第二层的协议,MAC地址是在同一个网段下才使用的,如果PCA收到了ARP的广播请求,不可能是外面的网段通过路由传进来的,所以PCA不需要判断源地址是不是同一个网段下,只要目的IP地址是自己,就单播ARP响应报文。
- 当接收到ARP请求,目的地址不为自己,源地址为广播。若ARP表中有源地址,更新该项;若没有,弃帧;
- 当接收到ARP请求,目的地址为自己,源地址为广播。发送ARP响应;
- 一般ARP协议是广播ARP请求,单播ARP响应。不过更新迭代这么久了,书本内容也跟不上,比如多了免费ARP,如今无论ARP请求还是ARP响应,都有单播和广播。
-
packetTracer软件是有问题的,按着它的流程分析也很有道理,但是实际上运行并不是这样的