IGMP(internet group manage protocol)協議是主機跟路由器之間的控制協議,主機經過IGMP協議向組播路由器報告本身想加入的組,路由器經過IGMP協議查詢網段上是否還有特定組的成員,協議號爲2.
當前IGMP對IPv4有3個版本:
RFC1112—IGMPv1(參見RFC1112中IGMP的結構)
RFC2236—IGMPv2
RFC3376—IGMPv3
主機跟路由器之間的組控制協議稱之爲Multicast Listener Discover,對IPv6有2個版本:
MLD V1
MLD V2
加入組播組方法:當一個主機但願接收一個組播組的數據,則發送成員加入報告給組播組。並且由該網段的DR負責發送查詢如圖20-1所示:網絡
圖20-1 路由器的查詢以及主機的報告功能
報告抑制功能:
組的其餘成員監聽到報告後抑制本身的成員關係報告發送。即報告抑制機制,實驗證實V1抑制功能很低下,V2能夠正常工做,並且增長了最大響應時間來指定延時值來規定全部主機的查詢響應延時的上限,此外最大響應時間在IGMP查詢器(選舉原則爲IP地址小的設備)上配置,只應用在成員關係查詢信息。如圖20-2所示:架構
圖20-2 IGMP查詢和抑制機制
組成員離開過程:
主機[必須是last report設備]向224.0.0.2發送離開組消息(報文中含有要離開的組地址224.1.1.1)
1秒鐘內沒有收到該組的報告,發送第二個特定組查詢。
二個查詢信息後未收到主機響應,組224.1.1.1超時,離開組。app
圖中R3和R4爲組播網絡的最接近接收者(主機)的設備,兩臺主機由路由器模擬做爲接收者,即加組的設備
IP地址說明:每一個節點都有一個loopback0,IP地址爲XX.1.1.1/32,例如其中R4的loopback0,IP地址爲44.1.1.1/32,本拓撲直連在同一網段,如R3的e0/0爲10.1.1.3/24。ide
圖20-3 IGMP實驗拓撲oop
IGMPv1面臨淘汰,不在本書討論之列。本實驗着重研究IGMPv2。測試
R3和R4做爲最後一跳組播設備,PC1和PC2由路由器模擬加組設備。this
R三、R4: ip multicast-routing---做爲組播設備,開啓組播功能 interface Ethernet0/0 ip address 10.1.1.3 255.255.255.0 ip pim sparse-mode---pim協議是最流行的組播協議,後續咱們會着重介紹,對思科設備來講只要最後 一跳設備必須開啓PIM,那麼就自動使能了IGMP。 ! ip multicast-routing interface Ethernet0/0 ip address 10.1.1.4 255.255.255.0 ip pim sparse-mode PC1和PC2: interface Ethernet0/0 ip address 10.1.1.1 55.255.255.0 ip igmp join-group 224.1.1.1---加入組播組224.1.1.1 ! interface Ethernet0/0 ip address 10.1.1.2 255.255.255.0 ip igmp join-group 224.1.1.1
驗證:
R4#show ip pim neighbor ---驗證PIM造成的鄰居
PIM Neighbor Table
Mode: B - Bidir Capable, DR - Designated Router, N - Default DR Priority,
S - State Refresh Capable
Neighbor Interface Uptime/Expires Ver DR
Address Prio/Mode
10.1.1.3 Ethernet0/0 00:00:11/00:01:33 v2 1 / Sspa
R3#show ip igmp interface ethernet 0/0---只要使能了PIM,天然即開啓了igmp協議
Ethernet0/0 is up, line protocol is up
Internet address is 10.1.1.3/24
IGMP is enabled on interface---使能PIM就自動使能了IGMP
Current IGMP host version is 2---默認的IGMPv2
Current IGMP router version is 2------默認的IGMPv2
IGMP query interval is 60 seconds---IGMP查詢間隔默認爲60s
IGMP querier timeout is 120 seconds---負責查詢的設備即查詢者,監控查詢者超時時間爲120s
IGMP max query response time is 10 seconds---默認最大響應時間爲10s,後續會進行調整
Last member query count is 2
Last member query response interval is 1000 ms
Inbound IGMP access group is not set
IGMP activity: 2 joins, 0 leaves
Multicast routing is enabled on interface
Multicast TTL threshold is 0
Multicast designated router (DR) is 10.1.1.4---此網段的DR爲R4
IGMP querying router is 10.1.1.3 (this system)---最後一跳有多個設備,那麼R3爲查詢者:在有多個最後一跳路由器的狀況下,由查詢路由器發起IGMP的查詢(query)消息,IGMPv2和IGMPv3查詢路由器的選取原則:接口IP地址小的爲查詢路由器。
Multicast groups joined by this system (number of users):
224.0.1.40(1)debug
PIM的DR,即指定路由器做用和OSPF不一樣,其做用在於:在有多個第一跳路由器的狀況下,由DR負責轉發組播源發出的組播流,並向RP發送註冊信息;在有多個最後一跳路由器的狀況下,由DR負責向組播源或者RP發送PIM的join消息。
PIM的DR的選取原則:優選DR優先級高的爲DR,次選IP地址大的爲DR。
驗證R4:
R4#show ip igmp interface e0/0
Ethernet0/0 is up, line protocol is up
Internet address is 10.1.1.4/24
IGMP is enabled on interface
Current IGMP host version is 2
Current IGMP router version is 2
IGMP query interval is 60 seconds
IGMP querier timeout is 120 seconds
IGMP max query response time is 10 seconds
Last member query count is 2
Last member query response interval is 1000 ms
Inbound IGMP access group is not set
IGMP activity: 2 joins, 0 leaves
Multicast routing is enabled on interface
Multicast TTL threshold is 0
Multicast designated router (DR) is 10.1.1.4 (this system)—DR爲R4
IGMP querying router is 10.1.1.3 ---查詢者爲R3
Multicast groups joined by this system (number of users):
224.0.1.40(1)
下面的配置使得R3成爲DR:
interface Ethernet0/0
ip address 10.1.1.3 255.255.255.0
ip pim dr-priority 10—把默認的優先級改成10,使其成爲DR
驗證:
R4#show ip pim neighbor---驗證pim的鄰居時,能夠看到dr的狀況
PIM Neighbor Table
Mode: B - Bidir Capable, DR - Designated Router, N - Default DR Priority,
S - State Refresh Capable
Neighbor Interface Uptime/Expires Ver DR
Address Prio/Mode
10.1.1.3 Ethernet0/0 00:12:47/00:01:16 v2 10/ DR S設計
須要先了解一下基本的術語和概念:
last reporter設備,即最後發送report報文的設備。該設備和離開組有關係
經過下面的實驗讓咱們來觀察report抑制功能以及報告抑制功能。
R3#debug ip igmp
IGMP debugging is on
R2#show ip igmp groups detail
Flags: L - Local, U - User, SG - Static Group, VG - Virtual Group,
SS - Static Source, VS - Virtual Source
Interface: Ethernet0/0
Group: 224.1.1.1
Flags: L U
Uptime: 00:18:32
Group mode: INCLUDE
Last reporter: 10.1.1.1---R2知道R1爲最後一個報告者,由於它們在同一個網段內
Source list is empty
此時R3上觀察到:
Mar 1 00:42:00.475: IGMP(0): Send v2 general Query on Ethernet0/0---查詢者發送一個通用組查詢
Mar 1 00:43:09.107: IGMP(0): Received v2 Report on Ethernet0/0 from 10.1.1.1 for 224.1.1.1---收到
來自R1的IGMP report報文,沒有收到來自R2的report報文,是由於report抑制功能的緣由。R1
發送了有設備在該組中,爲了節省報文發送,R2收到該報文以後再也不發送report。
Mar 1 00:43:09.111: IGMP(0): Received Group record for group 224.1.1.1, mode 2 from 10.1.1.1 for 0 sources
Mar 1 00:43:09.115: IGMP(0): Updating EXCLUDE group timer for 224.1.1.1
驗證R3:
R3#show ip igmp groups
IGMP Connected Group Membership
Group Address Interface Uptime Expires Last Reporter
224.1.1.1 Ethernet0/0 00:24:33 00:02:43 10.1.1.1
224.0.1.40 Ethernet0/0 00:28:55 00:02:43 10.1.1.3
R1爲last report,該角色是不斷髮生變化的,發送報告的設備即爲last report,而其餘同組中的設備被抑制發送報告。
能夠在R2查看:
R2#debug ip igmp
IGMP debugging is on
R2#
Mar 1 00:52:01.943: IGMP(0): Received v2 Query on Ethernet0/0 from 10.1.1.3---收到了來自R3(查
詢者)的查詢消息
Mar 1 00:52:01.947: IGMP(0): Set report delay time to 0.2 seconds for 224.1.1.1 on Ethernet0/0---發送
報告的時延設置爲0.2秒,該數字爲一個隨機值,隨機值小的爲報告者
Mar 1 00:52:02.147: IGMP(0): Send v2 Report for 224.1.1.1 on Ethernet0/0---此時R2發送了報告,
那麼R2爲last report,緣由在於R2的隨機報告時延較小
R2#show ip igmp groups
IGMP Connected Group Membership
Group Address Interface Uptime Expires Last Reporter
224.1.1.1 Ethernet0/0 00:27:39 stopped 10.1.1.2
R2#show ip igmp groups detail
Flags: L - Local, U - User, SG - Static Group, VG - Virtual Group,
SS - Static Source, VS - Virtual Source
Interface: Ethernet0/0
Group: 224.1.1.1
Flags: L U
Uptime: 00:27:41
Group mode: INCLUDE
Last reporter: 10.1.1.2
Source list is empty
爲了觀察到此過程,以及爲了加速發送加組、離開組,須要屢次取消和鍵入加組命令。
爲了控制加組設備設置的報告實驗,IGMPv2能夠設置該時間的最大值,在查詢者R3上作以下設置:
interface Ethernet0/0 ip address 10.1.1.3 255.255.255.0 ip igmp query-max-response-time 5---設置最大響應時間爲5秒 咱們觀察新一輪的完整的報告過程: R3# *Mar 1 01:06:01.019: IGMP(0): Send v2 general Query on Ethernet0/0---查詢者發送一個通用組查詢 *Mar 1 01:06:01.019: IGMP(0): Set report delay time to 3.4 seconds for 224.0.1.40 on Ethernet0/0---本 設備針對224.0.1.40的report delay,不用關心該組 R3# *Mar 1 01:06:04.167: IGMP(0): Received v2 Report on Ethernet0/0 from 10.1.1.2 for 224.1.1.1---從R2 收到報告消息 *Mar 1 01:06:04.171: IGMP(0): Received Group record for group 224.1.1.1, mode 2 from 10.1.1.2 for 0 sources R1# *Mar 1 01:06:03.683: IGMP(0): Received v2 Query on Ethernet0/0 from 10.1.1.3---從查詢者R3收到 查詢消息 *Mar 1 01:06:03.687: IGMP(0): Set report delay time to 4.4 seconds for 224.1.1.1 on Ethernet0/0---本設 備設置一個隨機發送報告的時延4.4秒,該值應該大於R2的報告時延,同時該時間小於querier(R3) 上設置的時間
R1#
Mar 1 01:06:06.843: IGMP(0): Received v2 Report on Ethernet0/0 from 10.1.1.2 for 224.1.1.1---從R2
收到了R2發送的報告消息
Mar 1 01:06:06.847: IGMP(0): Received Group record for group 224.1.1.1, mode 2 from 10.1.1.2 for 0 sources
*Mar 1 01:06:06.851: IGMP(0): Cancel report for 224.1.1.1 on Ethernet0/0---R1取消了發送報告,R1
的報告被抑制
R2#
Mar 1 01:06:02.275: IGMP(0): Received v2 Query on Ethernet0/0 from 10.1.1.3
Mar 1 01:06:02.279: IGMP(0): Set report delay time to 2.4 seconds for 224.1.1.1 on Ethernet0/0---本端
設置的一個隨機報告時延爲2.4秒
R2#
*Mar 1 01:06:05.411: IGMP(0): Send v2 Report for 224.1.1.1 on Ethernet0/0---本設備發送了報告,會
抑制R1的報告
R2#
下面描述一個接收者離開組播組224.1.1.1的過程:
主機(做爲last report的加組者)向224.0.0.2發送離開組消息(該報文中含有準備要離開的組播組地址224.1.1.1);
查詢者若是在1秒鐘內沒有收到關於224.1.1.1的報告,那麼它將發送第二個關於224.1.1.1的查詢;
在2個查詢信息後,查詢者未收到主機響應,那麼組224.1.1.1超時,即全部的接收者都離開了該組。
先來觀察last report是哪臺設備
R3#show ip igmp groups
IGMP Connected Group Membership
Group Address Interface Uptime Expires Last Reporter
224.1.1.1 Ethernet0/0 01:45:51 00:02:27 10.1.1.1
224.0.1.40 Ethernet0/0 01:50:13 00:02:27 10.1.1.4
讓R1離開組:
R1(config)#int e0/0
R1(config-if)#no ip igmp join-group 224.1.1.1
R1(config-if)#
Mar 1 02:10:51.855: IGMP(0): IGMP delete group 224.1.1.1 on Ethernet0/0
Mar 1 02:10:51.859: IGMP(0): Send Leave for 224.1.1.1 on Ethernet0/0---R1發送了離開組的leaver
消息,這點和V1不一樣,V1是默默的離開
R3#
Mar 1 02:10:49.191: IGMP(0): Received Leave from 10.1.1.1 (Ethernet0/0) for 224.1.1.1---查詢者從
R1收到了離開組的消息
Mar 1 02:10:49.195: IGMP(0): Received Group record for group 224.1.1.1, mode 3 from 10.1.1.1 for 0 sources
Mar 1 02:10:49.199: IGMP(0): Lower expiration timer to 2000 msec for 224.1.1.1 on Ethernet0/0
Mar 1 02:10:49.203: IGMP(0): Send v2 Query on Ethernet0/0 for group 224.1.1.1
R3#
Mar 1 02:10:50.203: IGMP(0): Send v2 Query on Ethernet0/0 for group 224.1.1.1---連續發送兩次查
詢,並且是專門針對該組的查詢,而非通用查詢,發送次數能夠設置
Mar 1 02:10:50.227: IGMP(0): Received v2 Report on Ethernet0/0 from 10.1.1.2 for 224.1.1.1---R2收
到R2的查詢,發送了報告,即該子網下還有組播接收者
Mar 1 02:10:50.231: IGMP(0): Received Group record for group 224.1.1.1, mode 2 from 10.1.1.2 for 0 sources
Mar 1 02:10:50.235: IGMP(0): Updating EXCLUDE group timer for 224.1.1.1
Mar 1 02:10:50.235: IGMP(0): MRT Add/Update Ethernet0/0 for (,224.1.1.1) by 0
總結:
當last reporter離開一個組的時候,要發送leave報文通知最後一跳路由器,而後路由器連續發送兩個查詢報文,查詢是否還有該組的接收者存在,此時的查詢報文是針對特定組的查詢。對於非last reporter離開組,不須要發送leave報文,由於這個時候路由器記錄的組播接收者不是該設備。
能夠在最後一跳設備上限制加入某些組播組,配置以下:
R3:
access-list 10 permit 224.1.1.1 access-list 10 permit 224.1.1.2 interface Ethernet0/0 ip address 10.1.1.3 255.255.255.0 ip pim dr-priority 10 ip pim sparse-mode ip igmp query-max-response-time 5 ip igmp access-group 10---ACL 10 匹配的組才能加入
驗證:
R3#show ip igmp interface e0/0
Ethernet0/0 is up, line protocol is up
Internet address is 10.1.1.3/24
IGMP is enabled on interface
Current IGMP host version is 2
Current IGMP router version is 2
IGMP query interval is 60 seconds
IGMP querier timeout is 120 seconds
IGMP max query response time is 5 seconds
Last member query count is 2
Last member query response interval is 1000 ms
Inbound IGMP access group is 10
IGMP activity: 2 joins, 0 leaves
Multicast routing is enabled on interface
Multicast TTL threshold is 0
Multicast designated router (DR) is 10.1.1.3 (this system)
IGMP querying router is 10.1.1.3 (this system)
Multicast groups joined by this system (number of users):
224.0.1.40(1)
R1加組:
R1(config)#interface e0/0
R1(config-if)#ip igmp join-group 224.1.1.3
R1(config-if)#ip igmp join-group 224.1.1.2
查看R3:
Mar 1 02:27:25.451: IGMP(0): Received v2 Report on Ethernet0/0 from 10.1.1.1 for 224.1.1.3
Mar 1 02:27:25.455: IGMP(*): Group 224.1.1.3 access denied on Ethernet0/0---加入該組224.1.1.3的
信息被拒絕,由於該組沒有被ACL容許
R3#show ip igmp groups ---R3上沒有收到224.1.1.3的加組信息
IGMP Connected Group Membership
Group Address Interface Uptime Expires Last Reporter
224.1.1.1 Ethernet0/0 02:03:29 00:02:52 10.1.1.2
224.0.1.40 Ethernet0/0 02:07:51 stopped 10.1.1.3
R3#show access-lists
Standard IP access list 10
10 permit 224.1.1.1 (213 matches)
20 permit 224.1.1.2 (2 matches
最後作一個ping的測試:
R3#ping 224.1.1.1
Type escape sequence to abort.
Sending 1, 100-byte ICMP Echos to 224.1.1.1, timeout is 2 seconds:
Reply to request 0 from 10.1.1.2, 32 ms
R3#ping 224.1.1.2
Type escape sequence to abort.
Sending 1, 100-byte ICMP Echos to 224.1.1.2, timeout is 2 seconds:
Reply to request 0 from 10.1.1.1, 16 ms
IGMPv3是最新的關於IGMP的版本
IGMPv3能夠和IGMPv一、V2實現互操做,它特定服務於Source Specific Multicast(SSM)模型,默認的組播組爲232.0.0.0/8。
IGMPv3容許主機指定組播源,只接收特定組播源發出的組播數據,相比之前的版本,增強了主機的控制能力,不只能夠指定組播組,還能指定組播的源。
IGMPv3加強了接收者對源的控制,能夠顯式的指定它指望的源,有兩種模式:INCLUDE和EXCLUDE。
INCLUDE模式中,接收者通告組成員關係,提供一個INCLUDE列表,其中包含它想接收的流量。即主機只接收除了EXCLUDE LIST中列出的源的流量,一般爲空。
IGMPv3專門爲SSM設計,主機發送成員關係報告到224.0.0.22,全部的IGMPv3路由器偵聽該地址,主機不會偵聽或者響應224.0.0.22,IGMPv3也不存在報告抑制功能,由於IGMPv3主機不偵聽其餘主機。
修改查詢者R3爲IGMPv3,配置以下:
interface Ethernet0/0 ip address 10.1.1.3 255.255.255.0 ip igmp version 3
R3#show ip igmp interface e0/0Ethernet0/0 is up, line protocol is upInternet address is 10.1.1.3/24IGMP is enabled on interfaceCurrent IGMP host version is 3Current IGMP router version is 3IGMP query interval is 60 secondsIGMP querier timeout is 120 secondsIGMP max query response time is 5 secondsLast member query count is 2Last member query response interval is 1000 msInbound IGMP access group is 10IGMP activity: 3 joins, 0 leavesMulticast routing is enabled on interfaceMulticast TTL threshold is 0Multicast designated router (DR) is 10.1.1.3 (this system)IGMP querying router is 10.1.1.3 (this system)Multicast groups joined by this system (number of users):224.0.1.40(1)R1加入232.1.1.1並且指定源interface Ethernet0/0ip address 10.1.1.1 255.255.255.0ip igmp join-group 224.1.1.2ip igmp join-group 232.1.1.1 source 10.1.1.3---指定能夠從特性組播10.1.1.3源收的流量驗證:R1#show ip igmp groups detailFlags: L - Local, U - User, SG - Static Group, VG - Virtual Group,SS - Static Source, VS - Virtual SourceInterface: Ethernet0/0Group: 232.1.1.1Flags: L Uptime: 00:05:36Group mode: INCLUDE---加入了232.1.1.1,並且模式爲include模式Last reporter: 10.1.1.1Group source list: (C - Cisco Src Report, U - URD, R - Remote, S - Static,V - Virtual, Ac - Accounted towards access control limit,M - SSM Mapping, L - Local) Source Address Uptime v3 Exp CSR Exp Fwd Flags10.1.1.3 00:05:36 stopped stopped Yes LInterface: Ethernet0/0Group: 224.1.1.2---加入了普通組Flags: L U Uptime: 00:56:57Group mode: INCLUDE---includeLast reporter: 10.1.1.1Source list is empty---沒有指定源