一、組播協(xié)議的要素
通過和廣播,單播的數(shù)據(jù)傳輸方式的比較,我們可以發(fā)現(xiàn)組播中最關(guān)鍵的兩個(gè)部分:
1. 組的管理和維護(hù)
在組播這套協(xié)議中,在網(wǎng)絡(luò)設(shè)備和所連接的子網(wǎng)需要有一套協(xié)議或機(jī)制來保證網(wǎng)絡(luò)設(shè)備知道所連接的子網(wǎng)中,有多少臺主機(jī)屬于一個(gè)特定的組。
2. 組播報(bào)文的路由
要組播路由協(xié)議有什么用?
(1)是發(fā)現(xiàn)上游接口,離源最近的接口。因?yàn)榻M播路由協(xié)議只關(guān)心到源的最短路徑。
(2)通過(S,G)對來決定真正的下游接口,當(dāng)所有的路由器都知道了他們的上下游接口,那么一顆多播樹就已經(jīng)建立完成。根是源主機(jī)直連的路由器,而樹枝是通過IGMP發(fā)現(xiàn)有組員的子網(wǎng)直連的路由器 (轉(zhuǎn)載注明出處n et130)
(3)管理多播樹
單播路由只需要知道下一跳的地址,就可以進(jìn)行報(bào)文得轉(zhuǎn)發(fā)。而組播,是把從一個(gè)由源產(chǎn)生得報(bào)文發(fā)送給一組目的。在一個(gè)特定的路由器上,一個(gè)包得多個(gè)備份可能從多個(gè)接口上發(fā)出。如果有環(huán)路得存在,那么一個(gè)或多個(gè)包會返回到其輸入的接口,而且這個(gè)包也會經(jīng)復(fù)制發(fā)到其他的端口上。這一結(jié)果可能導(dǎo)致多播風(fēng)暴,這個(gè)包不斷在路由器與交換機(jī)間復(fù)制,直到TTL減為0。由于這是個(gè)復(fù)制過程,它的危害會比單播環(huán)路嚴(yán)重的多,所以所有的多播路由器必須知道多播包的源,并且需要保證多播包不能從源接口發(fā)出。所以他必須知道哪些是上游接口和下游接口,可以分辨出數(shù)據(jù)包的流向。如果在不是在源的上游接口收到數(shù)據(jù)包,就會把它丟棄掉。而多播路由協(xié)議必須關(guān)心到源的最短路徑,或者說它關(guān)心到源的上游接口。同時(shí),除了關(guān)心上游接口,但是在轉(zhuǎn)發(fā)的時(shí)候,不能把數(shù)據(jù)包從除了上游接口的其他接口發(fā)送出去。所以,另外,他還要關(guān)心(S,G)下游接口。當(dāng)關(guān)于一個(gè)(S,G)的上下游接口都被判斷出來了,那么一顆多播樹就形成了。
稀疏和密集模式的比較?
什么是稀疏模式?它是指在一個(gè)整體網(wǎng)絡(luò)中,參與組播的主機(jī)相對來少的一種拓?fù),主要出現(xiàn)在WAN中。
什么是密集模式?和以上相反,主要出現(xiàn)在交換式LAN或校園網(wǎng)中
隱式加入和顯示加入的比較?
組員可以在多播會話存活的時(shí)候,加入或退出一個(gè)組,而其相連的路由器必須動態(tài)的根據(jù)直連子網(wǎng)內(nèi)組員的存在或退出來決定要加入或剪除多播樹的樹枝。這就是通過顯式或隱式加入兩種方式來完成。
隱式加入試用于密集模式,它是采用廣播/剪除模式來去除多播樹上的沒有組播成員的樹枝,也就是說,它是通過先把網(wǎng)際網(wǎng)絡(luò)上的所有路由器都加入到多播樹上,然后由每個(gè)路由器通過IGMP來查詢是否有組員在直連的子網(wǎng)上,如果沒有,就發(fā)出一條剪除消息,來剪除多余的樹枝。
而顯示加入適用于稀疏模式,它是由每個(gè)路由器先查詢子網(wǎng)內(nèi)有無組員,然后才看是否要發(fā)加入信息給上游路由器。
基于源的樹和共享樹的比較?
基于源的樹是針對一個(gè)源就會有一顆多播樹構(gòu)成,也就說,如果網(wǎng)絡(luò)中有多個(gè)可以產(chǎn)生組播報(bào)文的源主機(jī),那么就會有多少顆組播樹組成,在組播表里,會有組數(shù)×每組的成員數(shù)的項(xiàng)目條數(shù)。這種拓?fù)渲饕m用于密集模式。
共享樹是在整個(gè)網(wǎng)絡(luò)中選一個(gè)RP,或叫集中點(diǎn),所有的組播報(bào)文都需要從這個(gè)點(diǎn)來進(jìn)行傳送,所以它沒有(S,G)項(xiàng),只有(*,G)項(xiàng),表明所有有多個(gè)源。RP是預(yù)先設(shè)定的一個(gè)路由器,承擔(dān)轉(zhuǎn)發(fā)所有的多播報(bào)文的責(zé)任。所有要發(fā)送組播報(bào)文的源主機(jī)在發(fā)送組播報(bào)文前,都需要到RP上進(jìn)行注冊,然后通過直連的路由器來確定到RP的最短路徑,通過RP路由器來確定到目的地的最短路徑。RP成為了多播樹的根結(jié)點(diǎn)。
相對于基于源的樹,共享樹的多播表項(xiàng)更為精簡,適合在稀疏模式下使用。但是也有一些缺點(diǎn)。共享樹在RP上的選擇,會導(dǎo)致從源主機(jī)到各個(gè)組地址的路由并非最優(yōu)路徑。
如果在整個(gè)局域網(wǎng)里同時(shí)有多條耗帶寬的組播鏈路,會導(dǎo)致RP成為整個(gè)網(wǎng)絡(luò)的瓶頸。并且在共享樹中,采用選取RP來轉(zhuǎn)發(fā)組播報(bào)文,會增加產(chǎn)生單點(diǎn)故障的可能。
IP組播地址主要分為2個(gè)大范圍:
1.保留給網(wǎng)絡(luò)協(xié)議用的地址(224.0.0.0-224.0.0.255)
2.組播全局地址,是可以整個(gè)internet中動態(tài)的分配的(224.0.1.0-238.255.255.255)
3.組播私有地址,也是組播管理地址(239.0.0.0-239.255.255.255)
組播在第二層的地址是IANA的一個(gè)以0x01:00:5E打頭的地址塊
IP組播和2層組播地址轉(zhuǎn)換方法:將IP組播地址的最后的23位映射到MAC地址的最后23位。(但是這樣會造成32個(gè)IP組播地址被映射到一個(gè)MAC組播地址的問題。)
二、如何來維護(hù)組成員
現(xiàn)在有IGMP和CGMP(Cisco專有的)兩種協(xié)議,可以進(jìn)行主機(jī)和網(wǎng)絡(luò)設(shè)備之間的組員關(guān)系的維護(hù)。
IGMP是路由器和內(nèi)部子網(wǎng)之間通信的方式,也就是說它是三層設(shè)備對直連子網(wǎng)的組關(guān)系的維護(hù)機(jī)制。它可以分成兩個(gè)部分,主機(jī)部分和路由器部分,每個(gè)部分可以完成不同的工作。但是它有一個(gè)限制,就是IGMP報(bào)文只能在本地子網(wǎng)內(nèi)傳送,使三層設(shè)備不能前轉(zhuǎn)到其他的設(shè)備上,它的TTL總是1。
IGMPv2主機(jī)部分的功能:
運(yùn)行IGMPv2的主機(jī)會產(chǎn)生以下3種信息:
* Member Report消息
用來指示一臺主機(jī)想要加入一個(gè)組播組,這個(gè)消息在一個(gè)主機(jī)第一次加入組的時(shí)候會發(fā)出,也可以用來響應(yīng)三層設(shè)備發(fā)出Membership Query消息。由于Membership Query消息的目的地址是組地址,除了路由器,網(wǎng)內(nèi)其他的組員主機(jī)都會收到這個(gè)報(bào)文,一旦其他主機(jī)收到報(bào)文,他們將會抑制自己的Membership Query報(bào)文,避免了內(nèi)部局域網(wǎng)充斥了Membership Query報(bào)文。它只需要讓路由器知道網(wǎng)內(nèi)還有一個(gè)組員。
* Version 1 Membership Report消息
是為了IGMPv2主機(jī)的向后兼容性,用于檢測和支持子網(wǎng)中IGMPv1主機(jī)和路由器 (轉(zhuǎn)載注明出處n et130)
* Leave Group消息
主機(jī)發(fā)出的,目的地址為224.0.0.2(所有路由器),告訴路由器主機(jī)離開了一個(gè)組。
IGMPv2路由器功能:
主要是查詢功能,它會有兩種查詢報(bào)文,General Query和Group-Specific Query
General Query每隔一段時(shí)間就會向局域網(wǎng)內(nèi)發(fā)送,目的地址是224.0.0.1(網(wǎng)內(nèi)所有主機(jī)),所以子網(wǎng)里的每一個(gè)主機(jī)都會收到這個(gè)報(bào)文,并且會以Member Report報(bào)文回應(yīng),如果在一定的時(shí)間間隔內(nèi)設(shè)備沒有收到任何Member Report,它就會認(rèn)為子網(wǎng)內(nèi)沒有組員。
Group-Specific Query報(bào)文,當(dāng)路由器收到一個(gè)Leave Group報(bào)文的時(shí)候,它會發(fā)送這樣一個(gè)具體包含有組地址的報(bào)文來查詢這個(gè)組是否有組成員存在。
當(dāng)如果在一個(gè)子網(wǎng)上同時(shí)有兩個(gè)多播路由器,他們一開始都會認(rèn)為自己是組播成員的查詢者,當(dāng)他們發(fā)送General Query報(bào)文時(shí),通過比較從對端收到的報(bào)文源IP地址的大小來決定誰是查詢者誰不是查詢者,IP地址大的成為查詢者。如果在一段時(shí)間內(nèi)沒有收到查詢的報(bào)文,就會認(rèn)為查詢者down掉了,它就會充當(dāng)起查詢者的角色。
CGMP(Cisco專有)
考慮到了如果有交換機(jī)存在的情況,考慮到了在三層設(shè)備和主機(jī)中有二層設(shè)備,而IGMP是一個(gè)三層協(xié)議,二層設(shè)備如果收到這樣一個(gè)類型的報(bào)文,只會向除了源端口以外的所有端口進(jìn)行轉(zhuǎn)發(fā),這樣會對網(wǎng)絡(luò)的帶寬和整體性能造成影響。解決的方法是希望交換機(jī)可以對有組播成員的端口進(jìn)行組播報(bào)文的轉(zhuǎn)發(fā)。
在交換式網(wǎng)絡(luò)上,對組播流的控制有三種方法:
(1)手工配置的交換式多播樹
在交換機(jī)的橋接表上配置靜態(tài)的組播MAC地址和端口映射。
(2)GMRP(802.1p)
他讓MAC層的多播組地址動態(tài)地在交換機(jī)上注冊和取消。
(3)IGMP偵聽
通過在交換機(jī)端口上配置,可以使交換機(jī)進(jìn)行IGMP消息地檢查,可以知道多播路由器和組員地位置。但是,檢測IGMP消息意味著所有地IP包都要進(jìn)行檢查。尤其當(dāng)這些如果是在軟件地方式來實(shí)施,會嚴(yán)重降低交換機(jī)的性能。
CGMP的做法是通過路由器來告訴交換機(jī),組播成員的組MAC地址和主機(jī)MAC地址,讓交換機(jī)可以知道在那個(gè)端口上有組員,并且可以進(jìn)行轉(zhuǎn)發(fā)。
三、組播報(bào)文如何來進(jìn)行路由
組播最大的難點(diǎn)在于組播的路由協(xié)議:PIM
PIM是協(xié)議無關(guān)的組播路由協(xié)議
PIM的分類:
從內(nèi)部運(yùn)行的機(jī)理分為:信源樹,共享樹
從IP組播使用的拓?fù)浣Y(jié)構(gòu)分為:Sparse mode(稀疏模式),Dense mode(密集模式)
從IP組播適用的范圍分為:域內(nèi)協(xié)議,域間協(xié)議
單播路由關(guān)心目標(biāo)地址,而組播路由關(guān)心的是源地址。
RPF(逆向路徑檢查)是避免組播路由環(huán)路和安全性檢查的一個(gè)很重要的因素。
通過路由器單播路由表檢查源目的地址才能確定RPF,靠近信源的接口是RPF接口,只有從RPF接口接收的報(bào)文才會向下游轉(zhuǎn)發(fā)。
PIM-SM:假定網(wǎng)絡(luò)帶寬很低,成員稀疏的分布在網(wǎng)絡(luò)中。(重點(diǎn))
1.通常用于WAN的網(wǎng)絡(luò)
2.適用PUll機(jī)制
3.通常使用共享分發(fā)樹(共享分發(fā)樹的根是RP)
PIM-DM:假定組成員密集的存在于組中并且有足有的帶寬和資源建立和維護(hù)分發(fā)樹。
1.通常用于LAN的網(wǎng)絡(luò)
2.使用PUSH的機(jī)制
3.通常適用源分發(fā)樹
現(xiàn)下常用的組播路由協(xié)議有一下幾種,由于現(xiàn)在主流的路由器產(chǎn)品只支持Pim,其他的路由器協(xié)議都不支持,所以只會對PIM做個(gè)詳細(xì)的解釋。
DVMRP 它是通過RIP來發(fā)現(xiàn)到源的最短路徑,采用廣播/剪除的方式來構(gòu)建一顆多播樹。
MOSPF 它是通過OSPF協(xié)議來發(fā)現(xiàn)到源的最短路徑,也是用在密集方式的拓?fù)湎隆?br />
CBT 是一個(gè)與協(xié)議無關(guān)的,基于稀疏模式的,共享樹協(xié)議。他和DVMRP和MOSPF的區(qū)別有兩點(diǎn):它無需要在組播中在加入一個(gè)路由協(xié)議,可以在現(xiàn)有的任何協(xié)議上查找到到源的最短路徑;它是基于共享樹的協(xié)議,所以必須要在網(wǎng)絡(luò)里設(shè)置一個(gè)網(wǎng)絡(luò)的核心來確保組播包的前轉(zhuǎn);更適合使用在稀疏模式下。
PIM-DM 它是個(gè)與協(xié)議無關(guān)的組播協(xié)議,同時(shí)又是基于密集拓?fù)涞慕M播協(xié)議。采用廣播/剪除的方法來進(jìn)行多播樹的構(gòu)造。
功能:
* 通過交換Hello報(bào)文發(fā)現(xiàn)鄰居
* 當(dāng)單播路由發(fā)生變化時(shí),重新計(jì)算RPF接口
* 在多路訪問的網(wǎng)絡(luò)中選舉指定路由器
* 在多路訪問的網(wǎng)絡(luò)中使用剪除覆蓋
* 在多路訪問的網(wǎng)絡(luò)中用Assert消息選舉指定前轉(zhuǎn)器
其中會產(chǎn)生一下5中PIMv2消息:
* Hello
周期性地發(fā)送用來發(fā)現(xiàn)PIM鄰居。和OSPF中的Hello報(bào)文有著類似點(diǎn),如果沒有在一定的時(shí)間內(nèi)收到,就會認(rèn)為鄰居已經(jīng)死亡。
* Join/Prune
這是一個(gè)合成的報(bào)文,其中有要加入組播樹的路由器信息,也有要被剪除路由器信息,都會在這樣一個(gè)報(bào)文里列出來。
當(dāng)源在發(fā)送多播報(bào)文的時(shí)候,PIM-DM用擴(kuò)散與剪除的方式建立多播樹。那些沒有組員連接的路由器通過發(fā)送Prune消息可以把自己變成處于剪除狀態(tài)。
當(dāng)處在剪除狀態(tài)的路由器,它收到了所直連的子網(wǎng)所發(fā)出的IGMP加入信息,就會發(fā)出這樣一個(gè)join的報(bào)文給上游路由器,通知列出了需要加入多播樹的子網(wǎng)列表。
* Graft
當(dāng)一個(gè)下游路由器發(fā)送給上游路由器一個(gè)Prune報(bào)文時(shí),上游路由器不會馬上把通告的子網(wǎng)從多播前轉(zhuǎn)表中刪除,而是會等待一段時(shí)間,如果下游路由器所直連的子網(wǎng)又要加入多播樹時(shí),需要發(fā)出一個(gè)Graft報(bào)文,通知上游路由器來加入多播樹。 (轉(zhuǎn)載注明出處n et130)
* Graft-Ack
上游路由器收到一個(gè)Graft信息,必須要回一個(gè)Ack信息,這樣才會使下游路由器接受組播報(bào)文
* Assert
當(dāng)有兩臺設(shè)備同時(shí)連在同一個(gè)廣播網(wǎng)絡(luò)上,并且有相同的上游路由器接口,如果兩臺路由器同時(shí)負(fù)責(zé)前轉(zhuǎn)多播報(bào)文的話,會造成網(wǎng)絡(luò)資源的浪費(fèi),所以需要可以在兩臺路由器中選出一個(gè)來作為唯一的前轉(zhuǎn)報(bào)文路由器,Assert報(bào)文就是在兩個(gè)路由器中互相通信,選出一個(gè)前轉(zhuǎn)器的報(bào)文,通過優(yōu)先權(quán)值,IP地址等參數(shù)來協(xié)商前轉(zhuǎn)器。
PIM-SM
采用共享樹的拓?fù)浞绞,建立起多播樹。使用顯示加入的方式來加入多播樹。
查找匯聚點(diǎn):
* 自舉協(xié)議
* 自動RP協(xié)議
* 靜態(tài)設(shè)置
PIM-SM和共享樹:
PIM-SM由于是單向傳輸協(xié)議,所以組播流量只能從RP向外發(fā)送,而不能向RP發(fā)送,而源是通過把組播報(bào)文封裝在PIM Register報(bào)文里,發(fā)送RP接口,然后再由RP進(jìn)行剝頭,對其中的組播報(bào)文進(jìn)行處理。如果組播報(bào)文比較多,通過封裝Register報(bào)文對設(shè)備來說是一種負(fù)擔(dān),所以可以在RP和源之間建立一個(gè)基于源的樹,進(jìn)行源到RP的組播報(bào)文傳送。
PIM-SM和最短路徑樹
在大型網(wǎng)絡(luò)中,共享樹的路徑未必是最短路徑,PIM-SM可以通過在源和目的地之間建立一個(gè)基于源的樹實(shí)現(xiàn)最短路徑的傳送。
PIM-SM的運(yùn)行機(jī)制分為四步:
1.RP Discovery (RP發(fā)現(xiàn)):包括RP的選舉和RP的發(fā)現(xiàn)
2.shared Tree built (建立共享分發(fā)樹):在接收方發(fā)送IGMP Join信息和路由器發(fā)送PIM Join信息到達(dá)RP后,所有經(jīng)過的路徑的接口都被加入到Outgoing interface,這樣就建立了源到目的的共享分發(fā)樹。
3.Source to RP registration (源到RP的注冊):源首先通過單播發(fā)送封裝的Register信息,RP收到注冊數(shù)據(jù)包后會通過RPF向源發(fā)送注冊信息,注冊信息一直到達(dá)源之后建立源到RP的源樹,RP再發(fā)送一個(gè)Register-stop停止源向RP發(fā)送
Register信息。
4.SPT switchover (切換路徑):當(dāng)源和目標(biāo)連接上了以后,可能會選擇一條更優(yōu)的源樹作為組播的轉(zhuǎn)發(fā)路徑?梢酝ㄟ^ ip pim spt-threshold 閥值控制組播路徑的切換。
難點(diǎn):RP的發(fā)現(xiàn)
RP發(fā)現(xiàn)分為1.靜態(tài)選定RP
2.動態(tài)發(fā)現(xiàn)RP(Auto-RP,PIM v2 BSR)
配置注意事項(xiàng):
1.靜態(tài)RP的配置需要再所有的路由器上配置,包括RP路由器本身也需要。所有的路由器配置的RP必須是一致的,是同一臺路由器。在默認(rèn)情況下,一個(gè)配置了靜態(tài)和動態(tài)RP的路由器中動態(tài)配置的優(yōu)先級高于靜態(tài)配置。
配置命令: ip pim rp-address ip-address [group-access-list-number][bidir][override]
配置[override]選項(xiàng)可以使靜態(tài)RP配置優(yōu)先級高于動態(tài)配置。
2.Auto RP是cisco的私有的解決方案。配置需要配置C-RP(candidate RP)和動態(tài)映射代理(mapping Agents)
每一個(gè)C-RP會向224.0.1.39發(fā)送一個(gè)Announce通告自己是RP,mapping Agents會監(jiān)聽224.0.1.39,再經(jīng)過裁定后選擇出誰是RP再通過224.0.1.40向所有的路由器通告真正的RP的地址。cisco推薦AutoRP路由器使用ip pim sparse-dense-mode
配置命令:
C-RP: ip pim send-rp-announce interface [type number] scope ttl [group-list acl-number]
注意:注意配置的范圍不當(dāng)會導(dǎo)致多臺MA選舉的RP不一致,在acl-number這個(gè)列表中的訪問控制列表中的deny any將不起作用。
M-A: ip pim send-rp-discovery interface [type number] scope ttl
注意:參與選舉MA的接口一定要運(yùn)行的PIM組播協(xié)議,推薦使用sparse-dense-mode
配置注意:如果涉及到AutoRP通告的范圍,請?jiān)诮M播路由域的邊界上配置一條ip multicast boundary限制泛洪了其他的域中,針對C-RP和MA都需要配置。
RP篩選機(jī)制: ip pim rp-announce-filter rp-list 1 group-list 2
注:這條命令可以針對rp-list列表1的路由器選出group-list列表2中組的RP
3.PIMv2 BSR Mechanism是PIM自帶的一種RP選舉機(jī)制,在一個(gè)BSR域內(nèi),BSR選定以后向網(wǎng)絡(luò)中所有的設(shè)備發(fā)送一個(gè)組播地址為224.0.0.13,周期為60秒的通告,通告自己是BSR,然后所有的C-RP知道BSR后都會向BSR發(fā)送單播的注冊信息,周期也是60秒發(fā)送一次。當(dāng)所有的C-RP的注冊信息收集完后,再將所有的C-RP的信息全部轉(zhuǎn)發(fā)給BSR范圍內(nèi)的所有路由器,所有路由器都會使用這些C-RP的信息,根據(jù)自己的算法計(jì)算出誰是RP。
配置命令:
C-RP: ip pim rp-candidate type number [group-list access-list-number]
注意:參與選舉的接口不需要運(yùn)行組播協(xié)議
詳細(xì)出處參考:
http://www.itqun.net/content-detail/207752.html