360家庭防火墙5pro散热 360家庭防火墙5pro( 二 )


16.这样通讯的双方都了解了对方的物理地址,通讯过程正式建立 。通常ARP协议都在支持广播的网络上使用,比方以太网,这种数据包不能跨物理网段使用,即不能跨越一个路由器(除路由器本身还用作ARP代理以外) 。
17. 在实际的ARP协议软件的实现中还有一些应该注意的事项:每台计算机上都有一个ARP缓冲,它保存了一定数量的从IP地址到MAC地址的映射,同时当一个ARP广播到来时,虽然这个ARP广播可能与它无关,但ARP协议软件也会把其中的物理地址与IP地址的映射记录下来,这样做的好处是能够减少ARP报在局域网上发送的次数 。
18.同时,ARP缓冲中IP地址与物理地址之间的映射并不是一但生成就永久有效,每一个ARP映射表项都有自己的时延,如果过了一定的时间还没有新的ARP到来,那么这个ARP映射就从缓冲中被删除了 。
19.那么下一次计算机向这个IP地址发送数据包的时候必须来一次新的查询 。本地网络IP 查找的原理事实上Windows 本身就用ARP来确定自己的IP地址是否与网络上的另一台计算机发生了冲突 。
20.当一个ARP包到来时,Windows 如果检查到其中的IP地址与本机上的相同,而物理地址不同,这时Windows 就会向用户报告这个IP地址已经被别人占用 。
21.非常有意思的时,Windows 对待IP地址是以先来后到的顺序分配,如果已经有人先占了,那么本机的网络接口就会被禁用 。
22.这也是非常恼人的“特色”因为一旦开机后有了第一次冲突,以后的任何网络操作就都无效了 。Windows XP 有了一定的进步,它在发现冲突以后并不禁用接口,而是允许用户进行修复 。
23.其实用sniffer可以看到所谓的“修复”也不过是发了几个ARP包出去,把IP“抢”回来 。在以前的文章中我描述了一个用ICMP 回送请求(类似PING)进行IP查找的程序 。
24.这个程序用并发的几十个线程同时PING网络上的多台计算机,如果回送请求被正确的应答了,那么可以认为这个IP地址已经被占用,如果没有,我们就宣称它是空闲的 。
25.然而它有优点也有缺点,其优点是能够PING很远的计算机,即使不在同一个物理网段上,缺点是当目标计算机上安装了防火墙并禁止了ICMP包,或者采用了防ICMP flood 攻击的规则以后都有可能让ICMP回送请求得不到应答 。
【360家庭防火墙5pro散热 360家庭防火墙5pro】26. ARP的优点与缺点正好与ICMP相反 。它无法跨物理网段进行IP查找,但是由于没有防火墙禁止ARP包的通过(想想看,如果禁止了ARP包,也就等于不让人家知道你的物理地址,那么实际上也就是将自己的计算机同网络断开了),所以ARP包的IP查找结果一定是非常精准的 。
27.在实现了一个原始的ARP IP查找版本以后,我发现其结果并不准确,有些已经没有人使用的IP地址被错误的报成有人占用了,难道我的判断是错误的?
28.当然不,这种错误的原因是在Windows 的ARP缓冲中 。实际上,在发送一个ARP报文的时候,Windows会首先检查本机的ARP缓冲,如果发现了已经有对应的ARP表项,而且还没有过期的话,Windows 并不会发送这个报文,而是直接返回给调用者这个ARP表项的内容 。
29.这样一来,假设有计算机中途掉网,而它的ARP表项还没有过期,那么这个程序仍然能够得到它的IP到MAC的映射,自然也就会错误的宣称这个IP地址还在使用中了 。
30.在运行这个程序前,我使用arp –d(事实上,在看了本文以后,你就可以实现一个这样的arp程序了)这个命令来删除缓冲中所有的ARP表项,然后得到的结果就非常准确了 。
31.IP Helper API 提供了管理ARP缓冲的过程,所以我修改了这个程序,把arp –d的功能集成到了自己的程序中来 。

推荐阅读