这是因为,当在PC1上执行"ping 172.16.1.1"命令后,PC1首先在路由表中找到了到达网络172.16.0.0/16的路由表项,然后就对数据包进行三层封装。当三层封装完成后,PC1就要根据172.16.1.1对应的MAC地址,对数据包进行二层封装。这是因为只有把正确的MAC地址封装进数据帧后,数据包才能在以太网中被正确的送达目的地,因为在以太网中只依据二层MAC地址,而不是三层IP地址传输数据。但这时当PC1在ARP表中查找172.16.1.1的MAC地址时,它并没有找到。

这时PC1就会发出一个广播包,询问谁有IP地址172.16.1.1的MAC地址,当PC2收到这个广播包后,发现172.16.1.1这个IP地址和自己的IP地址一样,就给PC1返回一个数据包,数据包中就包括有和172.16.1.1对应的MAC地址,当PC1收到这个数据包后,就会在自己的ARP表中添加与IP地址172.16.1.1对应的MAC地址表项,所以当再次执行"arp -a"命令后,就能看到多了这一项。

那为什么第一次执行"arp -a"命令时,PC1的ARP表中没有与172.16.1.1对应的MAC地址绑定呢?因为第一次在PC1上执行ping 172.16.1.1命令时,PC1在路由表中没有找到与网络172.16.0.0/16对应的路由,这时PC1就自动放弃了封装三层数据包的行为,既然三层数据包都没有进行封装,就更谈不上在PC1中进行二层封装了,所以PC1也就没有必要知道与172.16.1.1对应的MAC地址了,也就没有再发送一个广播包询问与172.16.1.1对应的MAC地址。所以,第一次执行"arp -a"命令时,PC1的ARP表中并没有与172.16.1.1对应的MAC地址表项。

8、既然现在知道在PC1上ping不通PC2是因为,在PC2上没有到达网络10.0.0.0/8的路由,那现在就在PC2上添加一条静态路由,如图10所示,格式和在PC1上添加到网络172.16.0.0/16的路由格式是一样的。

图10 在主机PC2上添加静态路由)

图10 在主机PC2上添加静态路由)

9、在PC2上添加完静态路由后,再在PC1上执行ping命令后,就能ping通了,如图11所示。因为ping包到达PC2后,也能在路由表中找到去往PC1网络10.0.0.0/8的路由了。

图11 在PC1上能够ping通PC2)

图11 在PC1上能够ping通PC2)


相关内容