IP組播 -html
.多播源分發樹和共享分發樹 算法
源分發樹,保證目的到達源的路徑最短,但要爲每個多播源保持一棵樹,CPU使用率高。
共享分發樹,要選RP,能保證目的到RP最近,不用爲每個源保持一棵樹,而共同保持一棵以RP爲根的樹便可,這樣節約了設備資源,可是不能再保證到源的路徑最近了。(源發向rp的多播以單播ip in ip的形式)網絡
PIM(Protocol Independent Multicast)稱爲協議無關組播,主要用於將網絡中的組播數據流發送到有組播數據請求的組成員所鏈接的組播設備上,從而實現組播數據的路由查找與轉發。spa
這裏的協議無關指的是與單播路由協議無關,即PIM不須要維護專門的單播路由信息。視頻
做爲組播路由解決方案,它直接利用單播路由表的路由信息,對組播報文執行RPF(Reverse Path Forwarding,逆向路徑轉發)檢查,檢查經過後建立組播路由表項,從而轉發組播報文。htm
目前設備實際支持的PIM協議包括:PIM-DM(PIM-DenseMode,密集模式)、PIM-SM(PIM-Sparse Mode,稀疏模式)。blog
1992年,爲了承載網絡視頻會議、音頻會議,以MOSPF和DVMRP爲組播路由協議的虛擬IP組播骨幹網——Mbone創建成功。這爲組播技術應用和推廣起到了積極做用,在隨後的十幾年,組播路由協議獲得了很大發展。接口
可是隨着多個組播路由協議的開發與應用,人們漸漸感受到,若是像單播路由同樣經過多種路由協議算法來動態生成組播路由,會帶來不一樣路由協議間在互相引入路由時操做繁瑣的問題。並且網絡設備對於單播和組播路由信息都須要維護。這也就催生了一種與單播路由協議無關的組播路由協議——PIM。ip
PIM協議只專一於組成員和組播源狀態相關的信息,而選取路徑的信息直接從單播路由表獲取。所以它不須要維護龐大的路由信息,從而下降了PIM協議的複雜性。這使得PIM協議成爲應用最普遍的域內組播協議。
由PIM路由器所組成的網絡稱爲PIM網絡。一般一個大的PIM網絡能夠劃分爲多個PIM域來管理和控制組播報文的轉發,這裏的域內組播協議便是指PIM域內組播協議。
1、PIM基本概念
圖1 PIM網絡示意圖
經過上圖1來介紹PIM的一些基本概念。
PIM網絡以組播組爲單位在路由器上創建一點到多點的組播轉發路徑。因爲組播轉發路徑呈現樹型結構,也稱爲PIM組播分發樹MDT(Multicast Distribution Tree)。
組播分發樹主要包括如下兩種:
以組播源爲根,組播組成員爲葉子的組播分發樹稱爲SPT(Shortest Path Tree,最短路徑樹)。SPT同時適用於PIM-DM網絡和PIM-SM網絡。
如上圖1中的RouterE→RouterD→RouterA(RouterB),就是一棵以Source爲根,以HostA、HostB爲葉子的SPT。
以RP(Rendezvous Point,聚集點)爲根,組播組成員爲葉子的組播分發樹稱爲RPT(RP Tree,聚集點樹)。RPT適用於PIM-SM網絡。
2、PIM路由器
在接口上使能了PIM協議的路由器即爲PIM路由器。在創建組播分發樹的過程當中,PIM路由器又分爲如下幾種:
葉子路由器:
與用戶主機相連的PIM路由器,但鏈接的用戶主機不必定爲組成員,如上圖1中的RouterA、RouterB、RouterC。
第一跳路由器:
組播轉發路徑上,與組播源相連且負責轉發該組播源發出的組播數據的PIM路由器。如上圖1中的RouterE。
最後一跳路由器:
組播轉發路徑上,與組播組成員相連且負責向該組成員轉發組播數據的PIM路由器。如上圖1中的RouterA、RouterB。
中間路由器:
組播轉發路徑上,第一跳路由器與最後一跳路由器之間的PIM路由器。如上圖1中的RouterD。
3、PIM路由表項
PIM路由表項即經過PIM協議創建的組播路由表項。PIM網絡中存在兩種路由表項:(S,G)路由表項或(*,G)路由表項。S表示組播源,G表示組播組,*表示任意。
(S,G)路由表項主要用於在PIM網絡中創建SPT。對於PIM-DM網絡和PIM-SM網絡適用。
(*,G)路由表項主要用於在PIM網絡中創建RPT。對於PIM-SM網絡適用。
PIM路由器上可能同時存在兩種路由表項。當收到源地址爲S,組地址爲G的組播報文,且RPF檢查經過的狀況下,按照以下的規則轉發:
若是存在(S,G)路由表項,則由(S,G)路由表項指導報文轉發。
若是不存在(S,G)路由表項,只存在(*,G)路由表項,則先依照(*,G)路由表項建立(S,G)路由表項,再由(S,G)路由表項指導報文轉發。
PIM路由表項中主要用於指導轉發的信息以下:
組播源地址。
組播組地址。
上游接口:本地路由器上接收到組播數據的接口,如上圖1中的Int3。
下游接口:將組播數據轉發出去的接口,如上圖1中的Int一、Int2。