我正在做关于Windows Server 2008 – 单播模式的NLB(networking负载平衡)的实验室。
但我无法理解数据包是如何通过networking传输的
http://technet.microsoft.com/en-us/library/bb742455.aspx
http://technet.microsoft.com/en-us/library/cc782694.aspx
在这个参考。 他们说:
如果集群主机连接到交换机而不是集线器,则由于第二层交换机希望在所有交换机端口上看到唯一的源MAC地址,因此使用公共MAC地址会产生冲突。 为了避免这个问题,networking负载平衡(Network Load Balancing)唯一地修改了输出数据包的源MAC地址; 02-BF-1-2-3-4的集群MAC地址设置为02-h-1-2-3-4,其中h是集群内的主机优先级(在“networking负载平衡属性”对话框中设置)。 这种技术阻止交换机学习群集的实际MAC地址,因此,群集的传入数据包将传送到所有交换机端口。 如果群集主机直接连接到集线器而不是交换机,则可以禁用networking负载平衡以单播模式屏蔽源MAC地址,以避免泛滥上游交换机。 这是通过将networking负载平衡registry参数MaskSourceMAC设置为0来实现的。使用上游三级交换机也将限制交换机泛滥。
如果集群已连接到交换机,则传入的数据包将被发送到交换机上的所有端口,从而导致交换机泛滥。
有两台PC:
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请求?
但是交换机如何将传入的数据包发送到所有端口 ?
因为Switch期望看到唯一的源MAC ?
那么每个端口都映射到一个唯一的MAC
==>那么, Switch如何将传入的数据包发送到所有端口 ?
交换机通过查看进入其中的数据包的源MAC来了解每个端口连接了哪些MAC地址。 如果数据包在端口1上来源AA:BB:CC:DD:EE:FF,它知道任何目的地为该MAC地址的数据包可以通过端口1出去。
如果交换机收到一个MAC地址的数据包,并且不知道该MAC地址连接的端口是什么(例如,它刚上电),它将通过每个端口发送数据包。 基本上它广播包希望正确的机器将得到它,所有其他人将忽略它。
单播NLB通过确保交换机从不会看到具有与用于虚拟IP地址的MAC地址相匹配的源MAC的分组来使用该“特征” – 对于虚拟IP的ARP请求将接收到包含MAC地址X的应答,但是当使用虚拟IP实际与群集交谈时,来自群集的回复将具有如上所述在您的报价中被更改的源MAC。
正因为如此,使用Unicast NLB尝试使尽可能小的启用NLB的广播域时应该小心。 如果在连接到大型networking的适配器上启用NLB,则所有的NLBstream量将在整个networking中泛滥。