一、什么是組播
1. 什么是組播?
組播是一種數(shù)據(jù)包傳輸方式,當(dāng)有多臺(tái)主機(jī)同時(shí)成為一個(gè)數(shù)據(jù)包的接受者時(shí),出于對(duì)帶寬和CPU負(fù)擔(dān)的考慮,組播成為了一種最佳選擇。
2. 組播如何進(jìn)行工作?
組播通過把224.0.0.0-239.255.255.255的D類地址作為目的地址,有一臺(tái)源主機(jī)發(fā)出目的地址是以上范圍組播地址的報(bào)文,在網(wǎng)絡(luò)中,如果有其他主機(jī)對(duì)于這個(gè)組的報(bào)文有興趣的,可以申請(qǐng)加入這個(gè)組,并可以接受這個(gè)組,而其他不是這個(gè)組的成員是無法接受到這個(gè)組的報(bào)文的。
3. 組播和單播的區(qū)別?
為了讓網(wǎng)絡(luò)中的多個(gè)主機(jī)可以同時(shí)接受到相同的報(bào)文,如果采用單播的方式,那么源主機(jī)必須不停的產(chǎn)生多個(gè)相同的報(bào)文來進(jìn)行發(fā)送,對(duì)于一些對(duì)時(shí)延很敏感的數(shù)據(jù),在源主機(jī)要產(chǎn)生多個(gè)相同的數(shù)據(jù)報(bào)文后,在產(chǎn)生第二個(gè)數(shù)據(jù)報(bào)文,這通常是無法容忍的。而且對(duì)于一臺(tái)主機(jī)來說,同時(shí)不停的產(chǎn)生一個(gè)報(bào)文來說也是一個(gè)很大的負(fù)擔(dān)。
如果采用組播的方式,源主機(jī)可以只需要發(fā)送一個(gè)報(bào)文就可以到達(dá)每個(gè)需要接受的主機(jī)上,這中間還要取決于路由器對(duì)組員和組關(guān)系的維護(hù)和選擇。
4. 組播和廣播的區(qū)別?
如同上個(gè)例子,當(dāng)有多臺(tái)主機(jī)想要接收相同的報(bào)文,廣播采用的方式是把報(bào)文傳送到局域網(wǎng)內(nèi)每個(gè)主機(jī)上,不管這個(gè)主機(jī)是否對(duì)報(bào)文感興趣。這樣做就會(huì)造成了帶寬的浪費(fèi)和主機(jī)的資源浪費(fèi)。而組播有一套對(duì)組員和組之間關(guān)系維護(hù)的機(jī)制,可以明確的知道在某個(gè)子網(wǎng)中,是否有主機(jī)對(duì)這類組播報(bào)文感興趣,如果沒有就不會(huì)把報(bào)文進(jìn)行轉(zhuǎn)發(fā),并會(huì)通知上游路由器不要再轉(zhuǎn)發(fā)這類報(bào)文到下游路由器上。
二、組播協(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)中,有多少臺(tái)主機(jī)屬于一個(gè)特定的組。
2. 組播報(bào)文的路由
要組播路由協(xié)議有什么用?
(1)是發(fā)現(xiàn)上游接口,離源最近的接口。因?yàn)榻M播路由協(xié)議只關(guān)心到源的最短路徑。
(2)通過(S,G)對(duì)來決定真正的下游接口,當(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è)包會(huì)返回到其輸入的接口,而且這個(gè)包也會(huì)經(jīng)復(fù)制發(fā)到其他的端口上。這一結(jié)果可能導(dǎo)致多播風(fēng)暴,這個(gè)包不斷在路由器與交換機(jī)間復(fù)制,直到TTL減為0。由于這是個(gè)復(fù)制過程,它的危害會(huì)比單播環(huán)路嚴(yán)重的多,所以所有的多播路由器必須知道多播包的源,并且需要保證多播包不能從源接口發(fā)出。所以他必須知道哪些是上游接口和下游接口,可以分辨出數(shù)據(jù)包的流向。如果在不是在源的上游接口收到數(shù)據(jù)包,就會(huì)把它丟棄掉。而多播路由協(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ī)相對(duì)來少的一種拓?fù)洌饕霈F(xiàn)在WAN中。
什么是密集模式?和以上相反,主要出現(xiàn)在交換式LAN或校園網(wǎng)中
隱式加入和顯示加入的比較?
組員可以在多播會(huì)話存活的時(shí)候,加入或退出一個(gè)組,而其相連的路由器必須動(dòng)態(tài)的根據(jù)直連子網(wǎng)內(nèi)組員的存在或退出來決定要加入或剪除多播樹的樹枝。這就是通過顯式或隱式加入兩種方式來完成。
隱式加入試用于密集模式,它是采用廣播/剪除模式來去除多播樹上的沒有組播成員的樹枝,也就是說,它是通過先把網(wǎng)際網(wǎng)絡(luò)上的所有路由器都加入到多播樹上,然后由每個(gè)路由器通過IGMP來查詢是否有組員在直連的子網(wǎng)上,如果沒有,就發(fā)出一條剪除消息,來剪除多余的樹枝。
而顯示加入適用于稀疏模式,它是由每個(gè)路由器先查詢子網(wǎng)內(nèi)有無組員,然后才看是否要發(fā)加入信息給上游路由器。
基于源的樹和共享樹的比較?
基于源的樹是針對(duì)一個(gè)源就會(huì)有一顆多播樹構(gòu)成,也就說,如果網(wǎng)絡(luò)中有多個(gè)可以產(chǎn)生組播報(bào)文的源主機(jī),那么就會(huì)有多少顆組播樹組成,在組播表里,會(huì)有組數(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)行注冊(cè),然后通過直連的路由器來確定到RP的最短路徑,通過RP路由器來確定到目的地的最短路徑。RP成為了多播樹的根結(jié)點(diǎn)。
相對(duì)于基于源的樹,共享樹的多播表項(xiàng)更為精簡(jiǎn),適合在稀疏模式下使用。但是也有一些缺點(diǎn)。共享樹在RP上的選擇,會(huì)導(dǎo)致從源主機(jī)到各個(gè)組地址的路由并非最優(yōu)路徑。
如果在整個(gè)局域網(wǎng)里同時(shí)有多條耗帶寬的組播鏈路,會(huì)導(dǎo)致RP成為整個(gè)網(wǎng)絡(luò)的瓶頸。并且在共享樹中,采用選取RP來轉(zhuǎn)發(fā)組播報(bào)文,會(huì)增加產(chǎn)生單點(diǎn)故障的可能。
三、如何來維護(hù)組成員
現(xiàn)在有IGMP和CGMP(Cisco專有的)兩種協(xié)議,可以進(jìn)行主機(jī)和網(wǎng)絡(luò)設(shè)備之間的組員關(guān)系的維護(hù)。
IGMP是路由器和內(nèi)部子網(wǎng)之間通信的方式,也就是說它是三層設(shè)備對(duì)直連子網(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ī)會(huì)產(chǎn)生以下3種信息:
* Member Report消息
用來指示一臺(tái)主機(jī)想要加入一個(gè)組播組,這個(gè)消息在一個(gè)主機(jī)第一次加入組的時(shí)候會(huì)發(fā)出,也可以用來響應(yīng)三層設(shè)備發(fā)出Membership Query消息。由于Membership Query消息的目的地址是組地址,除了路由器,網(wǎng)內(nèi)其他的組員主機(jī)都會(huì)收到這個(gè)報(bào)文,一旦其他主機(jī)收到報(bào)文,他們將會(huì)抑制自己的Membership Query報(bào)文,避免了內(nèi)部局域網(wǎng)充斥了Membership Query報(bào)文。它只需要讓路由器知道網(wǎng)內(nèi)還有一個(gè)組員。
* Version 1 Membership Report消息
是為了IGMPv2主機(jī)的向后兼容性,用于檢測(cè)和支持子網(wǎng)中IGMPv1主機(jī)和路由器 (轉(zhuǎn)載注明出處n et130)
* Leave Group消息
主機(jī)發(fā)出的,目的地址為224.0.0.2(所有路由器),告訴路由器主機(jī)離開了一個(gè)組。
IGMPv2路由器功能:
主要是查詢功能,它會(huì)有兩種查詢報(bào)文,General Query和Group-Specific Query
General Query每隔一段時(shí)間就會(huì)向局域網(wǎng)內(nèi)發(fā)送,目的地址是224.0.0.1(網(wǎng)內(nèi)所有主機(jī)),所以子網(wǎng)里的每一個(gè)主機(jī)都會(huì)收到這個(gè)報(bào)文,并且會(huì)以Member Report報(bào)文回應(yīng),如果在一定的時(shí)間間隔內(nèi)設(shè)備沒有收到任何Member Report,它就會(huì)認(rèn)為子網(wǎng)內(nèi)沒有組員。
Group-Specific Query報(bào)文,當(dāng)路由器收到一個(gè)Leave Group報(bào)文的時(shí)候,它會(huì)發(fā)送這樣一個(gè)具體包含有組地址的報(bào)文來查詢這個(gè)組是否有組成員存在。
當(dāng)如果在一個(gè)子網(wǎng)上同時(shí)有兩個(gè)多播路由器,他們一開始都會(huì)認(rèn)為自己是組播成員的查詢者,當(dāng)他們發(fā)送General Query報(bào)文時(shí),通過比較從對(duì)端收到的報(bào)文源IP地址的大小來決定誰(shuí)是查詢者誰(shuí)不是查詢者,IP地址大的成為查詢者。如果在一段時(shí)間內(nèi)沒有收到查詢的報(bào)文,就會(huì)認(rèn)為查詢者down掉了,它就會(huì)充當(dāng)起查詢者的角色。
CGMP(Cisco專有)
考慮到了如果有交換機(jī)存在的情況,考慮到了在三層設(shè)備和主機(jī)中有二層設(shè)備,而IGMP是一個(gè)三層協(xié)議,二層設(shè)備如果收到這樣一個(gè)類型的報(bào)文,只會(huì)向除了源端口以外的所有端口進(jìn)行轉(zhuǎn)發(fā),這樣會(huì)對(duì)網(wǎng)絡(luò)的帶寬和整體性能造成影響。解決的方法是希望交換機(jī)可以對(duì)有組播成員的端口進(jìn)行組播報(bào)文的轉(zhuǎn)發(fā)。
在交換式網(wǎng)絡(luò)上,對(duì)組播流的控制有三種方法:
(1)手工配置的交換式多播樹
在交換機(jī)的橋接表上配置靜態(tài)的組播MAC地址和端口映射。
(2)GMRP(802.1p)
他讓MAC層的多播組地址動(dòng)態(tài)地在交換機(jī)上注冊(cè)和取消。
(3)IGMP偵聽
通過在交換機(jī)端口上配置,可以使交換機(jī)進(jìn)行IGMP消息地檢查,可以知道多播路由器和組員地位置。但是,檢測(cè)IGMP消息意味著所有地IP包都要進(jìn)行檢查。尤其當(dāng)這些如果是在軟件地方式來實(shí)施,會(huì)嚴(yán)重降低交換機(jī)的性能。
CGMP的做法是通過路由器來告訴交換機(jī),組播成員的組MAC地址和主機(jī)MAC地址,讓交換機(jī)可以知道在那個(gè)端口上有組員,并且可以進(jìn)行轉(zhuǎn)發(fā)。
四、組播報(bào)文如何來進(jìn)行路由
現(xiàn)下常用的組播路由協(xié)議有一下幾種,由于現(xiàn)在主流的路由器產(chǎn)品只支持Pim,其他的路由器協(xié)議都不支持,所以只會(huì)對(duì)PIM做個(gè)詳細(xì)的解釋。
DVMRP 它是通過RIP來發(fā)現(xiàn)到源的最短路徑,采用廣播/剪除的方式來構(gòu)建一顆多播樹。
MOSPF 它是通過OSPF協(xié)議來發(fā)現(xiàn)到源的最短路徑,也是用在密集方式的拓?fù)湎隆?/p>
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)器
其中會(huì)產(chǎn)生一下5中PIMv2消息:
* Hello
周期性地發(fā)送用來發(fā)現(xiàn)PIM鄰居。和OSPF中的Hello報(bào)文有著類似點(diǎn),如果沒有在一定的時(shí)間內(nèi)收到,就會(huì)認(rèn)為鄰居已經(jīng)死亡。
* Join/Prune
這是一個(gè)合成的報(bào)文,其中有要加入組播樹的路由器信息,也有要被剪除路由器信息,都會(huì)在這樣一個(gè)報(bào)文里列出來。
當(dāng)源在發(fā)送多播報(bào)文的時(shí)候,PIM-DM用擴(kuò)散與剪除的方式建立多播樹。那些沒有組員連接的路由器通過發(fā)送Prune消息可以把自己變成處于剪除狀態(tài)。
當(dāng)處在剪除狀態(tài)的路由器,它收到了所直連的子網(wǎng)所發(fā)出的IGMP加入信息,就會(huì)發(fā)出這樣一個(gè)join的報(bào)文給上游路由器,通知列出了需要加入多播樹的子網(wǎng)列表。
* Graft
當(dāng)一個(gè)下游路由器發(fā)送給上游路由器一個(gè)Prune報(bào)文時(shí),上游路由器不會(huì)馬上把通告的子網(wǎng)從多播前轉(zhuǎn)表中刪除,而是會(huì)等待一段時(shí)間,如果下游路由器所直連的子網(wǎng)又要加入多播樹時(shí),需要發(fā)出一個(gè)Graft報(bào)文,通知上游路由器來加入多播樹。 (轉(zhuǎn)載注明出處n et130)
* Graft-Ack
上游路由器收到一個(gè)Graft信息,必須要回一個(gè)Ack信息,這樣才會(huì)使下游路由器接受組播報(bào)文
* Assert
當(dāng)有兩臺(tái)設(shè)備同時(shí)連在同一個(gè)廣播網(wǎng)絡(luò)上,并且有相同的上游路由器接口,如果兩臺(tái)路由器同時(shí)負(fù)責(zé)前轉(zhuǎn)多播報(bào)文的話,會(huì)造成網(wǎng)絡(luò)資源的浪費(fèi),所以需要可以在兩臺(tá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é)議
* 自動(dòng)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)行剝頭,對(duì)其中的組播報(bào)文進(jìn)行處理。如果組播報(bào)文比較多,通過封裝Register報(bào)文對(duì)設(shè)備來說是一種負(fù)擔(dān),所以可以在RP和源之間建立一個(gè)基于源的樹,進(jìn)行源到RP的組播報(bào)文傳送。
PIM-SM和最短路徑樹
在大型網(wǎng)絡(luò)中,共享樹的路徑未必是最短路徑,PIM-SM可以通過在源和目的地之間建立一個(gè)基于源的樹實(shí)現(xiàn)最短路徑的傳送。
Written by pioneer98(臨湖)
Deion 歡迎轉(zhuǎn)載,請(qǐng)保留作者信息
Jul.1st.2004 R!
聯(lián)系客服