﻿# 精通 NLB：單點傳播(Unicast) 與 多點傳送(Multicast) 的差異

這幾天花了好多時間在研究 Microsoft **網路負載平衡**(**NLB**) 機制，由於當中有許多設定無法完全理解，困擾我好幾天，這幾天不止請教了 **微軟技術支援中心**、也拜訪了好幾位 **系統工程師**(SE) 的朋友討教 **單點傳播(Unicast)** 與 **多點傳送(Multicast)** 的差異，由於我對網路底層的不熟悉所以才導致無法快速理解這些概念，可見 IT 的領域真的跟 RD 差好多啊！

網路上很多文章都只講一點點或只講怎麼做，沒有深入的講解原理也沒有參考連結，這讓我找到資料後還要多方驗證彼此的邏輯性與正確性，也或者是說我對 Layer 2 / Layer 3 的 Know How 太淺薄所以才會有這麼多疑問，但最近已經都完全釐清了，這感覺真的很棒。

對於網際網路數據交換的基本觀念我這幾天是讀 [Internetworking Design Basics](http://www.cisco.com/en/US/docs/internetworking/design/guide/nd2002.html) 文章所建立的，他將原理寫的相當清楚，對我理解 NLB 的底層運作機制有非常大的幫助，也建議各位閱讀。當然我也閱讀了很多其他相關文件，我都會放在本文最下方的**相關連結**中。

本文專注的重點在於 **單點傳播(Unicast)** 與 **多點傳送(Multicast)** 的差異，對於如何安裝設定 NLB 也可以參考本文最下方的**相關連結**。

**網路負載平衡在 Unicast mode 的注意事項**

由於 Unicast 模式的 NLB 會先設定讓**兩台主機 NLB 網路介面的 MAC 位址變成完全一樣**，以至於讓兩台主機彼此無法互相連線。如果你是透過遠端桌面連線到該主機做 Unicast NLB 設定的話，建議在設定時最好每台成員伺服器都有**兩張網路卡**，且透過另一張網卡 (**非 NLB 叢集使用的介面**) 進行遠端連線，避免設定時被中斷連線。如果你只有一張網卡，在設定 Unicast 模式加入叢集後會斷線很久，那是因為兩台主機使用相同的 MAC 位址，導致 Switch 無法將封包傳遞到正確的 ports，有些 Switch 甚至無法使用 NLB 成員伺服器的 IP 連線，所以還是建議用兩張網卡進行設定。

至於「設定讓**兩台主機 NLB 網路介面的 MAC 位址變成完全一樣**」這個動作是在設定 **NLB 成員伺服器** 加入 **NLB Cluster** 的時候就會**自動完成**的工作，你可以透過 Windows 內建的 [getmac](http://technet.microsoft.com/en-us/library/bb490913.aspx) 指令查詢加入叢集後的成員伺服器的 MAC 位址是否一樣。

**網路負載平衡在 Multicast mode 的注意事項**

如果你是透過遠端桌面連線到該主機做 Multicast NLB 設定的話，建議在設定時最好每台成員伺服器都有**兩張網路卡**，且透過另一張網卡 (**非 NLB 叢集使用的介面**) 進行遠端連線，避免設定時被中斷連線，但這是**非必要**的要求，你只要重新連線即可。

設定 Multicast 模式的 NLB 須注意你的 Layer 2 switch 是否支援，若不支援 Multicast 的 Switch 可能會導致 NLB 運作發生異常或無法達到負載平衡的目的。

**網路負載平衡在 Unicast mode 的運作原理**

-   成員伺服器加入 NLB 叢集的時候，提供給 NLB 叢集介面的 MAC Address 會先被修改成 NLB 叢集專用的 MAC Address
-   NLB 叢集介面在傳送 Ethernet frame 至 switch 時會透過 **MAC address masking** 修改成一個假的(bogus) MAC 位址並註冊到 switch 上，Switch 會自動註冊進 mac address table 做參照
-   當封包透過 Router (Layer 3 switch) 並傳送至 Switch (Layer 2 switch)，並透過 ARP 廣播查詢 NLB 叢集 IP 時會有以下判斷：

-   由於 switch 上的 mac address table 並無該 IP-MAC 的對應，所以會發送 ARP 廣播封包到所有 switch ports
-   NLB 叢集電腦會透過 ARP 回應 NLB 叢集 MAC位址 (Unicast MAC address, 亦即原本Interface 的 MAC address)，switch 便會將封包送至 NLB 叢集的 switch ports

**網路負載平衡在** **Multicast mode 的運作原理**

-   成員伺服器加入 NLB 叢集的時候，提供給 NLB 叢集介面的 MAC Address 不會被修改!
-   NLB 叢集介面在傳送 Ethernet frame 至 switch 時會直接用原本網卡(網路介面)的 MAC Address 註冊到 switch 上的 mac address table 做參照
-   當封包透過 Router (Layer 3 switch) 並傳送至 Switch (Layer 2 switch)，並透過 ARP 廣播查詢 NLB 叢集 IP 時會有以下判斷：

-   由於 switch 上的 mac address table 並無該 IP-MAC 的對應，所以會發送 ARP 廣播封包到所有 switch ports
-   NLB 叢集電腦會透過 ARP 回應 NLB 叢集 MAC位址(Multicast MAC address)，switch 便會將封包送至 NLB 叢集的 switch ports \[註:有些 switch 無法處理 Multicast MAC address\]

**如何區分 Unicast MAC address 與 Multicast MAC address ？**

首先我們先看看 MAC address 的結構，共有 32bits 如下，在 IP Multicast 中的前 23 個 Bits 是固定的，源由請看【[為何 IP Multicast 位址的 MAC address 必須擠到23 位元裡面?](http://showipprotocols-tw.blogspot.com/2009/05/ip-multicast-mac-address-23.html)】有詳細的說明，但是在 NLB 使用的 Multicast 模式中沒有這個限制，因為 NLB 的 Multicast 只有使用到 Layer 2 的 Multicast 協定：

```
|<------- 23 bits ----->|00000001-00000000-01011110-0XXXXXXX-XXXXXXXX-XXXXXXXX   01   -   00   -   5E   -(00~7F) -(00~FF) - (00~FF)
```

如上例，要區分 **Unicast MAC address** 與 **Multicast MAC address** 最簡單的方式就是判斷 MAC 位址在**最高位元組**的**最低位元**為是否為 1 即可判斷出來：

-   如果這個 bit 為 1，那麼這個 MAC address 就屬於 Multicast MAC address
-   如果這個 bit 為 0，那麼這個 MAC address 就屬於 Unicast MAC address

如果在進一步對照 NLB 的設定畫面 (如下圖)，以 Windows Server 2008 的**網路負載平衡管理員**中**叢集參數**的設定畫面為例，在選取不同**叢集操作模式**時，在畫面上預設的「網路位址(MAC address)」就可以看出這個 bit 的變化，如下圖示：

**單點傳播**

![單點傳播](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/0a4e1f6dcb4855d86167-image.png "單點傳播")

**多點傳送** 

![多點傳送 ](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/05b6baa013233d72c4a2-image.png "多點傳送 ")

**NLB Multicast** 與 **IP Multicast** 一樣都要 **Layer 2 switch** 支援才行，但是應用的方向卻不太一樣：

-   NLB Multicast 講的是封包**從外到內**時如何透過廣播達到負載平衡的目的

-   例如: 負載平衡應用、HA 叢集架構、… 需同時將封包傳送到多台伺服器提供服務的情況

-   IP Multicast 講的是封包**從內到外**如何有效減少封包的傳輸數量以加速內容傳遞

-   例如: 語音會議、視迅會議、封包廣播應用、… 需同時間傳送大量封包到多點目的的情況

※ 最後，如有您覺得本文有謬誤之處或觀念講不正確或模糊不清的地方，歡迎隨時提出指正，感謝！

**相關連結**

-   [Windows Server 2008怎麼設定網路負載(Network LoadBalance)](https://dotblogs.com.tw/dotjason/2009/04/27/8209)
-   [Using NLB with ISA Server Part 2: Layer 2 Fun with Unicast and Multicast Modes](https://web.archive.org/web/20130506144103/http://www.isaserver.org:80/articles/basicnlbpart2.html)
-   [為何 IP Multicast 位址的 MAC address 必須擠到23 位元裡面?](http://showipprotocols-tw.blogspot.com/2009/05/ip-multicast-mac-address-23.html)
-   [Interdomain Multicast Fundamentals](http://www.informit.com/articles/article.aspx?p=29244)
-   [ftp://ftp-eng.cisco.com/ipmulticast/training/Module2.pdf](ftp://ftp-eng.cisco.com/ipmulticast/training/Module2.pdf "ftp://ftp-eng.cisco.com/ipmulticast/training/Module2.pdf")
-   [何謂 Layer 3 Switch (第三層交換器)](http://www.tshopping.com.tw/archiver/?tid-7058.html)
-   [Network Load Balancing: Frequently Asked Questions for Win2k and Win2k3](http://technet.microsoft.com/en-us/library/cc758834\(WS.10\).aspx)

-   [NLB Basics](http://technet.microsoft.com/en-us/library/cc780254\(WS.10\).aspx)
-   [NLB and Other Clustering Technologies](http://technet.microsoft.com/en-us/library/cc776332\(WS.10\).aspx)
-   [NLB for Scalability](http://technet.microsoft.com/en-us/library/cc757552\(WS.10\).aspx)
-   [NLB for High Availability](http://technet.microsoft.com/en-us/library/cc739690\(WS.10\).aspx)
-   [NLB Fundamentals - FAQ](http://technet.microsoft.com/en-us/library/cc738464\(WS.10\).aspx)
-   [Deployment Issues](http://technet.microsoft.com/en-us/library/cc783135\(WS.10\).aspx)
-   [Set up and Configuration](http://technet.microsoft.com/en-us/library/cc736597\(WS.10\).aspx)
-   [Management and Operations](http://technet.microsoft.com/en-us/library/cc782879\(WS.10\).aspx)
-   [Support for Sessions](http://technet.microsoft.com/en-us/library/cc738968\(WS.10\).aspx)
-   [Application and Protocol Support](http://technet.microsoft.com/en-us/library/cc784414\(WS.10\).aspx)

-   [Catalyst Switches for Microsoft Network Load Balancing Configuration Example](http://www.cisco.com/en/US/products/hw/switches/ps708/products_configuration_example09186a0080a07203.shtml)
-   [Unicast vs. Multicast](https://learn.microsoft.com/en-us/troubleshoot/windows-server/networking/configure-network-to-support-nlb-operation-mode)
-   [Internetworking Design Basics](http://www.cisco.com/en/US/docs/internetworking/design/guide/nd2002.html) ( 非常推薦的一篇文章，觀念講得非常清楚 )

-   [Layer 2 and Layer 3 Switching](http://www.cisco.com/en/US/docs/internetworking/design/guide/nd2002.html#wp3317)
-   [Broadcast and Multicast Capabilities](http://www.cisco.com/en/US/docs/internetworking/design/guide/nd2002.html#wp3890)

-   [Network Load Balancing Clusters](http://technet.microsoft.com/en-us/library/cc759510\(WS.10\).aspx)

-   [Checklist: Enabling and configuring Network Load Balancing](http://technet.microsoft.com/en-us/library/cc779254\(WS.10\).aspx)
-   [New ways to do familiar Network Load Balancing tasks](http://technet.microsoft.com/en-us/library/cc759590\(WS.10\).aspx)
-   [Network Load Balancing Best practices](http://technet.microsoft.com/en-us/library/cc740265\(WS.10\).aspx)
-   [Network Load Balancing How To...](http://technet.microsoft.com/en-us/library/cc780225\(WS.10\).aspx)
-   [Network Load Balancing Concepts](http://technet.microsoft.com/en-us/library/cc728312\(WS.10\).aspx)
-   [Network Load Balancing Troubleshooting](http://technet.microsoft.com/en-us/library/cc781160\(WS.10\).aspx)

-   [Network Load Balancing (NLB) clients cannot connect to the Windows Server 2008 NLB cluster by using the virtual IP address when NLB is running in multicast mode](http://support.microsoft.com/kb/960916/en-us)
