Multicast簡介及在 OpenStack 環境上的實作

Dec 28, 2021 Eddie Yan

Photo by Alvaro Reyes on Unsplash

Unsplash

Multicast 在網路上並不是個很常見的應用,不過在一些領域如多媒體、以及其他的應用上很常見,亦用於一些測試環境,這邊將會簡單介紹何謂Multicast 以及其在 OpenStack 私有雲上的實作方式。

Multicast 簡介:何謂 Multicast?

在路由的形式中,主要有 Broadcast (廣播)、Anycast (任播)、Unicast (單播)、本篇介紹的 Multicast (多播)、以及地域性廣播 (Geocast)。其中Unicast、Anycast、及 Broadcast 是很常見的傳輸種類,他們大多是配合 IP 以及區網的形式進行傳遞。比如一般的網路連接,比如上網連到網站等,多數都是透過 Unicast 進行路由連接;而比如家中路由器常會使用 DHCP 進行家中設備的 IP 配發,也有部分採用了 Broadcast。

Multicast 從表面上看起來與 Broadcast 相似,但後者是將資訊傳遞到同一個網域內的所有節點,而前者則是有被納入進廣播群組內的節點才能收到封包。而 Multicast 可以做一對多或者是多對多的傳輸,因此只要是在群組內的節點或是區域,都可以接收到 Multicast 封包。

Multicast 簡介:常見應用與麻煩之處

而 Multicast 的最大優點,就在於傳遞過程中間的路由器、交換器等設備,在接收到 Multicast 封包資訊時,會自動複製並分發到下一層在群組內的設備,因此能夠減少來源端的傳輸頻寬;若為使用 Unicast,則會大幅增加來源端的頻寬傳輸,因爲來源端都需要為每一個連線傳輸資料,接收者一旦增加,也會加重來源端的網路負擔。

也因此,Multicast 很常被使用在視訊方面的應用,比如 IPTV、視訊會議、網路直播等,因為這類應用所使用的網路頻寬相當大;有資訊即時同步或者協同處理需求的相關應用也多少會使用 Multicast 技術,不過這些通常都是在內部網路所使用的範圍居多。

在台灣,目前最耳熟能詳的 Multicast 應用,即為中華電信的 MOD 服務。其服務建立的方式是在中華電信的 Hinet/光世代上網網路中,另外增加一個大型區網,這個大型區網有設定給 MOD 機上盒所使用的IP位址,一旦 MOD 機上盒開始收看特定節目時,來源端就會透過 Multicast 的方式,將該頻道的影音內容傳到 MOD 機上盒。

上圖簡單解釋了 MOD 的建立影音資料傳輸的簡圖,每一個頻道都是獨立的 RTSP 傳輸網址,而 MOD 機上盒轉台時,其實是切換串流 IP,並且同時也會發送加入 Multicast 群組的請求封包到串流伺服器;而串流伺服器接收到機上盒的串流請求時,串流伺服器端的路由便會將該機上盒的 IP 加入進Multicast 群組之中,並且發送串流封包到所有在群組清單內的機上盒。簡單來說,MOD 採用的 Multicast 做法,不但不會增加串流伺服器端的流量,同時也穩定了收看的品質。

但這同時也給收看者帶來了一些麻煩,首先由於 MOD 機上盒的 IP 屬於架構在 Hinet ADSL/光世代上的一個龐大區網,因此機上盒都必須要直接接數據機,或者是與數據機之間只能有一般交換器,否則會導致用戶無法收看,這就失去了給用戶的裝機彈性,畢竟並不是每家每戶的數據機與機上盒放置的位置都能夠直接連接。

其次也是很大的問題,前面有提到 Multicast 可以做一對多的多播,但在沒有支援 Multicast 的設備下會直接變成 Broadcast 封包往下傳遞。假設數據機與 MOD 機上盒之間有接一般的交換器,若該交換器上面還有連接其他的設備,縱使不是 MOD 機上盒也會一直收到 MOD 來的串流封包。這樣的現象,除了會導致其他設備的網路頻寬被虛耗外,一些設計上本就不適合做大量廣播封包傳輸的連線方式也會因此被癱瘓 (比如 Wi-Fi),這個現象一般被稱為廣播風暴 (Broadcast Storming)。

Multicast 簡介:IGMP Snooping

為了避免 Multicast 封包從 Internet 傳入到 LAN 時所造成的廣播風暴問題,目前不少無線分享器或者是交換器都開始支援了所謂的 IGMP Snooping 功能。

所謂 IGMP Snooping,是建立在 Multicast 傳輸協議之一的 IGMP 協議中,其功能是在 IP 層 (Layer 3)所實作的功能。該功能的實現方式是,每一台接收Multicast 封包的終端都會有一個多播位址,這個多播位址會記錄在路由器/交換器上並且標註是來自哪一個連接埠。當設備收到 Multicast 封包時,會去比對廣播封包上的多播位址,確認後只會將封包傳輸到列在同一個多播位址上的連接埠,沒有列在名單內的連接埠則不會發送。

透過此功能,便能將 Multicast 封包發往相關聯的機器上,除了降低其他設備的網路頻寬被虛耗外,也能夠防止廣播風暴的產生;缺點是要接收 Multicast 的終端,若上層有好幾層路由器/交換器設備,這些也都要支援 IGMP Snooping 的設備,才能夠避免某一層發生廣播風暴。

OpenStack 實作 Multicast (1):網路架構須知

知道了關於 Multicast 相關的知識後,接著就來看要怎麼在 OpenStack 上實作Multicast。

OpenStack Neutron 本身支援好幾種網路管理底層,包括 Linux Bridge、Open vSwitch(OvS) 等,而由於 OvS 能夠支援較多的 Neutron 功能(如Neutron DVR),因此大多數都是以 OvS 作為網路底層,這篇也同樣會以 OvS為主。

在 OpenStack 的私人網路建立上則比較多樣,分為 VLAN、VXLAN、GRE 等等,其中 VLAN 與 VXLAN 是較為常見建立方式:

VLAN:優點

VLAN:缺點:

VXLAN:優點

VXLAN:缺點

而在本篇,是會以 Provider Network 的形式講解設定 Multicast 的部分,在設定上不論是單純 VLAN 還有用 Provider Network 的方式,原理都是一樣的,只有步驟在細節上的差異。

OpenStack 實作 Multicast (2):建立Provider Network

本篇範例所使用的 Openstack 環境是透過 Kolla 進行部署,Kolla 是採用多個容器所建立起來的 Openstack 環境,每一個容器就是一個 Openstack component,因此在修改設定還有修復上都比傳統部署方式還來得簡單容易。

要建立 Provider Network,我們首先得在交換器上建立一組給該 Network 所使用的 VLAN ID,這邊我們假設 VLAN ID 是1500。接著修改一下 OpenStack 的設定,必須分別在 Kolla 部署節點上,新增或修改檔案內的相關設定文字

* 啟用Provider Network功能
/etc/kolla/globals.yml
enable_neutron_provider_networks: yes

* 將Neutron External Network設定可加入進VLAN類型
/etc/kolla/config/neutron/ml2_conf.ini
[ml2_type_vlan]
network_vlan_ranges = *

* 為OvS啟用IGMP Snooping功能
/etc/kolla/config/neutron.conf
[ovs]
igmp_snooping_enable = true

完畢後即可更新當前Openstack的設定檔

kolla-ansible -i <inventory> reconfigure

接著就可以透過 Horizon 建立一個新的 External Network

建立完成後,便可以直接開一個 VM,綁定這個 Network 並測試看看是否可以在 VM 內取得 IP 以及對外雙向連線,確認完成後就可以來設定 IGMP 啦!

OpenStack 實作 Multicast (3):在 Provider Network 上設定 Multicast

這部分會分為三項要做的項目:

openstack security group rule create <security group ID> — ingress — protocol igmp

同樣的指令,將 ingress 改為 egress 後再打一次,另外由於 Multicast 封包是建立在 UDP 為基礎,因此也需要在 Security Group 上開通雙向 UDP。

ovs-vsctl set Bridge <bridge名稱> mcast_snooping_enable=true
ovs-vsctl set Bridge <bridge名稱> other_config:mcast-snooping-disable-flood-unregistered=true
* 備註:每一台 Compute 節點都要設定

總結

本篇講解了 Multicast 上的一些應用與問題,以及簡單說明在 OpenStack上的實作。儘管這部分在私有雲的應用上會是較少見的,還是作為一個有需求時可以參考的一種方式。

關於我們

雙子星雲端具有多年 OpenStack 管理經驗,現也為 CNCF 會員,是 CNCF 所認證的 Kubernetes 服務提供商,在雲端 VM 與容器技術擁有十多年以上的經驗,為台灣雲端技術早期領先者。目前為國家級 AI 雲的軟體及 Kubernetes 技術與服務提供商,更是諸多企業與單位導入虛擬機/容器與管理平台的最佳夥伴。

Gemini AI Console 已發布最新版本,歡迎各界有興趣的朋友跟我們索取最新的產品資訊,也可以 立刻預約 Demo,我們的產品顧問將向您示範,並免費提供線上的試用!


相關文章

回雙子星技術部落格列表

Gemini AI Console

熱門文章


kubernetes professional service

關於我們

雙子星雲端是混合多雲技術的領導者,是國際認證之 KCSP - Kubernetes 服務提供商,同時也為 CNCF 雲原生計算基金會會員。

雙子星的雲端專家擁有 Kubernetes、OpenStack 與 Google Cloud Platform 等多項證照,我們的軟體至今已為上百家機構和數千台的 CPU/GPU 伺服器提供雲端服務。