所有nework接口挂起几秒钟,而一个接口上/下

我正在构build一个并行使用多个networking接口的客户机/服务器应用程序来实现冗余,而且我注意到当一个networking接口出现故障或上升时,其他接口上的通信会挂起几秒钟。

我可以以简单的方式重现这种行为,而不需要我的应用程序:

  • 计算机1上有2个接口(以太网和WiFi)
  • 从计算机2 ping计算机1的以太网连接的IP地址
  • 断开电脑1的WiFi
  • ping挂起几秒钟,然后数据包再次在两台计算机之间传输。

如果我打开计算机1上的WiFi连接,挂起也会发生。如果ping WiFi IP,并closures/打开以太网连接(或拔下/插入电缆),也会发生挂起。

我在两台电脑上都使用Linux Ubuntu 12.04。

任何想法为什么会发生这种情况,如果/如何避免?

这是由于Linux的“混杂ARP”行为和ARPcaching的有趣结合。 本质上,发生的事情是,尽pipe没有IP地址本身,WiFi接收ARP请求,并发送ARP响应。 如果这是ARP响应,则本地子网(通常是路由器)上的另一台计算机首先收到,这将进入ARPcaching。 当ARP条目失效并且ARP请求重复时,stream量中的暂停被解决,此时其他接口给出唯一的响应,并且所有事情都正常进行。

要停止Linux执行“任何地址configuration的所有接口上的ARP”,您需要将sysctl net.ipv4.conf.<interface>.arp_ignore1