IP地址是如何转换为MAC地址,进而实现网络连接的呢?在局域网中,这是通过ARP协议来完成的。为了便于快速查找IP地址与MAC地址,ARP协议自身设计了缓存功能。
然而,这个缓存却在某些情况下给我们的实际工作带来了麻烦。特别是网管在进行一些网络测试时,常常因为ARP缓存掩盖了网络变化的“真相”,而走上“歧途”,做出一些错误的判断,导致原本正常的网络出现大问题。现在,就让我们来看看ARP缓存是如何掩盖“真相”的。
网络环境
三台采用Windows 2000系统的计算机。A计算机的IP地址为192.168.0.1,计算机名为student1;B计算机的IP地址为192.168.0.2,计算机名为student2;C计算机的IP地址为192.168.0.3,计算机名为student3。
缓存漏洞
在A机器上运行“ping -a 192.168.0.2”命令,能够正确解析出student2。再运行“ping student2”命令也能够正确解析出IP地址192.168.0.2。
笔者把B机器的计算机名改为student4并重启,把C机器的计算机名改为student2并重启。此时,笔者在A机器上运行“ping -a 192.168.0.2”命令,能够解析出新的计算机名student4,但在运行“ping student2”命令时,却发现解析出的IP地址仍然是192.168.0.2。
随后,笔者又在A机器上运行“ping -a 192.168.0.3”命令,能够解析出计算机名student2,而运行“ping student2”命令还是解析出IP地址为192.168.0.2。
由此可见,网络中的计算机名虽然已经发生了变化,但在网管进行测试时,计算机却不能及时反映出“变化”。显然,真相被“掩盖”了。
总结
当我们使用“ping”来查找IP地址或使用“ping ?a”来查找计算机名的时候,实际上计算机调用的是ARP协议。如果是首次查找IP或计算机名,计算机会通过ARP协议发送广播,当查到相关内容后就会把该内容返还给用户,并把相应的内容存在ARP缓存中,当再次查找同样的内容时,ARP协议会先查看自己的缓存,如果发现有匹配的信息它就会直接把该内容反馈给用户,如果缓存中没有该内容它才会进行查找。这就造成了一种现象,当存在于ARP缓存中的信息是旧信息(该信息没有得到更新)时,ARP反馈给用户的也将是这些旧信息(即错误信息),ARP缓存就这样掩盖了网络已发生变化的“真相”。
可以看出,由于ARP缓存的原因,计算机名和IP的对应关系已经混乱。修改B机器的计算机名后,A机器并没有马上进行计算机名同步更新,也就是说在A机器上的ARP缓存中仍然保留着student2与192.168.0.2的对应关系。虽然“ping -a 192.168.0.2”,可以解析出新的计算机名student4,但“ping student2”时系统还是将它映射为以前的192.168.0.2,而不是更新后的192.168.0.3。产生这个问题的罪魁祸首就是ARP缓存中的错误信息,我们只能通过重新启动计算机A以清空ARP缓存或执行“arp ?d”命令删除相应的ARP缓存内容来解决这个问题。