組播IP地址


組播IP地址

 

關於組播地址的分類:
224.0.0.0~224.0.0.255為預留的組播地址(永久組地址),地址224.0.0.0保留不做分配,其它地址供路由協議使用;
224.0.1.0~224.0.1.255是公用組播地址,可以用於Internet;
224.0.2.0~238.255.255.255為用戶可用的組播地址(臨時組地址),全網范圍內有效;
239.0.0.0~239.255.255.255為本地管理組播地址,僅在特定的本地范圍內有效。

 

IANA已經把D類地址空間分配給了IP組播地址.
D類空間的地址在其第一個字節的前4位,用二進制值1110來識別.
所以組播地址的范圍是:
224.0.0.0到239.255.255.255.
D類地址:  www.2cto.com  
字節1 字節2 字節3 字節4
1110xxxx xxxxxxxx xxxxxxxx xxxxxxxx

clip_image002
 
原理是這樣的:
該空間的地址用二進制表示並且第一個八位數的前4位用1110表示.
1110xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx
下面給出一些常用的局部鏈接的組播地址:
224.0.0.1 所有主機
224.0.0.2 所有組播 路由器
224.0.0.3 沒有分配
224.0.0.4 DVMRP路由器
224.0.0.5 OSPF路由器
224.0.0.6 OSPF 指定路由器(DR)
224.0.0.7 ST路由器
224.0.0.8 ST主機
224.0.0.9 RIP2路由器
224.0.0.10 IGRP路由器
224.0.0.12 DHCP服務器/中繼代理
224.0.0.13 所有的PIM路由器
224.0.0.15 所有CBT路由器
224.0.0.18 VRRP
224.0.0.19 到 224.0.0.255是可以使用的。其他的建議保留以便網絡中的設備或者主機使用.
這里還要說明的是,實際上保留的地址空間遠遠不止那些.
IANA還預留了239.0.0.0--239.255.255.255的地址范圍作為管理范圍地址,以供在私有的組播領域內使用.
組播MAC地址
xxxxxx11.xxxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx
MAC地址我們都知道是48位的,在第一個8位中的最后2位如果置為1的話,那么就規定為是組播的MAC地址.  www.2cto.com  
以太網IP與組播MAC地址映射

clip_image004
 
由於IPv4組播地址的高4位是1110,代表組播標識,而低28位中只有23位被映射到IPv4組播MAC地址,這樣IPv4組播地址中就有5位信息丟失。於是,就有32個IPv4組播地址映射到了同一個IPv4組播MAC地址上,因此在二層處理過程中,設備可能要接收一些本IPv4組播組以外的組播數據,而這些多余的組播數據就需要設備的上層進行過濾了。
NOTES:
可以看到,三層組播IP是以 1110 開始的。
范圍從1110 0000 - 1110 1111 ,也就是224到239.
那么這里組播MAC是以0x010005E開始的.
最后可以看到,三層組播IP,224-239開頭的,最后映射到二層組播MAC,都變成一個了.
說到這里,就會產生一個問題。
MAC地址映射的性能影響:
因為第三層IP組播地址信息的全部28位比特不能映射進23bit可用的mac地址空間,所以在映射的過程中,丟失了5bit的地址信息,這會導致組播地址映射到第二層IEEE MAC地址時,會有2的5次方,或者32:1的地址不明確.這也就意味着,每一個IEEE IP多播MAC地址可以表示32個IP地址組播地址.
MAC和IP的后23位一一對應,后第24位可以是0或1,這一位沒有對應上。每一個2層地址可以映射成32個3層地址。
0100.5e01.0101
0100.5e可以映射成IP地址的第1個字節:224-239
01.0101可以映射成IP地址的后3個字節:1.1.1和129.1.1
這個MAC地址可以映射成:224.1.1.1、224.129.1.1、225.1.1.1、225.129.1.1….239.129.1.1這么32個IP地址。
記得一前段時間,客戶有一個這樣的需求。
Multicast – when issuing command “multicast mac-address 01:00:5e:01:01:01 vlan 30 interface ethernet 0/0/1” – we state 239.1.1.1 as MAC address – they what to state it as IP address.   www.2cto.com  
其實,這個需求就是,在二層 交換機上面,客戶不想用48bit的二層組播MAC地址標示,覺得太麻煩,這也可以理解,很多客戶根本就記不住MAC地址前面25bit是以0x01005E開頭的,更分不清楚后面的對應關系了。所以客戶說,想要在二層交換機上面寫三層的組播IP地址,讓 系統自動的翻譯成二層的組播MAC.
這里通過二層組播的mac原理,已經知道了,這樣會遇到一個很大的問題就是一個MAC可以同時對應32個組播IP. 
所以最后軟件的實現方式是:不管客戶寫什么IP開頭,比如說224/239/225/226.那么最終映射到系統的命令行會自動變成224.這里會給客戶一個提醒的命令行,說明一下這個問題的情況,然后最終系統識別到的還是01005E的前25位.

 

組播也是一種IP包,也有源IP地址,目的IP地址,源IP地址為組播源的服務器IP地址,目的地址為一個特殊的IP地址,它位於 224.0.0.0 - 239.255.255.255 中,由於 224.0.0.0/8用於本地鏈路,即一跳的組播,239.0.0.0/8 為私有組播地址,所以實際的可用於在互聯網上組播地址是225.0.0.0/8 - 238.0.0.0/8,這個組播地址不屬於任何服務器或個人,它有點類似一個微信群號,任何成員(組播源)往微信群(組播IP)發送消息(組播數據),這個群里的成員(組播接收者)都會接收到此消息。

IPTV就是組播的應用:

IPTV里的一個電視頻道對應一個組播IP, 假設CCTV1 對應的組播IP =238.1.1.1 ,IPTV節目源IP=1.1.1.1,就以238.1.1.1 為目的地址封裝發送,這里有兩個問題需要解決:

IPTV組播源不知道收看此節目的用戶在哪里?

收看此節目的用戶不知道IPTV組播源在哪里?


用戶IPTV機頂盒只知道節目組播地址為238.1.1.1 ,至於誰是這個節目源(IP=1.1.1.1)並不清楚。


於是就引入了一個中介機構(RP),Rendezvous Point,RP點,組播的匯聚點,RP IP = 2.2.2.2 ,組播源通過單播隧道的方式把組播238.1.1.1 發給 RP,簡稱組播源的注冊。


機頂盒靜態配置了RP IP = 2.2.2.2,知道RP會有組播數據,於是就向RP( 2.2.2.2)申請加入這個238.1.1.1 的組,於是RP就把自己收到的注冊組播源數據發送給機頂盒,這個就是基於RP的 樹,RPT。


機頂盒收到第一個組播包,定睛一看,原來組播源是1.1.1.1,於是發一個申請給1.1.1.1 ,申請加入238.1.1.1,這就是基於源的 樹,SPT。即然已加入了SPT ,就不需要RPT 了,向RP申請退出就可以了。

着重強調一點:一旦組播用戶(接收者)知道了組播源,那RP的任務就算完成了,RP的存在就是為了組播接收者發現組播源,組播用戶會加入路徑更優的SPT樹,會申請退出路徑不是最優的RPT樹,避免收到兩份組播的復制。

以上就是組播工作的大概過程,IPTV是IGMPv2 以及 PIM SM mode 的一個應用。

IPTV是電信獨立的IP網絡,部署起來很容易;但是如果在全球網絡里部署組播,將會遇到很多挑戰。


如果想了解IGMPv3 以及PIM SSM 請回復,會繼續更新。


想深入學習的童鞋請繼續
------------------------------------
IP multicast 組播

在組播的世界里,我們又見到了樹的概念,關於樹,你一定會有似曾相識的感覺,二層交換網絡就有樹的概念了,那個樹我們稱之為:生成樹,spanning tree,盡管這個樹中文名稱有點別扭,但它就是一棵樹。

喜愛大自然的童鞋仔細觀察一棵樹,會發現一棵樹,有根,主干,樹杈,葉子,水分通過根,源源不斷地輸送到主干,樹杈,然后到達葉子。水分在從根擴散到葉子的過程中,一直是單向的,沒有水倒流的現象,即使水有倒流,也不會有環路,因為樹的結構是發散的,沒有物理的樹杈的交織,自然不會發生環路。

網絡科學家發現了這個規律,有一個大膽設想,如果把樹的拓撲結構用於二層交換網絡,在二層網絡里選擇一個根(root bridge),其它交換機當作樹的樹杈,每個樹杈自然有一個根末梢(root port),這個就是交換機的上游接口,除了根末梢,其它的接口都是下游接口,至於下游接口是暢通的、還是阻斷的,取決於到根的路徑成本,誰更接近根,誰就暢通(Forwarding) ,即常說的Designated Port; 誰遠離根,誰就需要被阻斷(Blocked), 即常說的 Non Designated Port。通過這種仿生的機制,可以有效地避免網絡環路。

今天我們主題並不是spanning tree,而是組播樹。至於為什么要有樹的概念,上文已經闡述,為了避免潛在的網絡環路,那我們來談談組播樹的概念。

組播第一個挑戰就是組播的接收者(Receiver)不知道組播源在哪里,換句話說,就是不知道組播源的IP地址,如果知道了,可以直接向這個IP地址發送加入組播的請求,那一切就簡單了,組播可以直接推送到組播的接收者。這僅僅是一個美好的假設,事實是接收者無從知道組播源的IP地址。

為了克服這個困難,引入了一個中介機構(RP),Rendezvous Point,RP點,組播的匯聚點。

為了更便於闡述這個復雜的過程,假定:

Multicast Source IP: 1.1.1.1
Multicast Group IP : 238.1.1.1
Rendezvous Point IP: 2.2.2.2
IGMPv2: Host chat with Router
PIM Sparse Mode: Router chat with Router

於是組播源就把組播238.1.1.1封裝在一個單播(source IP 1.1.1.1,destination IP 2.2.2.2) 發給RP,我們稱之為組播源的單播注冊。

雖然組播的接收者不知道組播源在哪里,但他們深深地知道,他們所在的廣播域里的路由器一定知道,而路由器如果靜態配置RP,或動態發現RP,可以知道RP在哪里,可以間接的知道組播源在哪里。這就是美其名曰的:曲線救國!

於是組播接收者用IGMPv2發送一個廣播請求,這個廣播域里的路由器聽到了這個廣播請求,查詢自己的單播路由表,可以知道誰是通向RP的上游路由器,然后發送一個PIM Join請求給上游,上游路由器按照相同的方式把這種Join 請求一級一級的中繼到RP,RP簡單地將收到Join請求這個接口放入組播出接口列表(OIL),然后把組播僅僅復制(Replication)一份從OIL發送出去。PIM Join 在層層向上中繼的過程,路由器已經形成一個上下游的關系,越是靠近RP的路由器,為上游;而遠離RP的路由器,為下游。這其實就是一種樹,因為樹的根是RP,我們稱這種組播樹為基於RP的樹,即RP-Based Tree,簡稱RPT。

當組播接收者直連的路由器收到第一個組播,就知道組播源在哪里?為什么?因為組播包里的源IP告訴我們的啊!於是向組播源IP發起了一個新的PIM Join請求,為什么要這樣啊?是不是畫蛇添足啊?好,我們來分析一下:

組播先從組播源發到RP,然后再從RP順着RPT樹一級一級向下游擴散,直到到達組播的接收者,這條路徑有點繞,因為先要繞到RP,所以不是最優路徑。既然RP的存在是為了組播的接收者發現組播源,那一旦這個任務完成了,也就沒有必要再走這條有點繞路的路徑了,為什么不直接走組播源到達組播接收者的路徑呢?省時、省力、省路徑!於是組播接收者的直連路由器向着組播源1.1.1.1的方向,如何知道?查詢單播路由表啊,然后順着朝向1.1.1.1 的方向發送 Join 請求,也是一級級向着上游發請求,直到到達組播源1.1.1.1,這個有上下游關系也是組播樹,因為樹的根是組播源,我們稱之為:基於源的樹,Source Path Tree,簡稱SPT。

即然加入了SPT樹,收到了組播數據,就沒有必要賴在RPT樹上,否則將會收到兩份復制,這實在沒有必要。於是組播接收者直連的路由器向RP提出leave 請求,RP將收到 leave 請求的這個接口從OIL列表里刪掉,即不會再復制組播數據了。

忘了一個細節,RP在接收到組播源的單播注冊,會發一個單播停止消息給組播源,即 Register Stop 消息,既然RP已經知道組播源在哪里了,繼續單播注冊就沒有必要了。同時RP也會朝着組播源1.1.1.1 的方向發送Join請求,請求加入SPT樹。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM