zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    url向视图函数传递参数
    创建django项目
    进度百分比
    【转藏】Makefile学习
    IT人的自我导向型学习:学习的4个层次
    SZ第二次找工作--笔试汇总
    正则表达式 (re包)——python(快餐)
    Python-快速学习
    Vim的使用
    Vim Python
  • 原文地址:https://www.cnblogs.com/lulu/p/3131275.html
Copyright © 2011-2022 走看看