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