一、IGMP 簡介
IGMP(Internet Group Management Protocol)互聯(lián)網(wǎng)組管理協(xié)議是TCP/IP 協(xié)議族中負責IP組播成員管理的協(xié)議,用來在IP主機和與其直接相鄰的組播路由器之間建立、維護組播組成員關(guān)系。
到目前為止,IGMP 有三個版本:
· IGMPv1(由RFC 1112 定義)
· IGMPv2(由RFC 2236 定義)
· IGMPv3(由RFC 3376 定義)
所有版本的IGMP 都支持ASM(Any-Source Multicast,任意信源組播)模型;IGMPv3 可以直接應用于SSM(Source-Specific Multicast,指定信源組播)模型,而IGMPv1 和IGMPv2 則需要在IGMP SSM Mapping 技術(shù)的支持下才能應用于SSM 模型。
注:本文章內(nèi)容源于作者“三二一、小魚”相關(guān)研究、學習內(nèi)容所做筆記,版權(quán)歸原作者所有,轉(zhuǎn)載請保留此字段。
原地址:https://blog.csdn.net/paul123456789io/article/details/53607745
1. IGMPv1 工作機制
IGMPv1 主要基于查詢和響應機制來完成對組播組成員的管理。當一個網(wǎng)段內(nèi)有多臺組播路由器時,由于它們都能從主機那里收到IGMP 成員關(guān)系報告報文(Membership Report Message)。
因此,只需其中一臺路由器發(fā)送IGMP 查詢報文(Query Message)就足夠了。這時就需要有一個查詢器(Querier)的選舉機制來確定由哪臺路由器作為IGMP查詢器。
對于IGMPv1 來說,由組播路由協(xié)議(如PIM)選舉出唯一的組播信息轉(zhuǎn)發(fā)者DR(Designated Router,指定路由器)作為IGMP 查詢器。
IGMP 查詢相應示意圖
如上圖所示,假設(shè)Host B與Host C想要收到發(fā)往組播組G1 的組播數(shù)據(jù),而Host A想要收到發(fā)往組播組G2 的組播數(shù)據(jù),那么主機加入組播組以及IGMP查詢器(Router B)維護組播組成員關(guān)系的基本過程如下:
1)主機將主動發(fā)送IGMP 成員關(guān)系報告報文到其要加入的組播組,以聲明加入,而不必等待IGMP查詢器發(fā)來的IGMP 查詢報文;
2)IGMP 查詢器周期性地以組播方式,向本地網(wǎng)段內(nèi)的所有主機與路由器發(fā)送IGMP 查詢報文(目的地址為224.0.0.1);
3)在收到該查詢報文后,關(guān)注G1 的Host B 與Host C 其中之一(這取決于誰的延遲定時器先超時),譬如Host B 會首先以組播方式向G1 發(fā)送IGMP 成員關(guān)系報告報文,以宣告其屬于G1。
由于本地網(wǎng)段中的所有主機和路由器都能收到Host B 發(fā)往G1 的報告報文,因此當Host C 收到該報告報文后,將不再發(fā)送同樣針對G1的報告報文,因為IGMP 路由器(Router A和Router B)已知道本地網(wǎng)段中有對G1 感興趣的主機了。
這個機制稱為主機上的IGMP 成員關(guān)系報告抑制機制,該機制有助于減少本地網(wǎng)段的信息流量;
4)與此同時,由于Host A 關(guān)注的是G2,所以它仍將以組播方式向G2 發(fā)送報告報文,以宣告其屬于G2;
5)經(jīng)過以上的查詢和響應過程,IGMP 路由器了解到本地網(wǎng)段中有G1 和G2 的成員,于是由組播路由協(xié)議(如PIM)生成(*,G1)和(*,G2)組播轉(zhuǎn)發(fā)項作為組播數(shù)據(jù)的轉(zhuǎn)發(fā)依據(jù),其中的“*”代表任意組播源;
6)當由組播源發(fā)往G1 或G2 的組播數(shù)據(jù)經(jīng)過組播路由到達IGMP 路由器時,由于IGMP 路由器上存在(*,G1)和(*,G2)組播轉(zhuǎn)發(fā)項,于是將該組播數(shù)據(jù)轉(zhuǎn)發(fā)到本地網(wǎng)段,接收者主機便能收到該組播數(shù)據(jù)了。
IGMPv1 沒有專門定義離開組播組的報文。當運行IGMPv1 的主機離開某組播組時,將不會向其要離開的組播組發(fā)送報告報文。當網(wǎng)段中不再存在該組播組的成員后,IGMP 路由器將收不到任何發(fā)往該組播組的報告報文,于是IGMP 路由器在一段時間之后便刪除該組播組所對應的組播轉(zhuǎn)發(fā)項。
2. IGMPv2 的改進
與IGMPv1 相比,IGMPv2 增加了查詢器選舉機制和離開組機制。
? 查詢器選舉機制
在IGMPv1 中,當某共享網(wǎng)段上存在多個組播路由器時,由組播路由協(xié)議(如PIM)選舉的指定路由器充當查詢器。
在IGMPv2 中,增加了獨立的查詢器選舉機制,其選舉過程如下:
1)所有IGMPv2 路由器在初始時都認為自己是查詢器,并向本地網(wǎng)段內(nèi)的所有主機和路由器發(fā)送IGMP 普遍組查詢(General Query)報文(目的地址為224.0.0.1);
2)本地網(wǎng)段中的其它IGMPv2 路由器在收到該報文后,將報文的源IP地址與自己的接口地址作比較。通過比較, IP 地址最小的路由器將成為查詢器, 其它路由器成為非查詢器(Non-Querier);
3)所有非查詢器上都會啟動一個定時器(即其它查詢器存在時間定時器Other Querier Present Timer)。在該定時器超時前,如果收到了來自查詢器的IGMP 查詢報文,則重置該定時器;否則,就認為原查詢器失效,并發(fā)起新的查詢器選舉過程。
? 離開組機制
在IGMPv1 中,主機離開組播組時不會向組播路由器發(fā)出任何通知,導致組播路由器只能依靠組播組成員查詢的響應超時來獲知組播組成員的離開。
而在IGMPv2 中,當一個主機離開某組播組時:
1)該主機向本地網(wǎng)段內(nèi)的所有組播路由器(目的地址為224.0.0.2)發(fā)送離開組(Leave Group)報文;
2)當查詢器收到該報文后, 向該主機所聲明要離開的那個組播組發(fā)送特定組查詢(Group-Specific Query)報文(目的地址字段和組地址字段均填充為所要查詢的組播組地址);
3)如果該網(wǎng)段內(nèi)還有該組播組的其它成員,則這些成員在收到特定組查詢報文后,會在該報文中所設(shè)定的最大響應時間(Max Response Time)內(nèi)發(fā)送成員關(guān)系報告報文;
4)如果在最大響應時間內(nèi)收到了該組播組其它成員發(fā)送的成員關(guān)系報告報文,查詢器就會繼續(xù)維護該組播組的成員關(guān)系;否則,查詢器將認為該網(wǎng)段內(nèi)已無該組播組的成員,于是不再維護這個組播組的成員關(guān)系。
3. IGMPv3 的改進
IGMPv3 在兼容和繼承IGMPv1 和IGMPv2 的基礎(chǔ)上,進一步增強了主機的控制能力,并增強了查詢和報告報文的功能。
? 主機控制能力的增強
IGMPv3 增加了針對組播源的過濾模式(INCLUDE/EXCLUDE),使主機在加入某組播組G的同時,能夠明確要求接收或拒絕來自某特定組播源S的組播信息。當主機加入組播組時:
若要求只接收來自指定組播源如S1、S2、……的組播信息,則其報告報文中可以標記為INCLUDE Sources(S1,S2,……);
若拒絕接收來自指定組播源如S1、S2、……的組播信息,則其報告報文中可以標記為EXCLUDE Sources(S1,S2,……)。
指定源組的組播流路經(jīng)
如上圖所示,網(wǎng)絡(luò)中存在Source 1(S1)和Source 2(S2)兩個組播源,均向組播組G發(fā)送組播報文。Host B僅對從Source1 發(fā)往G的信息感興趣,而對來自Source 2 的信息沒有興趣。
如果主機與路由器之間運行的是IGMPv1 或IGMPv2,Host B 加入組播組G 時無法對組播源進行選擇,因此無論Host B 是否需要,來自Source 1 和Source 2 的組播信息都將傳遞給Host B。
當主機與路由器之間運行了IGMPv3 之后,Host B 就可以要求只接收來自Source 1、發(fā)往G 的組播信息(S1,G),或要求拒絕來自Source 2、發(fā)往G 的組播信息(S2,G),這樣就只有來自Source 1 的組播信息才能傳遞給Host B 了。
? 查詢和報告報文功能的增強
(1) 攜帶源地址的查詢報文
IGMPv3 不僅支持IGMPv1 的普遍組查詢和IGMPv2 的特定組查詢,而且還增加了對特定源組查詢的支持:
? 普遍組查詢報文中,既不攜帶組地址,也不攜帶源地址;
? 特定組查詢報文中,攜帶組地址,但不攜帶源地址;
? 特定源組查詢報文中,既攜帶組地址,還攜帶一個或多個源地址。
(2) 包含多組記錄的報告報文
IGMPv3 報告報文的目的地址為224.0.0.22,可以攜帶一個或多個組記錄。在每個組記錄中,包含有組播組地址和組播源地址列表。組記錄可以分為多種類型,如下:
? IS_IN:表示組播組與組播源列表之間的過濾模式為INCLUDE,即只接收從指定組播源列表發(fā)往該組播組的組播數(shù)據(jù)。
? IS_EX:表示組播組與組播源列表之間的過濾模式為EXCLUDE,即只接收從指定組播源列表之外的組播源發(fā)往該組播組的組播數(shù)據(jù)。
? TO_IN:表示組播組與組播源列表之間的過濾模式由EXCLUDE 轉(zhuǎn)變?yōu)镮NCLUDE。
? TO_EX:表示組播組與組播源列表之間的過濾模式由INCLUDE 轉(zhuǎn)變?yōu)镋XCLUDE。
? ALLOW:表示在現(xiàn)有狀態(tài)的基礎(chǔ)上,還希望從某些組播源接收組播數(shù)據(jù)。如果當前的對應關(guān)系為INCLUDE,則向現(xiàn)有組播源列表中添加這些組播源;如果當前的對應關(guān)系為EXCLUDE,則從現(xiàn)有組播源列表中刪除這些組播源。
? BLOCK:表示在現(xiàn)有狀態(tài)的基礎(chǔ)上,不再希望從某些組播源接收組播數(shù)據(jù)。如果當前的對應關(guān)系為INCLUDE,則從現(xiàn)有組播源列表中刪除這些組播源;如果當前的對應關(guān)系為EXCLUDE,則向現(xiàn)有組播源列表中添加這些組播源。
4. 組播模型分類
根據(jù)接收者對組播源處理方式的不同,組播模型分為以下三類:
? ASM 模型:Any-Source Multicast,任意信源組播
在ASM 模型中,任意一個發(fā)送者都可以作為組播源向某組播組地址發(fā)送信息。眾多接收者通過加入由該組播組地址標識的組播組以獲得發(fā)往該組播組的組播信息。
在ASM 模型中,接收者無法預先知道組播源的位置,但可以在任意時間加入或離開該組播組。
? SFM 模型:Source-Filtered Multicast,信源過濾組播
該模型繼承了ASM 模型,從發(fā)送者角度來看,兩者的組播組成員關(guān)系完全相同。SFM 模型在功能上對ASM 模型進行了擴展。
在SFM 模型中,上層軟件對收到的組播報文的源地址進行檢查,允許或禁止來自某些組播源的報文通過。
因此,接收者只能收到來自部分組播源的組播數(shù)據(jù)。從接收者的角度來看,只有部分組播源是有效的,組播源被經(jīng)過了篩選。
? SSM 模型:Source-Specific Multicast,指定信源組播
在現(xiàn)實生活中,用戶可能只對某些組播源發(fā)送的組播信息感興趣,而不愿接收其它源發(fā)送的信息。該模型為用戶提供了一種能夠在客戶端指定組播源的傳輸服務(wù)。
SSM 模型與ASM 模型的根本區(qū)別在于:SSM 模型中的接收者已經(jīng)通過其它手段預先知道了組播源的具體位置。SSM 模型使用與ASM/SFM 模型不同的組播地址范圍,直接在接收者與其指定的組播源之間建立專用的組播轉(zhuǎn)發(fā)路徑。
5. IP組播
?對于IP 組播,需要關(guān)注下列問題:
· 組播源將組播信息傳輸?shù)侥睦??即組播尋址機制;
· 網(wǎng)絡(luò)中有哪些接收者?即主機注冊;
· 這些接收者需要從哪個組播源接收信息?即組播源發(fā)現(xiàn);
· 組播信息如何傳輸?即組播路由。
?IP 組播屬于端到端的服務(wù),組播機制包括以下四個部分:
· 尋址機制:借助組播地址,實現(xiàn)信息從組播源發(fā)送到一組接收者;
· 主機注冊:允許接收者主機動態(tài)加入和離開某組播組,實現(xiàn)對組播成員的管理;
· 組播路由:構(gòu)建組播報文分發(fā)樹(即組播數(shù)據(jù)在網(wǎng)絡(luò)中的樹型轉(zhuǎn)發(fā)路徑),并通過該分發(fā)樹將報文從組播源傳輸?shù)浇邮照撸?/p>
· 組播應用:組播源與接收者必須安裝支持視頻會議等組播應用的軟件,TCP/IP 協(xié)議棧必須支持組播信息的發(fā)送和接收。
為了讓組播源和組播組成員進行通信,需要提供網(wǎng)絡(luò)層組播地址,即IP 組播地址。同時必須存在一種技術(shù)將IP 組播地址映射為鏈路層的組播MAC 地址。
? IP 組播地址
· IANA(Internet Assigned Numbers Authority,互聯(lián)網(wǎng)編號分配委員會)將D類地址空間分配給IPv4組播使用,范圍從224.0.0.0到239.255.255.255,具體分類及其含義如下表所示。
IPv4 組播地址的范圍及含義
說明:
· 組播組中的成員是動態(tài)的,主機可以在任何時刻加入或離開組播組。
· GLOP 是一種AS(Autonomous System,自治系統(tǒng))之間的組播地址分配機制,將AS 號填入該范圍內(nèi)組播地址的中間兩個字節(jié)中,每個AS 都可以得到255 個組播地址。有關(guān)GLOP 的詳細介紹請參見RFC 2770。
? 以太網(wǎng)組播MAC 地址
· 以太網(wǎng)傳輸單播IP 報文的時候,目的MAC 地址使用的是接收者的MAC 地址。但是在傳輸組播數(shù)據(jù)包時,其目的地不再是一個具體的接收者,而是一個成員不確定的組,所以要使用組播MAC 地址。
· IANA規(guī)定,IPv4 組播MAC地址的高24 位為0x01005E,第25 位為0,低23 位為IPv4 組播地址的低23 位。IPv4 組播地址與MAC地址的映射關(guān)系如下圖所示。
IPv4 組播地址與MAC 地址的映射關(guān)系
· 由于IPv4 組播地址的高4 位是1110,代表組播標識,而低28 位中只有23 位被映射到IPv4 組播MAC 地址,這樣IPv4 組播地址中就有5 位信息丟失。
于是,就有32 個IPv4 組播地址映射到了同一個IPv4 組播MAC 地址上,因此在二層處理過程中,設(shè)備可能要接收一些本IPv4 組播組以外的組播數(shù)據(jù),而這些多余的組播數(shù)據(jù)就需要設(shè)備的上層進行過濾了。
6. 組播協(xié)議
通常,我們把工作在網(wǎng)絡(luò)層的IP 組播稱為“三層組播”,相應的組播協(xié)議稱為“三層組播協(xié)議”,包括IGMP、PIM、MSDP、MBGP等;把工作在數(shù)據(jù)鏈路層的IP 組播稱為“二層組播”,相應的組播協(xié)議稱為“二層組播協(xié)議”,包括IGMP Snooping、組播VLAN 等。
· 三層組播協(xié)議
三層組播協(xié)議包括組播組管理協(xié)議和組播路由協(xié)議兩種類型,它們在網(wǎng)絡(luò)中的應用位置如下圖。
三層組播協(xié)議的應用位置
1) 組播組管理協(xié)議
在主機和與其直接相連的三層組播設(shè)備之間通常采用組播組的管理協(xié)議IGMP,該協(xié)議規(guī)定了主機與三層組播設(shè)備之間建立和維護組播組成員關(guān)系的機制。
2) 組播路由協(xié)議
組播路由協(xié)議運行在三層組播設(shè)備之間,用于建立和維護組播路由,并正確、高效地轉(zhuǎn)發(fā)組播數(shù)據(jù)包。
組播路由建立了從一個數(shù)據(jù)源端到多個接收端的無環(huán)(loop-free)數(shù)據(jù)傳輸路徑,即組播分發(fā)樹。
對于ASM 模型,可以將組播路由分為域內(nèi)和域間兩大類:
· 域內(nèi)組播路由用來在AS 內(nèi)部發(fā)現(xiàn)組播源并構(gòu)建組播分發(fā)樹,從而將組播信息傳遞到接收者。在眾多域內(nèi)組播路由協(xié)議中,PIM(Protocol Independent Multicast,協(xié)議無關(guān)組播)是目前較為典型的一個。
按照轉(zhuǎn)發(fā)機制的不同,PIM 可以分為DM(Dense Mode,密集模式)和SM(Sparse Mode,稀疏模式)兩種模式。
· 域間組播路由用來實現(xiàn)組播信息在AS 之間的傳遞,目前比較成型的解決方案有:MSDP(Multicast Source Discovery Protocol,組播源發(fā)現(xiàn)協(xié)議)能夠跨越AS 傳播組播源的信息;而MP-BGP(MultiProtocol Border Gateway Protocol,多協(xié)議邊界網(wǎng)關(guān)協(xié)議)的組播擴展MBGP(Multicast BGP)則能夠跨越AS 傳播組播路由。
對于SSM 模型,沒有域內(nèi)和域間的劃分。由于接收者預先知道組播源的具體位置,因此只需要借助PIM-SM 構(gòu)建的通道即可實現(xiàn)組播信息的傳輸。
· 二層組播協(xié)議
二層組播協(xié)議包括IGMP Snooping和組播VLAN等,它們在網(wǎng)絡(luò)中的應用位置如下圖。
二層組播協(xié)議的應用位置
1) IGMP Snooping
IGMP Snooping(Internet Group Management Protocol Snooping,互聯(lián)網(wǎng)組管理協(xié)議窺探)是運行在二層設(shè)備上的組播約束機制,通過窺探和分析主機與三層組播設(shè)備之間交互的IGMP 報文來管理和控制組播組,從而可以有效抑制組播數(shù)據(jù)在二層網(wǎng)絡(luò)中的擴散。
2) 組播VLAN
在傳統(tǒng)的組播點播方式下,當連接在二層設(shè)備上、屬于不同VLAN 的用戶分別進行組播點播時,三層組播設(shè)備需要向該二層設(shè)備的每個VLAN 分別發(fā)送一份組播數(shù)據(jù);而當二層設(shè)備運行了組播VLAN。
聯(lián)系客服