多播路由(multicast routing)
想像一場現場講座被送往一百間教室。給每間教室各寄一份副本(單播)很浪費力氣;對著大樓裡每個人大喊(廣播)則惹惱那些沒要求的人。聰明的中間路線是送出一道串流,讓網路只在必須之處才複製它,這樣每間有興趣的教室都拿到一份副本,而來源不必送一百份。多播路由(multicast routing)建立的正是讓這種高效率的一對多遞送得以成立的遞送樹。
多播使用特殊的群組位址(在 IPv4 是 224.0.0.0/4 範圍):一個送往群組位址的封包,應該抵達每一台已加入該群組的主機,且不抵達其他主機。多播路由的工作,是算出一棵以來源為根(或在多個來源間共享)的分送樹,其分支恰好抵達那些有感興趣接收者的路由器,這樣每條連結至多承載一次串流,而路由器只在分支點複製副本。接收者藉由加入某群組來表明興趣(透過像 IGMP 這樣的協定告知它們的本地路由器),而路由器用 PIM 之類的多播路由協定來建立這棵樹。與它密切相關的是廣播路由,後者氾流給網路中所有主機——多播則是有選擇性、認得群組的版本。
凡是同一份資料要同時送往許多接收者的地方,它都很重要:IPTV 與現場直播、軟體與股市報價的分送,以及路由協定本身(OSPF 用多播來抵達鄰居)。做得對,多播不論下游掛了多少接收者,都只把每個位元組在每條連結上送一次——比起每個接收者各送一份單播副本,這是巨大的節省。
一個誠實的提醒:IP 多播在單一受管理的網路內部運作良好,但眾所周知地難以在更廣的網際網路上部署,因為它需要路徑上每一台路由器都合作、維護每群組的狀態,並跨行政管理邊界信任群組成員資格。結果,今日網際網路上許多『一對多』遞送,實際上是用單播加內容傳遞網路來完成,而非真正的網路層多播。
一個來源把影片串流到多播群組 239.1.1.1。某路由器五條下游連結中有三條通往已加入的接收者,所以該路由器只把串流複製到那三條連結上,而非另外兩條——一份進來的副本變成三份,且只在需要之處。
路由器只在分送樹的分支點複製副本,所以每條連結至多承載一次串流。
真正的網路層 IP 多播在公眾網際網路上很少被部署;今日多數大規模的一對多遞送,改用單播加 CDN 來完成。