目 錄
IGMP是Internet Group Management Protocol(互聯網組管理協議)的簡稱。它是TCP/IP協議族中負責IP組播成員管理的協議,用來在IP主機和與其直接相鄰的組播路由器之間建立、維護組播組成員關係。
到目前為止,IGMP有三個版本:
l IGMPv1(由RFC 1112定義)
l IGMPv2(由RFC 2236定義)
l IGMPv3(由RFC 3376定義)
所有版本的IGMP都支持ASM(Any-Source Multicast,任意信源組播)模型;IGMPv3可以直接應用於SSM(Source-Specific Multicast,指定信源組播)模型,而IGMPv1和IGMPv2則需要在IGMP SSM Mapping技術的支持下才能應用於SSM模型。
IGMPv1主要基於查詢和響應機製來完成對組播組成員的管理。
當一個網段內有多台組播路由器時,由於它們都能從主機那裏收到IGMP成員關係報告報文(Membership Report Message),因此隻需要其中一台路由器發送IGMP查詢報文(Query Message)就足夠了。這就需要有一個查詢器(Querier)的選舉機製來確定由哪台路由器作為IGMP查詢器。
對於IGMPv1來說,由組播路由協議(如PIM)選舉出唯一的組播信息轉發者DR(Designated Router,指定路由器)作為IGMP查詢器。
圖1 IGMP查詢響應示意圖
如圖1所示,假設Host B與Host C想要收到發往組播組G1的組播數據,而Host A想要收到發往組播組G2的組播數據,那麼主機加入組播組以及IGMP查詢器(Router B)維護組播組成員關係的基本過程如下:
(1) 主機會主動向其要加入的組播組發送IGMP成員關係報告報文以聲明加入,而不必等待IGMP查詢器發來的IGMP查詢報文;
(2) IGMP查詢器周期性地以組播方式向本地網段內的所有主機與路由器發送IGMP查詢報文(目的地址為224.0.0.1);
(3) 在收到該查詢報文後,關注G1的Host B與Host C其中之一(這取決於誰的延遲定時器先超時)——譬如Host B會首先以組播方式向G1發送IGMP成員關係報告報文,以宣告其屬於G1。由於本地網段中的所有主機和路由器都能收到Host B發往G1的報告報文,因此當Host C收到該報告報文後,將不再發送同樣針對G1的報告報文,因為IGMP路由器(Router A和Router B)已知道本地網段中有對G1感興趣的主機了。這個機製稱為主機上的IGMP成員關係報告抑製機製,該機製有助於減少本地網段的信息流量;
(4) 與此同時,由於Host A關注的是G2,所以它仍將以組播方式向G2發送報告報文,以宣告其屬於G2;
(5) 經過以上的查詢和響應過程,IGMP路由器了解到本地網段中有G1和G2的成員,於是由組播路由協議(如PIM)生成(*,G1)和(*,G2)組播轉發項作為組播數據的轉發依據,其中的“*”代表任意組播源;
(6) 當由組播源發往G1或G2的組播數據經過組播路由到達IGMP路由器時,由於IGMP路由器上存在(*,G1)和(*,G2)組播轉發項,於是將該組播數據轉發到本地網段,接收者主機便能收到該組播數據了。
IGMPv1沒有專門定義離開組播組的報文。當運行IGMPv1的主機離開某組播組時,將不會向其要離開的組播組發送報告報文。當網段中不再存在該組播組的成員後,IGMP路由器將收不到任何發往該組播組的報告報文,於是IGMP路由器在一段時間之後便刪除該組播組所對應的組播轉發項。
與IGMPv1相比,IGMPv2增加了查詢器選舉機製和離開組機製。
在IGMPv1中,當某共享網段上存在多個組播路由器時,由組播路由協議(如PIM)選舉的指定路由器充當查詢器。
在IGMPv2中,增加了獨立的查詢器選舉機製,其選舉過程如下:
(1) 所有IGMPv2路由器在初始時都認為自己是查詢器,並向本地網段內的所有主機和路由器發送IGMP普遍組查詢(General Query)報文(目的地址為224.0.0.1);
(2) 本地網段中的其它IGMPv2路由器在收到該報文後,將報文的源IP地址與自己的接口地址作比較。通過比較,IP地址最小的路由器將成為查詢器,其它路由器成為非查詢器(Non-Querier);
(3) 所有非查詢器上都會啟動一個定時器(即其它查詢器存在時間定時器Other Querier Present Timer)。在該定時器超時前,如果收到了來自查詢器的IGMP查詢報文,則重置該定時器;否則,就認為原查詢器失效,並發起新的查詢器選舉過程。
在IGMPv1中,主機離開組播組時不會向組播路由器發出任何通知,導致組播路由器隻能依靠組播組成員查詢的響應超時來獲知組播組成員的離開。
而在IGMPv2中,當一個主機離開某組播組時:
(1) 該主機向本地網段內的所有組播路由器(目的地址為224.0.0.2)發送離開組(Leave Group)報文;
(2) 當查詢器收到該報文後,向該主機所聲明要離開的那個組播組發送特定組查詢(Group-Specific Query)報文(目的地址字段和組地址字段均填充為所要查詢的組播組地址);
(3) 如果該網段內還有該組播組的其它成員,則這些成員在收到特定組查詢報文後,會在該報文中所設定的最大響應時間(Max Response Time)內發送成員關係報告報文;
(4) 如果在最大響應時間內收到了該組播組其它成員發送的成員關係報告報文,查詢器就會繼續維護該組播組的成員關係;否則,查詢器將認為該網段內已無該組播組的成員,於是不再維護這個組播組的成員關係。
IGMPv3在兼容和繼承IGMPv1和IGMPv2的基礎上,進一步增強了主機的控製能力,並增強了查詢和報告報文的功能。
IGMPv3增加了針對組播源的過濾模式(INCLUDE/EXCLUDE),使主機在加入某組播組G的同時,能夠明確要求接收或拒絕來自某特定組播源S的組播信息。當主機加入組播組時:
l 若要求隻接收來自指定組播源如S1、S2、……的組播信息,則其報告報文中可以標記為INCLUDE Sources(S1,S2,……);
l 若拒絕接收來自指定組播源如S1、S2、……的組播信息,則其報告報文中可以標記為EXCLUDE Sources(S1,S2,……)。
如圖2所示,網絡中存在Source 1(S1)和Source 2(S2)兩個組播源,均向組播組G發送組播報文。Host B僅對從Source 1發往G的信息感興趣,而對來自Source 2的信息沒有興趣。
如果主機與路由器之間運行的是IGMPv1或IGMPv2,Host B加入組播組G時無法對組播源進行選擇,因此無論Host B是否需要,來自Source 1和Source 2的組播信息都將傳遞給Host B。
當主機與路由器之間運行了IGMPv3之後,Host B就可以要求隻接收來自Source 1、發往G的組播信息(S1,G),或要求拒絕來自Source 2、發往G的組播信息(S2,G),這樣就隻有來自Source 1的組播信息才能傳遞給Host B了。
(1) 攜帶源地址的查詢報文
IGMPv3不僅支持IGMPv1的普遍組查詢和IGMPv2的特定組查詢,而且還增加了對特定源組查詢的支持:
l 普遍組查詢報文中,既不攜帶組地址,也不攜帶源地址;
l 特定組查詢報文中,攜帶組地址,但不攜帶源地址;
l 特定源組查詢報文中,既攜帶組地址,還攜帶一個或多個源地址。
(2) 包含多組記錄的報告報文
IGMPv3報告報文的目的地址為224.0.0.22,可以攜帶一個或多個組記錄。在每個組記錄中,包含有組播組地址和組播源地址列表。組記錄可以分為多種類型,如下:
l IS_IN:表示組播組與組播源列表之間的過濾模式為INCLUDE,即隻接收從指定組播源列表發往該組播組的組播數據。
l IS_EX:表示組播組與組播源列表之間的過濾模式為EXCLUDE,即隻接收從指定組播源列表之外的組播源發往該組播組的組播數據。
l TO_IN:表示組播組與組播源列表之間的過濾模式由EXCLUDE轉變為INCLUDE。
l TO_EX:表示組播組與組播源列表之間的過濾模式由INCLUDE轉變為EXCLUDE。
l ALLOW:表示在現有狀態的基礎上,還希望從某些組播源接收組播數據。如果當前的對應關係為INCLUDE,則向現有組播源列表中添加這些組播源;如果當前的對應關係為EXCLUDE,則從現有組播源列表中刪除這些組播源。
l BLOCK:表示在現有狀態的基礎上,不再希望從某些組播源接收組播數據。如果當前的對應關係為INCLUDE,則從現有組播源列表中刪除這些組播源;如果當前的對應關係為EXCLUDE,則向現有組播源列表中添加這些組播源。
IGMP SSM Mapping通過在路由器上配置SSM靜態映射規則,從而為運行IGMPv1或IGMPv2的接收者主機提供對SSM模型的支持。
SSM模型要求在接收者主機所在的網段,路由器能夠了解主機加入組播組時所指定的組播源。如果接收者主機上運行的是IGMPv3,則可以在IGMPv3的報告報文中直接指定組播源的地址;如果某些接收者主機隻能運行IGMPv1或IGMPv2,則在IGMPv1或IGMPv2的報告報文中無法指定組播源的地址。這種情況下需要通過在路由器上配置IGMP SSM Mapping功能,將IGMPv1或IGMPv2報告報文中所包含的(*,G)信息映射為(G,INCLUDE,(S1,S2...))信息。
在如圖3所示的SSM網絡中,Host A、Host B和Host C上分別運行IGMPv1、IGMPv2和IGMPv3。在不允許將Host A和Host B升級為IGMPv3的情況下,若要為Host A和Host B也提供SSM組播服務,則需在Router A上使能IGMP SSM Mapping並配置相應的映射規則。
配置完成後,當Router A收到來自主機的IGMPv1或IGMPv2報告報文時,首先檢查該報文中所攜帶的組播組地址G,然後根據檢查結果的不同分別進行處理:
(1) 如果G不在SSM組地址範圍內,則提供ASM組播服務。
(2) 如果G在SSM組地址範圍內:
l 若Router A上沒有G對應的IGMP SSM Mapping規則,則無法提供SSM組播服務,丟棄該報文;
l 若Router A上有G對應的IGMP SSM Mapping規則,則依據規則將報告報文中所包含的(*,G)信息映射為(G,INCLUDE,(S1,S2...))信息,可以提供SSM組播服務。
& 說明:
IGMP SSM Mapping不對IGMPv3的報告報文進行處理。
在一些簡單的樹型網絡拓撲中,邊緣設備上並不需要運行複雜的組播路由協議(如PIM),可以通過在這些設備上配置IGMP Proxying(IGMP代理)功能,使其代理下遊主機來發送IGMP報文及維護組成員關係,並基於該關係進行組播轉發。在上遊設備看來,配置了IGMP Proxying功能的設備(稱為IGMP代理設備)不再是一個PIM鄰居,而隻是一台主機。
如圖4所示,IGMP Proxying中定義了以下兩種接口類型:
l 上行接口:又稱代理接口,指IGMP代理設備上運行IGMP Proxying功能的接口,即朝向組播分發樹樹根方向的接口。由於該接口執行IGMP協議的主機行為,因此也稱為主機接口(Host Interface)。
l 下行接口:指IGMP代理設備上除上行接口外其它運行IGMP協議的接口,即背向組播分發樹樹根方向的接口。由於該接口執行IGMP協議的路由器行為,因此也稱為路由器接口(Router Interface)。
IGMP代理設備上維護著一個組成員關係數據庫(Membership Database),將所有下行接口維護的組成員關係記錄都存到這個數據庫中。組成員關係記錄的結構如下:(Multicast-address,Filter-mode,Source-list),每條記錄都是各下行接口上具有相同組地址的成員關係記錄的合集。
上行接口正是依據這個數據庫來執行主機行為——當收到查詢報文時根據當前數據庫狀態響應報告報文,或者當數據庫變化時主動發送報告或離開報文;而下行接口則執行路由器行為——參與查詢器的選舉、發送查詢報文並根據報告報文維護組成員關係等。
IGMP依據接口來維護組成員關係,VPN實例的IGMP根據接口所屬的實例來處理協議報文的收發。當路由器收到IGMP報文時,需要區分該報文所屬的實例,並在該實例範圍內對其進行處理。當某VPN實例的IGMP需要和其它組播協議交互信息時,隻會通知本VPN實例內的其它組播協議。