5.28 如何禁止免费ARP https://scz.617.cn/windows/200604201058.txt Q: 每台主机进入LAN时会向整个子网发送免费ARP请求报文。该ARP请求报文利用广播方 式请求解析自己的IP地址,但目标IP不是全零,而是等于源IP。免费ARP使得子网内 活动主机的ARP Cache中都缓存了发送者的IP-MAC条目,这有助于提高性能。 对于Windows NT/2000,启动时发送免费ARP请求报文意在探测IP冲突。当TCP/IP协议 栈首次初始化或者增加了一个新IP时,向子网发送免费ARP请求报文,如果异己主机 响应了免费ARP请求报文,表示该IP已经被使用。此时Windows系统继续启动,但相应 的网络接口(不是网卡)被内部禁用。由于免费ARP会刷新子网内活动主机的ARP Cache, 该机发送另一个ARP报文修复子网内活动主机的ARP Cache。已经占用该IP的Windows 系统仅得到警告,仍可继续使用该IP。这意味着先抢占IP者优先。 如何禁用这个特性? A: microsoft 免费ARP请求报文的发送数量受注册表项ArpRetryCount控制,该值不是重试次数,设 成N就发送N个,而不是N+1个。 NT 4: -------------------------------------------------------------------------- REGEDIT4 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters] "ArpRetryCount"=dword:00000000 -------------------------------------------------------------------------- 2000: -------------------------------------------------------------------------- Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters] "ArpRetryCount"=dword:00000001 -------------------------------------------------------------------------- NT是设ArpRetryCount为0,2000则设ArpRetryCount为1。2000只认1、2、3三种值, 如果设为0,实际最后用了缺省值3,这导致3个免费ARP请求报文被发送出去。 D: scz 微软有些自相矛盾。NT设为0还可以理解,2000设为1就应该是发送一次免费ARP请求 报文,这怎么成了禁用呢。难道说2000对1做了特殊处理,就是禁用,同时最少发送 数量是2? 最终忍不住测试了一下,结论是2000干脆无法禁用免费ARP,设为1就是只发送一次免 费ARP请求报文。OS启动或在NCPA上修改、新增IP时根据ArpRetryCount的设置发送免 费ARP请求报文。 A: testyy@netexpert 2006-5-14 18:51 scz对微软KB理解错了。280524的意思是说,2000 SP3之前的2000只认[1,3],设为0 时自动选用3。219374显然也意识到这个问题,凑合的办法就是设为1,这样只发送一 次免费ARP请求报文,总比设为0时发送3次要好些。 2000 SP3开始认0了,设为0就禁止免费ARP。测试无误。