簡述:
組播組管理協議運行在主機與相連的三層組播設備之間
常用的組播組管理協議為IGMP,用於處理主機與三層組播設備間的關系
組播管理協議簡介:
IGMPv1:在RFC1112中定義了基本的查詢和成員報告過程
IGMPv2:在RFC2236中對比v1添加了組成員快速離開機制和查詢器選舉機制
IGMPv3:在RFC3376中對比v2版本添加了指定組播源功能,並取消了成員報告抑制機制
所有IGMP協議都支持ASM模型,而IGMPv3支持SSM模型
IGMPv1
一、主機加入維護與離開(組播組表項的建立)
1、組播路由器周期性發送 普遍組查詢報文(General Query) 來知曉網段上是否有組播的接收者(默認周期為60秒)
2、主機收到General Query后,如果想要加入這個組播組,就會回應 成員報告報文(Report)
3、當路由器發送三次 General Query 報文后沒有主機響應這個報文,則路由器不再向該網段轉發組播報文(v1主機都是靜悄悄的走)
IGMPv1協議主要基於查詢和響應機制完成組播組管理,IGMPv1中,由路由器協議PIM選舉出唯一的組播信息轉發者(Assert Winner 或DR)
查詢器只負責網段的組成員關系查詢,IGMP沒有離開信息(Leave Messages),路由器使用基於超時的機制去發現其他成員不關注的組
IGMPv1支持host membership query 和 host membership report 報文
IGMPv2
相比v1增加了快速離開機制與獨立查詢器選舉機制(v1版本查詢器通過組播路由協議,將選舉好的DR來充當查詢器)
一、選舉
1、初期,所有運行IGMPv2的路由器都認為自己是查詢器,並向網段內的所有主機和路由器發送IGMP General Query,目的地址為224.0.0.1
2、網段內的其他路由器收到該報文后,會進行比對,將報文源IP地址與自己的接口地址進行比較,IP地址小的路由器將會成為本網段的查詢器,其他路由器會成為非查詢器(Non-Querier)
3、所有非查詢器都會啟動一個定時器,在定時器超時之前,如果收到了來自查詢器的IGMP查詢報文,則會重置該定時器,否則會重新發起查詢器選舉
最大響應時間(Max Resp Time),字段僅在Membership Query報文中使用,該字段規定了主機在發送一個Membership Report報文時最大的延時時間,單位為0.1秒,默認為100(即為10秒)
Membership Report報文和Leave Group報文中,會由主機設置為0
二、加入
1、IGMP查詢器會周期性以組播方式向本地網段內的所有主機發送IGMP General Query 報文,目的地址:224.0.0.1,TTL值為1
2、主機在收到此報文后,如果想要加入,則會等待一段時間(成員報告抑制機制),對General Query報文進行響應,發送Membership Report報文
等待的時間為[0,Max Reps Time]之間的一個隨機值,Max Reps Time 為最大響應延時,由路由器在General Query報文中發布(這是成員報告抑制機制的內容)
3、假設某台主機延時較低,提前發送了回應報文Membership Report報文,其他主機收到這個報文后,會進行比對,如果請求屬於同一個組播組,那么其他主機就不會發送Membership Report報文,這樣就會減少本地網段的信息流
4、路由器在收到Memberships報文后會創建組播轉發表,並添加到該表中
(*,G)表 *代表不知道組播源IP G:目的的組播地址
(S,G)表 S:組播發送源IP G:目的組播地址
三、離開
1、主機離開某個組播組時會向本地網段的所有組播路由發送Leave Group報文,目的地址:224.0.0.2,報文中包含離開主機組播的地址信息
2、IGMP查詢器在收到Leave Group報文后,會發送另一種查詢報文Group-Specific Query報文,用於確認該組播組在網段內是否還有成員存在,目的地址為要查詢的指定組播地址
3、如果網段內還有成員想要留住組播組,那么主機會在[0,Max Reps Time]時間內回復Membership Report報文,這樣路由器就不會刪除表項,繼續維護組播組,直到網段內不再有組播組成員
IGMPv3
V3版本將Membership Query分為三種:General Query,用於查詢接口下所有組播成員信息;Group-Specific Query,用於查詢接口下指定的成員信息;Group-and-Source-Specific Query,該類型為IGMPv3中新增加的,用於查詢接口下是否有成員需要接收指定源列表中的源發出的特定組的組播流
一、普遍查詢(General Query)
1、IGMPv3路由器會周期性的發送General Query報文
2、IGMPv3主機收到General Query報文后在接口設置定時器
3、定時器超時后發送Membership Report報文
主機A希望接收228.1.1.1的數據,但不希望接收2.2.2.3組播源的數據,以此主機A回復的 Membership Report 報文中的組記錄為IS_EX(2.2.2.3,228.1.1.1)
主機B希望接收組播組228.1.1.2的數據,且希望接收來自組播源2.2.2.2和2.2.2.4的數據,因此主機B回復的Membership Report報文中的組記錄為IS_IN(2.2.2.2+2.2.2.4,228.1.1.2)
主機C希望接收組播組228.1.1.1的數據,但是不希望接收來自組播源2.2.2.1的數據,因此主機C回復的Memberships Report報文中的組記錄為IS_EX(2.2.2.1,228.1.1.1)
4、路由器收到Membership Report報文后,會為組播組228.1.1.1和228.1.1.2建立表項維護狀態信息.
組播組228.1.1.1,過濾模式為EXCLUDE,排除的組播源為2.2.2.1和2.2.2.3,表示為EXCLUDE(NULL,2.2.2.1+2.2.2.3,228.1.1.1)
組播組228.1.1.2,過濾模式為INCLUDE,需要接收的組播源為2.2.2.2和2.2.2.4,表示為INCLUDE(2.2.2.2+2.2.2.4,228.1.1.2)
二、特定源組查詢(Group-and-Source-Specific Query)
1、當主機B不再希望接收到來自組播源2.2.2.2發送的組播數據時,會主動發送Membership Report報文,報文中包含的組記錄為BLOCK(2.2.2.2,228.1.1.2)
2、路由器收到組記錄為BLOCK(2.2.2.2,228.1.1.2)的Membership Report報文后,會發送Group-and-Source-Specific Query報文,詢問網段上還有沒有主機希望接收組播源2.2.2.2發送組播地址為228.1.1.2的組播數據
如果網段上仍然有主機願意接收該特定源發送的組播流,主機會回應Membership Report報文,報文中包含的組記錄為IS_IN(2.2.2.2,228.1.1.2)
如果在Max Reps Time時間內,路由器沒有收到任何對於該Group-and-Source-Specific Query報文的回應,則路由器會在組播組228.1.1.2對應的源列表中,刪除組播源2.2.2.2,此時該組播組狀態信息為INCLUDE(2.2.2.4,228.1.1.2)。組播組228.1.1.1的源列表信息保持不變。
三、特定組查詢(Group-Specific Query)
當主機不願意接收某組組播的數據時,可以發送離開組報文。IGMPv3取消了Leave報文,使用特殊的組記錄方式來表示主機離開某個組
1、主機B希望離開組播組228.1.1.2,則主機B會主動發送Membership Report報文,報文中包含的組記錄為TO_IN(NULL,228.1.1.2),表示不想接收任何組播源發送到組播組228.1.1.2的數據
2、路由器收到組記錄為TO_IN(NULL,228.1.1.2)的報文,會為組播組228.1.1.2發送一個Group-Specific Query報文,如果在Max Reps Time時間內路由器沒有收到任何關於該Group-Specific Query報文,如果在Max Reps Time 時間內路由器沒有收到任何關於該Group-Specific Query報文的回應,則路由器會刪除整個組播組228.1.1.2的表項信息
IGMPv3還可以通過一種特殊的組記錄來實現IGMPv1/v2中主機加入某組組播的功能。例如,當IGMPv3主機想要加入組播組228.1.1.1且不關心組播源時,可以發送記錄為IS_EX(NULL,228.1.1.1)的Membership Report報文,表示不排除任意源發送到組播組228.1.1.1的數據
修補:
v3版本在兼容、繼承v1 v2的基礎上,進一步增強了主機的控制能力(可以指定組播源 或 拒絕某組播源 數據)並增強了Membership Query報文和Membership Report報文的功能
增加對特定源組查詢的支持,在Group-and-Source-Specific Query報文即攜帶組地址,還攜帶一個或多個源地址
取消Leave Group報文類型,通過在Membership Report 報文中申明不再接收任何源發送給某組組播的數據,即可實現離開這個組播組的功能
Membership Report 報文的目的IP使用組播224.0.0.22,不再使用具體組播組的地址(原來是用組播組的地址)
Membership Report 報文可以攜帶多個源組信息,不同於IGMPv1/v2只能包含一個組信息,這樣可以減少大量的Membership Report 報文數量(一個報文把所有的源組信息囊括了)
取消成員報告抑制機制
詳細的IGMPv3(可看可不看,但這套流程是配合IGMPv3上面的內容,還是建議詳讀一下,以此相互印證)
IGMPv3過濾模式和源列表
IGMPv3主機為接口上每一個組播組都維護一個表項信息,格式為:(組地址,過濾模式,源列表)
一、過濾模式:
1、過濾模式包含INCLUDE和EXCLUDE兩種類型
INCLUDE模式:表示只接收來自於在源列表中列出的組播源發送的組播數據包
EXCLUDE模式:表示只接收來自於不在源列表中列出的組播源發送的組播數據包
過濾模式改變記錄:當接口維護的某個組播組的過濾模式發生變化時,主機會主動向路由器發送包含過濾模式改變記錄的Membership Report報文
2、過濾模式改變記錄包括CHANGE_TO_INCLUDE_MODE和CHANGE_TO_EXCLUDE_MODE兩類
CHANGE_TO_INCLUDE_MODE(S,G)表示對於組播組G而言,接口的過濾模式已經從EXCLUDE模式變為INCLUDE模式。該組記錄簡寫為TO_IN(S,G)
CHANGE_TO_EXCLUDE_MODE(S,G)表示對於組播組G而言,接口的過濾模式已經從INCLUDE模式改變為EXCLUDE模式。該組記錄簡寫為TO_EX(S,G)
源列表包含0個或多個IP單播地址,通常用集合形式來表示
例如:主機A希望接收來自於組播源1.1.1.1發送的目的地址為228.1.1.1的組播流,則主機A維護的組播組228.1.1.1的表項為 INCLUDE(1.1.1.1,228.1.1.1),不希望接收則是 EXCLUDE(1.1.1.1,228.1.1.1)
二、IGMPv3主機側維護的組狀態(人話:主機這邊是如何維護組狀態的)
IGMP主機還為接口上每一個組播組維護狀態信息。當收到路由器發送的 Membership Query 報文時,主機向路由器回應組播組的當前狀態,當組播組的狀態改變時主機主動向路由器發送 Membership Query 報文通知組播組的狀態發生變化
IGMPv3組播組的三種狀態:
1、當前狀態記錄:用於響應接口上收到的Membership Query報文,向路由器報告組播組的當前狀態
當前狀態包括:MODE_IS_INCLUDE 和 MODE_IS_EXCLUDE。同一時刻一個組播組只能處於一種當前狀態
MODE_IS_INCLUDE(S,G)表示接口對於組播組G的過濾模式是INCLUDE,簡寫為IS_IN(S,G)。源列表S表示對於該組播組,主機所有感興趣的組播源。
MODE_IS_EXCLUDE(S,G)表示接口對於組播組G的過濾模式是EXCLUDE,簡寫為IS_EX(S,G)。源列表S表示對於該組播組,主機所有不希望接收的組播源
2、過濾模式記錄:當接口維護的某個組播組的過濾模式發生了變化時,主機會主動向路由器發送包含過濾模式改變記錄的Membership Report報文
過濾模式改變記錄:CHANGE_TO_INCLUDE_MODE和CHANGE_TO_EXCLUDE_MODE兩類
CHANGE_TO_INCLUDE_MODE(S,G)表示對於組播組G而言,接口的過濾模式已經從EXCLUDE模式變為INCLUDE模式。該組記錄簡寫為TO_IN(S,G)
CHANGE_TO_EXCLUDE_MODE(S,G)表示對於組播組G而言,接口的過濾模式已經從INCLUDE模式變為EXCLUDE模式。該組記錄簡寫為TO_EX(S,G)
3、源列表變化記錄:當接口維護的某個組播組的源列表發生變化時,主機會主動向路由器發送包含源列表變化記錄的Membership Report報文
源列表變化記錄包括:ALLOW_NEW_SOURCES和BLOCK_OLD_SOURCES兩類
ALLOW_NEW_SOURCES(S,G)表示對於組播組G而言,主機希望接受一些新的組播源S發送的組播數據。如果當前過濾模式為INCLUDE,S將被添加到源列表中;反之,如果當前過濾模式為EXCLUDE,S將被從源列表中刪除。該組記錄簡寫為ALLOW(S,G)
BLOCK_OLD_SOURCES(S)表示對於組播組G而言,主機不再希望接收S發送的組播數據。如果當前過濾模式為INCLUDE,則S被從源列表中刪除;反之,如果當前過濾模式為EXCLUDE,則S將被添加到源列表中。該組記錄簡寫為BLOCK(S,G)
如果源列表發生了兩種變化,一種是允許了新的組播源,另一種是阻塞舊的組播源,則主機需要為同一個組播地址發送兩個組記錄,一個是ALLOW(S1,G),另一個是BLOCK(S2,G)
三、IGMPv3路由側維護的組狀態(人話:路由這邊是如何維護組狀態的)
1、IGMPv3路由器側也為接口上的每一個組播組維護狀態信息,和IGMPv3主機側相比,路由器還為每一個組播組以及源列表中的每一個組播源維護狀態定時器
2、路由器維護的狀態格式為(組地址,組定時器,過濾模式,源記錄列表),其中源記錄的格式為(源地址,源定時器)
3、路由器維護每一個組播組只對應一種過濾模式:
對於INCLUDE模式,源記錄列表包含該接口網段的主機需要接收的組播源列表,表示為:INCLUDE(S,G)
對於EXCLUDE模式,源記錄列表包含兩類源列表,第一類與過濾模式相反,是主機需要接收的組播源列表S1;第二類是主機不需要接收的組播源列表S2,表示為:EXCLUDE(S1,S2,G)
組定時器只在EXCLUDE模式時有用。當組定時器老化時,如果所有源定時器也老化則路由器會刪除該組記錄;如果此時仍有源定時器運行,則組過濾模式就會從EXCLUDE變為INCLUDE
組記錄格式主要包括:記錄類型、組播組地址、組播源個數、組播源地址列表
組記錄類型包含:當前狀態記錄、過濾模式記錄
過濾模式改變記錄分為:TO_IN、TO_EX
源列表變化記錄:ALLOW、BLOCK
ps.新開一篇
2021/06/02
ps.這篇差不多整理完了
2021/06/02
ps.這篇應該整完了,我要去學習安全的內容了,考核要緊,下個星期就考了,后面的內容就暫時不更新
2021/06/03
參考資料:
《構建H3C高性能園區網絡_第5篇_IP組播》
https://baijiahao.baidu.com/s?id=1640839397029583441&wfr=spider&for=pc
https://forum.huawei.com/enterprise/zh/thread-261979.html
https://www.renrendoc.com/paper/109824221.html