一个有趣的问题。
如果我的 MacBook Pro 连接了两个网络连接,而我移除了其中一个,那么网络难道不应该使用另一个吗?
嗯,昨晚没有——当我上床睡觉时,我的妻子问我厨房里放的以太网电缆的情况,我想如果以太网被移除,无线连接将处理流量,我告诉她只要移除以太网电缆,将线从厨房缩回来,关上门,然后上床睡觉,然后我翻身……:-D
今天早上,Mac Mail 和其他工具(Safari)无法访问互联网,尽管我的 WiFi 路由器已建立无线连接。因此,我天真地重启了 Mail 和 Safari,但它们仍然无法访问互联网。
因此,我在“系统偏好设置”中打开了“网络”,并更改了顺序,使 Wi-Fi 排在第一位,而不是第二位,如下所示:
并且 Safari 和 Mail 立刻就重新连接到了互联网。
我认为 TCP/IP 只会在其他网络接口不可用时使用可用的网络接口?
这让我想到一个更普遍的问题:如何划分网络流量以利用两个网络接口,从而提高吞吐量?
答案1
顺便说一句,这个问题问得好!我在英特尔工作时也遇到过类似的情况,但我不记得当其中一个接口断开连接时接口没有自动切换。
我的回答是关于你的一般问题
这让我想到一个更普遍的问题:如何划分网络流量以利用两个网络接口,从而提高吞吐量?
现在,如果你有两个以太网接口(而不是以太网和 WiFi),你可以使用一种称为链路聚合将两个相似的接口“绑定”,让您的计算机认为这是一个以太网连接。提供此功能的网络协议称为 LACP(链路聚合控制协议)。不幸的是,为了实现链路聚合,不仅双 NIC 需要支持此功能,而且您连接的设备也需要支持 LACP,并且其所有设置与客户端相同。此功能在高端路由器和交换机上很常见,但大多数消费级设备不支持此功能。
由于您的 WiFi 适配器和以太网适配器是两个完全独立的接口,因此您无法简单地将两者连接在一起并获得更高的吞吐量。这也是因为无线(根据使用的技术而有所不同)和以太网(10/100/1000)的理论链接速度完全不同。根据维基百科
在大多数实现中,聚合中使用的所有端口都由相同的物理类型组成,例如所有铜缆端口 (10/100/1000BASE-T)、所有多模光纤端口或所有单模光纤端口。但是,IEEE 标准要求每条链路都是全双工的,并且所有链路都具有相同的速度(10、100、1,000 或 10,000 Mbit/s)。
许多交换机都独立于 PHY,这意味着交换机可以混合使用铜线、SX、LX、LX10 或其他 GBIC。虽然通常采用相同的 PHY,但可以将 1000BASE-SX 光纤聚合为一条链路,将 1000BASE-LX(更长、不同的路径)聚合为第二条链路,但重要的是两条链路的速度均为 1 Gbit/s 全双工。一条路径的传输时间可能稍长,但标准已经设计好,因此这不会造成问题。
答案2
我刚刚用我的 Mac mini 测试了故障转移。我配置了两个网络接口,以太网和 WiFi。测试开始时,两者状态良好,以太网在服务顺序中优先。
我重复测试了几次,查看了不同的网络指示器。故障转移到 WiFi 的情况正如人们所料。断开连接时丢弃了一个 ping 数据包;重新连接时没有丢弃任何数据包。
`en0` - Built-in Broadcom Gigabit Ethernet
`en1` - Built-in Apple Wireless Network Adapter
当我拔出 RJ-45 时,Console.app 会报告以下消息:
2014-04-26 1:14:40.000 PM kernel[0]: AppleBCM5701Ethernet [en0]: Link down (womp disabled, proxy idle)
2014-04-26 1:14:41.267 PM configd[54]: network changed: v4(en1:192.168.2.22, en0-:192.168.2.122) DNS! Proxy! SMB
有一个ping
被掉了。
重新连接以太网电缆后,将记录以下消息:
2014-04-26 1:14:47.000 PM kernel[0]: Ethernet [AppleBCM5701Ethernet]: Link up on en0, 1-Gigabit, Full-duplex, Symmetric flow-control, Debug [796d,2321,0de1,0300,cde1,3c00]
2014-04-26 1:14:47.901 PM configd[54]: network changed: v4(en0+:192.168.2.122, en1) DNS! Proxy! SMB
没有丢包。
显示route monitor
一系列路线正在发生改变。
总结:在 2011 年中 Mac Mini 上运行的 Mac OS X 版本 10.9.2 上,故障转移工作正常。
那么,为什么这种情况可能不会发生在你身上?我认为一个原因可能是 Thunderbolt 收发器加密狗没有向内核报告载波丢失,但从你的屏幕截图来看,系统似乎知道没有以太网连接。
该问题是否可以重复?如果可以,会记录哪些消息?
该特定事件的日志还能访问吗?
答案3
我不太熟悉 Macintosh 电脑,但我熟悉以太网和 TCP/IP 网络。除了使用某种聚合/链路共享/拆分方案外,对于您提出的“为什么不使用其他链路”这个问题,答案是……这取决于相关应用程序绑定到哪个接口,它们是否可以找到其他路由,等等。
我发现很多刚接触网络的人对一些概念感到困惑。
- 以太网不是TCP/IP。TCP/IP 是不是以太网。
- IP 地址是不是分配给您的计算机;它们被分配给您的网络接口卡的 MAC 地址。
- 数据通过网络发送制图使用 ARP(地址解析协议)将 IP 地址映射到匹配的 MAC 地址(然后再返回)。
- 在网络的任何单个段中,每个地址(无论是以太网 MAC 地址还是 TCP/IP 地址)必须独一无二。把它想象成你的电话——想象一下,如果你不得不与邻居共用一部电话,而他们又拥有与你相同的电话号码,你会多么恼火。电信公司必须给你们俩打电话,然后你和你的邻居必须弄清楚是谁打来的,以及打给你们中的谁。
考虑到以上情况,您应该开始明白为什么您失去了“连接”。您的有线连接有一个 MAC 地址,该地址映射到一个 IP 地址,而您的无线网络有一个不同的、唯一的 MAC/IP 地址对。在您的计算机和路由器之间,这些 MAC/IP 地址对用于识别应将任何网络数据发送到何处。但如果一个链接发生故障,您的计算机和路由器都无法轻松“更改”源/目标地址对后事实。
把它想象成邮局。有人给你写信,他们在信封上写上你的名字和地址。如果你搬家了怎么办?如果不做任何事情来重定向你的邮件,它仍然会被送到你的旧地址,你永远也看不到它。当然,正如我所说,你可以重定向/转发它,这就是一些聚合方案所做的——但它们需要额外的硬件或软件来做到这一点,就像邮局需要额外的工作人员/机器来分类和重定向你的邮件一样。这不是自然发生的事情。
许多应用程序还会“绑定”到特定网络接口 - 如果没有绑定,这就好比告诉陌生人“明天给我打电话”,却不告诉他们要拨打的电话号码。他们无法知道如何联系您。同样,您的邮件客户端需要告诉邮件服务器将任何数据发回给您的 IP 地址。这通常是透明的,因为源地址和目标地址嵌入在数据包头中。
现在,鉴于你所描述的,全部以上适用于您。在正确配置的系统中,大多数传出连接确实应该找到任何可用的接口,以便能够发送网络流量不断增加,随着路由器和交换机变得越来越复杂,地址的自动转换无需任何额外的硬件/软件。但还有其他问题需要解决;其中之一是接口度量(优先级),这听起来就是您最初的问题。
由于没有被告知可以使用其他接口,您的计算机只尝试了列表中的第一个接口。据它所知,第二个接口可能连接到核发射设施,任何数据都将引发第三次世界大战。这不是一个好主意,即使很极端 :-P 无论如何,关键是,如果您不对其进行配置,您的计算机就没有真正的大脑来弄清楚另一个连接是否与第一个连接一样好用。这就是它开始工作的原因后您已正确将其配置为“故障转移”。
再次,随着计算机和操作系统变得越来越复杂,如今越来越多的计算机在出厂时就预先配置好了自动执行此类操作。但了解潜在的问题和配置将有助于您了解问题并在问题发生时予以纠正。同样,我并不完全确定 Macintosh 计算机是如何设置来处理这些情况的,但我知道过去几年更新的基于 un*x 的计算机通常具有可靠的 iface 向上/向下处理和逻辑。
导致您出现确切症状的另一个可能问题/原因可能是路由表。一般来说,当 TCP/IP 堆栈尝试路由数据包时,它会在路由表中查找目标地址。如果找到完全匹配,它会发送数据包以从指定的接口发出。如果找不到完全匹配,但找到接近/掩码匹配,它会将数据包发送到该指定接口。如果找不到任何匹配,它会将数据包发送到“默认网关”,让网关决定如何路由数据包。
但是,只能有一个默认网关!这是因为计算机(即您计算机的 TCP/IP 堆栈)无法确定将数据包发送到何处,因此它需要将其发送到网关来做出决定。但是,如果您有两个默认网关——您的计算机将不知道将其发送到哪一个,因为它无法确定将数据包发送到何处!您的计算机将因试图做出决定而精神崩溃,最终除以零,我们知道这不会是好事。
同样,当分配给默认网关的链接突然断开时,系统配置方式会影响响应方式。但这又将我们带回到配置问题上——您的计算机需要知道,如果默认网关无法访问,它应该切换到另一个 iface 的默认网关。听起来,一旦您更改了 NIC 的优先级,它最终就会这样做,这就是它再次开始工作的原因。
如果这一切都太过清晰,我很抱歉!但为了帮助您诊断此类问题,请学习如何使用某些网络诊断工具,例如“arp”(告诉您哪个 MAC 绑定/映射到 IP 地址,反之亦然)和“route”(将告诉您它将如何尝试根据目标地址路由数据包)。