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