令我惊讶的是,我刚刚发现我的 Ubuntu 13.04 系统似乎支持类似自动网络接口绑定的功能。
如果我通过 WiFi 建立 TCP 连接(例如在客户端和服务器上使用 netcat),然后还打开有线接口后,此连接上的所有进一步流量似乎透明地通过有线接口。我已经用Wireshark验证过,我也可以从复制文件时的吞吐量变化中看出这一点。
但是,这只有在我保持 WiFi 连接的情况下才有效。如果断开 WiFi,TCP 连接也会断开。
我测试的机器的 WiFi 和有线接口的 MAC 地址和 IP 地址都不同。但它们连接到同一个网络。
我没有安装 ifenslave 包,也没有设置网桥或类似的东西。我正在使用 NetworkManager。
我的问题是:这是如何工作的?哪一层负责重定向数据包,它如何知道将数据包发送到哪里?为什么如果 WiFi 连接关闭,它就会停止工作?
答案1
好吧,令人失望的解释。这只是老套的默认路由在起作用。NetworkManager 为每个接口添加了一条到同一网络的新路由。最后出现的接口将获取所有传出流量。
有趣的是,这也适用于传入流量。一旦远程主机开始从其最初发送数据到的另一个 MAC 获取 ACK,它就会更新其 ARP 表以指向新的 MAC,这样从此以后整个通信都会通过该接口进行。
我怀疑如果防火墙规则阻止接口接受不属于配置的 IP 地址的数据包,这将会中断,但有趣的是,默认情况下不会这样做...