我正在 Windows Server 2008 - 单播模式下进行有关 NLB(网络负载平衡)的实验室。
但我不明白数据包如何在网络中传输......
在此参考文献中。他们说:
如果群集主机连接到交换机而不是集线器,则使用公共 MAC 地址会产生冲突,因为第二层交换机希望在所有交换机端口上看到唯一的源 MAC 地址。为了避免此问题,网络负载平衡会唯一地修改传出数据包的源 MAC 地址;群集 MAC 地址 02-BF-1-2-3-4 设置为 02-h-1-2-3-4,其中 h 是群集内主机的优先级(在“网络负载平衡属性”对话框中设置)。此技术可防止交换机了解群集的实际 MAC 地址,因此,群集的传入数据包将传送到所有交换机端口。如果群集主机直接连接到集线器而不是交换机,则可以禁用网络负载平衡在单播模式下对源 MAC 地址的屏蔽,以避免上游交换机泛洪。这可以通过将网络负载平衡注册表参数 MaskSourceMAC 设置为 0 来实现。使用上游三级交换机也会限制交换机泛洪。
如果集群连接到交换机,传入的数据包将被发送到交换机上的所有端口,这可能会导致交换机泛洪。
有两台电脑:
PC1:192.168.2.1
PC2:192.168.2.2
虚拟集群 IP :192.168.2.100
安装 NLB 后,PC1 和 PC2 的 MAC 地址更改为:02-BF-1-2-3-4(它们获得了相同的 MAC)
我尝试 ping 192.168.2.100,PC1 和 PC2 都收到 ICMP 请求?
但如何交换机将传入数据包发送到所有端口?,
因为交换机期望看到唯一源 MAC?
然后每个端口都映射到唯一的 MAC 地址
==> 那么,如何交换机将传入数据包发送到所有端口?
答案1
交换机通过查看进入端口的数据包的源 MAC 来了解每个端口连接的 MAC 地址。如果从端口 1 进入的数据包的源为 AA:BB:CC:DD:EE:FF,则交换机知道发往该 MAC 地址的任何数据包都可以通过端口 1 发出。
如果交换机收到一个 MAC 地址的数据包,并且不知道该 MAC 地址连接到哪个端口(例如,如果交换机刚刚通电),它会通过每个端口发送数据包。基本上,它会广播数据包,希望正确的机器能够收到它,而所有其他机器都会忽略它。
单播 NLB 利用此“功能”确保交换机永远不会看到源 MAC 与虚拟 IP 地址使用的 MAC 地址相匹配的数据包 - 虚拟 IP 的 ARP 请求将收到包含 MAC 地址 X 的回复,但实际使用虚拟 IP 与集群通信时,来自集群的回复将具有已被更改的源 MAC,如上文所述。
因此,在使用单播 NLB 时应小心谨慎,尽量使启用 NLB 的广播域尽可能小。如果在连接到大型网络的适配器上启用 NLB,则所有 NLB 流量将在整个网络中泛滥。