Skip to content

Latest commit

 

History

History
62 lines (42 loc) · 2.78 KB

200604201058.txt.md

File metadata and controls

62 lines (42 loc) · 2.78 KB

5.28 如何禁止免费ARP

http://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。测试无误。