• IP冲突 Gratuitous ARP


    主机有时会使用自己的IP地址作为目标地址发送ARP请求。这种ARP请求称为Gratuitous ARP,主要有两个用途:
    (1)检查重复地址(如果收到ARP响应表明存在重复地址)。

           在windows NT下,网卡启动时,TCP/IP协议栈初始化时会最大发送3次Gratuitous ARP请求(初始化1次,0.5s,1s时各一次),当请求收到回应,Window NT将关闭协议栈,并警告用户IP冲突。

          弹框或小黄条大家应该都不陌生,如果设置的只有一个静态IP,因为协议栈被关闭,无法上网。查看ipconfig 看不到受影响的IP地址。也就是说,IP地址谁先拿到就是谁的。


    (2)用于通告一个新的数据链路标识。当一个设备收到一个arp请求时,发现arp缓冲区中已有发送者的IP地址,则更新此IP地址的MAC地址条目。

           Windows NT 启动的时候广播 Gratuitous ARP,除了确认IP冲突外,那就是更新周边设备的ARP缓存。这对高可用方案中快速切换尤为重要,当IP 对应的MAC地址变了,如果周边设备缓存未更新、等到数据发送失败ICMP应答后重新发送ARP请求已经过了很长时间了。

          注意此策略在Window Server 2008 下有所改动,Server 2008 在收到Gratuitous ARP 时并不会更新自己的路由表,Windows是为了考虑Gratuitous ARP 请求可能是冲突的设备发出来的,如果更新缓存会带来不少问题。怎么说了更与不更都会有些问题,最好的解决方案莫过于VRRP 实现的VIP地址,使用虚拟的MAC地址,在IP漂移的时候不必考虑ARP缓存问题。

         

    到这也许会疑问我为啥只说Windows,是因为linux 压根不识别Gratuitous ARP:不发送、也不处理。这就是说linux下IP冲突问题就大发了,每次你问IPXX是谁?都有两个人回答你…当然具体数据发给了谁,看运气,对于服务器谁得应答先到,对于网络设备那就不同厂商的不一个样了,反正就是乱套了。

    也许会想,还挺不错啊,变相的负载均衡。。。(类似 LVS DR模式)不过听网建的同学说,linux IP冲突会造成网络设备的负担,网络设备ARP 缓存处理需要靠CPU计算,两台机器搞来搞去就把设备CPU跑到90%+。

    参考资料:

    http://wiki.wireshark.org/Gratuitous_ARP

    http://support.microsoft.com/kb/199773

    http://serverfault.com/questions/268253/windows-2008-ignores-gratuitous-arp-requests

  • 相关阅读:
    为什么GNU grep如此之快?
    在百度nlp实习一个月时间里用到的shell操作
    InfoPi简介、试用链接、资料索引
    自定义worker的方法,及一例
    2017.1.9版给信息源新增:max_len、max_db字段
    手把手写一个html_json信息源
    定义信息源的一些示例(xml文件)
    启用https协议的方法
    安装第三方Python模块,增加InfoPi的健壮性
    更新日志(建议升级到2017.1.18a) && 更新程序的方法
  • 原文地址:https://www.cnblogs.com/lulu/p/3131275.html
Copyright © 2020-2023  润新知