以上与您在评论中的拓扑相同。在两个交换机之间没有连接的情况下,只有当系统充当两个网络之间的桥梁时,两个接口中具有相同的IP 子网才有意义,允许一侧的所有主机连接到另一侧。单个主机的查找方式与交换机查找它们的方式相同:通过跟踪 MAC 地址的出现位置,如果目标 MAC 的位置未知,则将流量泛洪到所有端口。
请注意,虽然交换机具有 MAC 地址,但它们仅用于控制功能,与数据流量无关。交换机确实保留了他们在每个端口中看到的主机 MAC 地址表,并使用该表将数据帧转发到正确的位置。并且主机只有路由条目说“到网络 N 的流量从接口 I 出去”,或者“到网络 M 的流量通过接口 J 发送到路由器 R”,或者路由条目也考虑了源地址。主机必须使用 ARP 或类似方法来确定目标 MAC 地址,但这是目标主机的 MAC 地址,而不是交换机。
它根本不会将其发送到交换机。它从具有正确 IP 地址和子网的任何接口发送它,或者,如果两者都有效,它认为哪个更快或到主机的跃点最少。
如果网络接口具有不同的 IP 地址并按子网分隔,那么这将有效地选择数据包在哪个接口上发送出去。
每个接口也可以分配一个“指标”,基本上说明“这个接口应该更快”,并且对于更快的接口将是一个较小的数字。您可以让操作系统建立指标,从而建立首选接口,也可以在网络接口属性中自行设置。
您的操作系统中的网络系统也可能使用 TCP/IP 数据包中的 TTL(生存时间)信息来确定哪个链接更短,但这并不是速度的可靠指示。
更智能的系统可以使用负载平衡和链路上最近延迟的知识来动态调整或覆盖接口度量。
这取决于你有什么样的设置。
您可以在计算机上有两个网络接口,连接到两个完全不同的网络。在这种情况下,数据包将离开由 IP 路由确定的接口,系统可能会或可能不会在两个网络之间路由流量。
例如,这里的任何东西都会
192.168.0.x
通过eth0
开关#1 出来。如果您还通过 eg 有一个默认路由,那么其他所有不会出现的192.168.0.1
东西也会离开路由器。10.1.2.x
eth0
以上与您在评论中的拓扑相同。在两个交换机之间没有连接的情况下,只有当系统充当两个网络之间的桥梁时,两个接口中具有相同的IP 子网才有意义,允许一侧的所有主机连接到另一侧。单个主机的查找方式与交换机查找它们的方式相同:通过跟踪 MAC 地址的出现位置,如果目标 MAC 的位置未知,则将流量泛洪到所有端口。
如果没有桥接,如果应用程序想要连接到两个地方都存在的地址,就没有直接的方法可以知道使用哪个网络。这不仅仅是查找具有该地址的主机所在的位置,而是可能有两个主机。
另一方面,如果两台交换机是外部连接的(与上面不同),则可以将两个网络接口连接到两台交换机,都在相同的第 2 层网络和 IP 子网上,无需桥接。这将用于冗余/容错或增加带宽。
如果操作系统处理接口之间的故障转移,则可以使用一个 IP 地址来完成。例如,如果一个接口出现故障,Linux 绑定驱动程序可以透明地在两个接口之间进行故障转移。然后将沿着当前活动的链接发送流量。
如果两台交换机是独立的,负载均衡通常是不可能的。但如果它们是支持它的单个逻辑平台的一部分,您可以在两条链路上运行LACP,透明地平衡两条链路上的流量。使用 LACP,流量根据源地址和目标地址的散列进行拆分。
也可以使用两个 IP 地址来完成,应用程序处理流量分配。这类似于在网络上只有两个独立的主机。(可能需要基于策略的路由以使源 IP 地址影响所使用的传出接口。)
请注意,虽然交换机具有 MAC 地址,但它们仅用于控制功能,与数据流量无关。交换机确实保留了他们在每个端口中看到的主机 MAC 地址表,并使用该表将数据帧转发到正确的位置。并且主机只有路由条目说“到网络 N 的流量从接口 I 出去”,或者“到网络 M 的流量通过接口 J 发送到路由器 R”,或者路由条目也考虑了源地址。主机必须使用 ARP 或类似方法来确定目标 MAC 地址,但这是目标主机的 MAC 地址,而不是交换机。
此外,“路由”是网络/IP/第 3 层功能,而不是交换机所做的。切换“转发”帧,或者只是“切换”它们。(我很乐意使用后者,尽管也许有些人可能不同意。)
这两个网络接口是否在单个(PCI / PCIe)卡上、在两个卡上、集成在主板上或通过 USB 或其他方式连接在这里都没有关系。只是它们是完全独立的接口,而不仅仅是相同实际接口的替代物理连接器。例如,许多交换机的端口同时具有铜连接器和 SFP 插座,但一次只能工作一个。在过去,10 Mb/s 网卡通常具有用于双绞线、同轴薄以太网和D-15 AUI 的连接器作为替代品。
在这个答案中,我考虑了评论中给出的其他细节:
拓扑:(路由器-------------交换机----------PC-----------交换机------- - -路由器)
两台 PC 的接口都配置在同一个子网中
这是错误的。
这个错误的配置(在 Linux 中)会发生什么?
路由表对同一子网有两个条目,每个接口和源 IP 地址一个。例如:
当您尝试 ping 该子网中的某个地址时,仅使用第一个接口。因此,您无法到达第二个路由器。
PC 通过广播 ARP 消息来获知 IP 地址对应的 MAC 地址。目标应该响应我有 IP,我的 MAC 地址就是这个。然后,PC 将保留一个 ARP 表,其中包含映射 IP、MAC 和设备响应接口的条目。
只要某些设备将数据包切换到您的目的地,PC 就不会担心消息如何到达终点。
大多数交换机都有 MAC 地址并保留 ARP 表。他们会将 ARP 请求转发给所有连接的设备,并且还会记住响应的来源。哑集线器通常没有记忆,只会继续向各个方向广播消息。