關於通過 NLB 網路傳輸數據包的誤解
我正在做一個關於 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
==> 那麼,交換機如何將傳入的數據包發送到所有埠?
交換機通過查看進入它的數據包的源 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 流量都將在整個網路中氾濫。