驗證理論
IGMP特性
IGMP Snooping
IGMP Proxy
實驗拓撲
初始配置
配置接口地址,使能路由器組播功能和接口pim dm
配置電腦IP地址為PC1:10.1.1.10;PC2:10.1.1.20
[AR1]multicast routing-enable
[AR1-GigabitEthernet0/0/0]ip add 10.1.1.1 24
[AR1-GigabitEthernet0/0/0]pim dm
[AR2]multicast routing-enable
[AR2]int g 0/0/0
[AR2-GigabitEthernet0/0/0]ip add 10.1.1.2 24
[AR2-GigabitEthernet0/0/0]pim dm
初始結果
實驗步驟
第一步: IGMPv1查詢,加組,離組,查詢器選舉
首先看單邊PC1和AR1,關閉AR2和PC2.設置AR1接口下的IGMP版本為版本1(默認是版本2)
[AR1-GigabitEthernet0/0/0]igmp enable
[AR1-GigabitEthernet0/0/0]igmp version 1
[AR1]dis igmp interface GigabitEthernet 0/0/0
Interface information of VPN-Instance: public net
GigabitEthernet0/0/0(10.1.1.1): //接口類型與編號(接口的IP地址)
IGMP is enabled //接口已使能IGMP,通過igmp enable配置
Current IGMP version is 1 //接口配置的IGMP版本,通過igmp version配置
IGMP state: up //IGMP接口狀態,up或down
IGMP group policy: none //IGMP組策略的ACL編號,用於限制該接口上可以加入的組。可通過igmp group-policy命令配置。“none”表示該接口上沒有應用ACL。
IGMP limit: - //當前接口可以維護IGMP組成員關系的最大個數。可通過igmp limit命令配置。
Value of query interval for IGMP (negotiated): - //非查詢器通過協商得到的查詢報文的發送時間間隔。該協商值只存在於IGMPv3中。
Value of query interval for IGMP (configured): 60 s //接口上配置的發送IGMP查詢報文的時間間隔。可通過igmp timer query命令配置
Value of other querier timeout for IGMP: 0 s //其他IGMP查詢器存活時間。可以通過igmp timer other-querier-present進行配置。作為查詢器的接口上取值為0。
Value of maximum query response time for IGMP: - //IGMP查詢報文中包含的最大響應時間,可通過igmp max-response-time命令配置。
Querier for IGMP: 10.1.1.1 (this router) //IGMP查詢器。在IGMPv1中,查詢器的選擇由組播路由協議決定;在IGMPv2中,共享網段上IP地址最小的組播路由器充當查詢器。
1.查詢——普遍組查詢報文(general Query)
- IGMPv1每隔60s周期發送查詢報文
- 目的MAC地址是固定的前25位0100.5e(0)+IP地址后23位(0).00.01,目的IP地址是所有主機都可以收到的224.0.0.1,multicast address為0.0.0.0表示為查詢任意源組播
所有主機都默認加入了224.0.0.1;所有路由器都默認加入了224.0.0.2
- IGMP查詢報文TTL為1,不能跨路由器轉發
- IGMP基於IP,協議號為2
2.加組——成員關系報告報文(Report)
- 只要有用戶加入終端就會自動發送report報文,加入之后終端每收到一次query就回復一次report報文
- 目的MAC地址是組播地址0100.5e(0)+目標IP地址239.1.1.2的后23位(1).01.02,三層目的IP地址為要加入的組239.1.1.2,multicast address為要加入的組239.1.1.2
- 成員關系報告報文的TTL也為1,不能跨路由器轉發
加組報告抑制機制:同一網絡內,交換機收到目的地址是組播地址,根據交換機轉發原理進行泛洪,其他終端收到這個報文之后發現這個網絡內有終端已經發送了加組報告了,他就沒有必要再發送加組報告了,反正只需要最后一跳路由器保持接口和這個組ID的表象嘛。基於回退時間加組(MRT)0-10s
思科默認有加組報告抑制機制,華為沒有,所以華為是有多少個終端,不管加入是不是相同組,都發加組報告
啟用PC2加入相同組
3.離組
點擊離組后不會觸發任何報文,等到expires計時器超時后,最后一跳路由器上記錄的該IGMP表項即刪除
超時時間=健壯系數默認2*通用組查詢周期默認60+最大響應時間默認10=130s
4.IGMP查詢器選舉,開啟AR2
IGMPv1的查詢器依賴於PIM的DR選舉
PIM DR選舉原則:接口優先級越大越優先,接口優先級相同(默認優先級都是1),比較使能PIM的接口IP,越大越優先
開啟AR2之后再看AR1,由於AR2接口IP大,AR2被選舉為查詢器
[AR1]display pim interface GigabitEthernet 0/0/0
VPN-Instance: public net
Interface State NbrCnt HelloInt DR-Pri DR-Address
GE0/0/0 up 1 30 1 10.1.1.2
[AR2]display pim interface GigabitEthernet 0/0/0
VPN-Instance: public net
Interface State NbrCnt HelloInt DR-Pri DR-Address
GE0/0/0 up 1 30 1 10.1.1.2 (local)
[AR1]dis igmp interface GigabitEthernet 0/0/0
Interface information of VPN-Instance: public net
GigabitEthernet0/0/0(10.1.1.1):
IGMP is enabled
Current IGMP version is 1
IGMP state: up
IGMP group policy: none
IGMP limit: -
Value of query interval for IGMP (negotiated): -
Value of query interval for IGMP (configured): 60 s
Value of other querier timeout for IGMP: 0 s
Value of maximum query response time for IGMP: -
Querier for IGMP: 10.1.1.2
第二步:IGMPv2查詢,加組,離組,查詢器選舉
1.查詢——普遍組查詢報文(general Query)
- 其他路由器使用查詢超時監控查詢者(超時時間120s)2分鍾收不到查詢信息,另一個路由器會起來
- 組成員響應隨機回退時間(最小單位0.1s)避免加組沖突,IGMPv1是1s
- 普遍組查詢增加最大響應時間,並可以手動調整,IGMPv1是默認0-10s之間,不能手動調整
- 其他與IGMPv1相同,也是60s發一次,TTL為1
2.加組——成員關系報告報文(Report)
- 普遍組查詢增加最大響應時間,並可以手動調整,IGMPv1是默認0-10s之間,不能手動調整
- 其他與IGMPv1相同
3.離組——成員離開報文(Leave)+特定組查詢報文(Group-Specific Query)
最后一跳路由器對於成員接口下有多少個成員並不清楚,只要有一個成員在,就需要轉發組播
[AR1]dis igmp group
Interface group report information of VPN-Instance: public net
GigabitEthernet0/0/0(10.1.1.1):
Total 1 IGMP Group reported
Group Address Last Reporter Uptime Expires
239.1.1.2 10.1.1.20 00:08:00 00:01:25
不是last reporter離開:不會觸發特定組查詢報文,目的地址應該是224.0.0.2,使得所有路由器都會監聽到離組信息,包括正在轉發組播報文的路由器(ENSP bug,目的地址是錯誤的,正確的應該是224.0.0.2;另外不是last reporter離開他也觸發了特定組查詢,這個是不應該的)
last reporter離開:觸發特定組查詢報文(Group-Specific Query),路由器詢問一下,這個組還有沒有成員
[AR1]dis igmp int g 0/0/0 verbose
Interface information of VPN-Instance: public net
GigabitEthernet0/0/0(10.1.1.1):
IGMP is enabled
Current IGMP version is 2
IGMP state: up
IGMP group policy: none
IGMP limit: -
Value of query interval for IGMP (negotiated): -
Value of query interval for IGMP (configured): 60 s
Value of other querier timeout for IGMP: 0 s
Value of maximum query response time for IGMP: 10 s
Value of last member query time: 2 s //默認特定組查詢時間2s,1s發送一個特定組查詢報文。特定組查詢時間=發送周期*健壯系數(發送特定組查詢次數次數,默認為2),健壯系數可通過igmp robust-count修改
Value of last member query interval: 1 s
Value of startup query interval: 15 s
Value of startup query count: 2
General query timer expiry (hours:minutes:seconds): 00:00:04
Querier for IGMP: 10.1.1.1 (this router)
IGMP activity: 7 joins, 3 leaves
Robustness (negotiated): -
Robustness (configured): 2
Require-router-alert: disabled
Send-router-alert: enabled
Ip-source-policy: disabled
Query Ip-source-policy: disabled
Prompt-leave: enabled
SSM-Mapping: disabled
Startup-query-timer-expiry: off
Other-querier-present-timer-expiry: off
- 成員離組報文和特定組查詢報文的TTL都是1,無法通過三層轉發
- last reporter離組會觸發兩個特定組查詢報文。極端情況下,如果說路由器下面只連接了一個終端,這個終端離組沒有必要觸發特定組查詢報文,可以手動設置收到Leave直接離組
[AR1-GigabitEthernet0/0/0]igmp prompt-leave
[AR1]dis igmp group
[AR1] - 引入特定組查詢和離組報文可以加速IGMP收斂
4.查詢器選舉
IGMPv2增加了查詢器選舉機制,接口IP地址越小越優先,此時查詢器選舉與pim無關
[AR2-GigabitEthernet0/0/0]pim hello-option dr-priority 10 //設置AR2的0/0/0口的Pim優先級增大到10
[AR2]dis igmp interface GigabitEthernet 0/0/0
Interface information of VPN-Instance: public net
GigabitEthernet0/0/0(10.1.1.2):
IGMP is enabled
Current IGMP version is 2
IGMP state: up
IGMP group policy: none
IGMP limit: -
Value of query interval for IGMP (negotiated): -
Value of query interval for IGMP (configured): 60 s
Value of other querier timeout for IGMP: 76 s
Value of maximum query response time for IGMP: 10 s
Querier for IGMP: 10.1.1.1
Total 1 IGMP Group reported
第三步:IGMPv3查詢,加組,離組,查詢器選舉
1.查詢——普遍組查詢報文(general Query)
- 通用組查詢60s/180s
- 特定組查詢,查詢者發送2次特定組查詢
- 增加了組播源組查詢
- 增加了組播源數量選項,其他與IGMPv2相同
2.加組——成員關系報告報文(Report)
- num group records是加入了多少個組
- 因為V3考慮到了組播源,接口下不同終端的組播源可能不同,無需成員關系報告報文抑制機制
- V3加組要提供組播源信息
- 組播組數表示要加入多少個組,設置組數為2增量為3表示加入2個組分別是239.1.1.1,239.1.1.3
- 組播源地址數表示要加入多少個組播源,增量含義與上面類似
- 通告組播源主要有兩種模式(限制的是加入這個組播組IP但是是否接收某個組播源IP)
- INCLUDE:希望接收來自特定組播源的組播流量
- EXCLUDE:希望過濾來自特定組播源的組播流量。ex標識為離組信息,若ex=null,標識加入任意組;block也可以離組
3.離組——普遍組查詢報文(general Query)
- 離組發的也是發加組報文。IGMPv3沒有專門的成員離開報文,成員離開通過特定類型的報告報文來傳達。性質和加組報告相同,離組時發送,另外只要有query就發送
- IGMPv3新增特定源組查詢報文(Group-and-Source-Specific Query),用於查詢該組成員是否願意接收特定源發送的數據。特定組查詢通過在報文中攜帶一個或多個組播源地址來達到這一目的
4.查詢器選舉
查詢器選舉機制一致,IP地址小的為查詢器
[AR1]dis igmp int g 0/0/0
Interface information of VPN-Instance: public net
GigabitEthernet0/0/0(10.1.1.1):
IGMP is enabled
Current IGMP version is 3
IGMP state: up
IGMP group policy: none
IGMP limit: -
Value of query interval for IGMP (negotiated): 60 s
Value of query interval for IGMP (configured): 60 s
Value of other querier timeout for IGMP: 0 s
Value of maximum query response time for IGMP: 10 s
Querier for IGMP: 10.1.1.1 (this router)
Total 1 IGMP Group reported
第四步:IGMP特性
1.IGMP Snooping
如果最后一跳路由器下面接了交換機,根據交換機轉發機制,如果收到組播流量是泛洪處理的。為了避免這一情況,配置IGMP Snooping,建立二層組播轉發表象,使得交換機上僅路由器端口和成員端口可以轉發組播報文
二層組播轉發表象中存在兩類接口:
路由器端口:二層組播設備上朝向三層組播設備(DR或IGMP查詢器)一側的接口,二層組播設備從此接口接收組播數據報文
成員端口:又稱組播組成員端口,表示二層組播設備上朝向組播組成員一側的端口,二層組播設備往此接口發送組播數據報文
增加一個PC3,不開啟組播,未配置IGMP Snooping之前,可以接收到組播流量
配置IGMP Snooping
[LSW1]multicast routing-enable
[LSW1]igmp-snooping enable
[LSW1]vlan 1
[LSW1-vlan1]igmp-snooping version 2
[LSW1-vlan1]igmp-snooping enable
此時根據監聽PIM的hello,IGMP查詢包找到了路由器端口為1,2;根據監聽加組,離組報文,找到了成員端口為3,4
此表象監聽報文,動態維護,比如將PC2離組,再查看成員端口,就沒有0/0/4了
此時再到PC3連接着的交換機接口上進行抓包,不管PC1,2怎么加組離組,他都不會有數據包了
2.IGMP Proxy
IGMP Snooping開啟后會自動關閉加組報告抑制(因為只有發了加組報告的終端對應在交換機上的接口才能轉發組播包),此時成員如果太多,最后一跳路由器壓力比較大。為了降低路由器壓力,建議配置IGMP Proxy
為了實現以上功能,IGMP Proxy定義了兩類接口:
主機接口:IGMP Proxy設備上配置IGMP Proxy功能的接口,該接口一般面向IGMP查詢器
路由器接口:IGMP Proxy設備上配置IGMP功能的接口,該接口一般面向組成員
IGMP Proxy減少成員關系報告報文的工作機制如下:
路由器接口作為IGMP接口,對下呈現為IGMP查詢器,發送查詢報文,處理成員關系報告報文,形成IGMP表項,並將成員關系報告從主機接口發送給上游的IGMP查詢器
當新用戶加入同一個組播組時,IGMP Proxy設備不會再向IGMP查詢器反饋成員關系報告報文,因此減少了成員關系報告報文數量
當組成員離開時,IGMP Proxy通過IGMP離組機制確定是否有特定組播組的組成員,當確定已經沒有組成員后才發送離開報文給上游IGMP查詢器