目录
组播通信中,发送者将组播数据数据发送到特定的组播地址。要是组播报文最终能够到达接收者,需要某种机制使与连接潜在接收者网段的组播路由器能够了解到该网段内有哪些组播接收者,保证接收者可以加入到相应的组播中接收到数据。
IGMP因特网组管理协议,是TCP/IP协议族中负责IP组播成员管理的协议,它用来在接受者和与其直接相邻的组播路由器之间建立、维护组播成员关系。
1、组播接收端的需求
接收端如何接收组播数据?接收者需要声明自己要接受哪个组的数据;路由器需要了解哪些组播存在接收者。
组播源不关注接收者的位置信息,但是对连接组成员的路由器而言,其需要收集和维护组成员的信息。组播既不指定明确的接收者,也不将数据发送给网络上的所有主机。如果主机想接收发往某一组播地址的数据,它需要加入这个组,成为该组播组的成员。
2、IGMPv1
IGMP因特网组管理协议,运行于主机与组播路由器之间。IGMP协议作用:主机侧通过IGMP协议向路由器通告组成员关系;路由器侧通过IGMP协议维护组成员关系。
2.1 IGMPv1的工作机制
- 普遍组查询与响应。
- 响应抑制机制。
如图所示,假设Client A和Client C想要接收组播G1的数据,Client B想要接收组播组G2的数据。普遍组查询和响应过程如下:
- RTA发送普遍组查询报文。
- 网段内所有主机都接收到该查询报文,Client A和Client C是组播组G1的成员,则在本地启动定时器Timer-G1。Client B是组播组G2的成员,则在本地启动定时器Timer-G2。定时器的范围为0~10之间的随机值。定时器先超时的主机发送针对该组的成员报告。Client A上的Timer-G1首先超时,向该网段发送目的地址为G1的成员报告报文。Client B上的Timer-G2超时,向该网段发送成员报告报文,目的地址为G2。
- Client C侦听到Client A的成员报告报文,则停止定时器Timer-G1,不再发送针对G1的成员报告报文。这就是响应抑制机制,可以减少网段上的协议流量。
- RTA接收到成员报告报文后,了解到本网段内存在组播组G1和G2的成员,一旦RTA收到G1和G2的组播数据,将向该网段转发。
IGMPv1支持两种类型的报文:
- 普遍组查询报文(General Query):路由器周期性地向224.0.0.1地址(表示同一网段内所有的主机和路由器)发送通用查询报文,默认查询周期为60s,发送周期可以通过命令配置。
- 成员关系报告报文(Membership Report):用于主机加入某个组播组。
2.2 IGMPv1成员加入
新接入的主机Client D想加入组播组G3,为了加速接收组播数据,不等待普遍组查询报文,而立即发送G3的成员报告报文。RTA收到成员报告报文后,了解到本网段内出现了组播组G3的成员。一旦有G3的组播数据到达RTA,将向该网段转发。
2.3 IGMPv1组成员离开
- IGMPv1没有专门定义离开组消息。
- 当Client离开组播组时,将不会在对普遍组查询报文作出回应。假设所有Client退出组播组,Client将不再对普遍组查询报文进行回应。由于网段不存在组播的其他成员,RTA不会收到任何报告报文,则在一定时间(130s=60*2+10,即组成员关系超时时间=IGMP普遍查询消息发送间隔*健壮系数+最大查询响应时间)后,删除对应的组播转发项。
2.4 IGMPv1查询器选举
- 多台路由器同时连接到同一接收端网络时,只有一台路由器进行IGMP选举。
- IGMPv1无查询路由器选举机制,其依赖于组播路由协议在末端网络中选举一个查询器。
- 由于不同的组播路由协议采用不同的选取机制,所以IGMPv1中,同一末端网络中可能会存在多台查询。
- 针对IGMPv1中的两个问题,IGMPv2进行了改进和优化。
3、IGMPv2
3.1 对v1的改进:组成员离开
如图所示,在IGMPv2中,Client B离开组播组G2的过程如下:
- Client B向本地网段的所有组播路由器(目的地址为224.0.0.2)发送针对组G2的离开报文。
- 查询器收到离开报文,会发送针对G2的特定组查询报文,同时启动组成员关系定时器Timer-Membership=发送间隔*发送次数。缺省每隔1s发送一次,一共发送两次,发送间隔和发送次数可以配置。
- 如果网段内不存在其他组G2的成员,则路由器不会收到组G2的成员报告报文。在Timer-Membership超时后,删除组播转发表项中对应的下游接口。路由器将不再向该网段转发G2的组播数据。如果网段内还有G2的其他成员,则这些成员在收到特定组查询报文后会在最大响应时间内发送G2的成员报告报文。路由器继续向该网段转发G2的组播报文。
3.2 对v1的改进:查询器的选举
- 相对于IGMPv1,IGMPv2使用独立的查询器选举机制。
- 所有IGMPv2路由器在初始状态时都认为自己是查询器,向本地网段的所有主机和路由器发送普遍组查询报文。其他路由器在收到该报文后,将报文的源IP地址与自己的接口地址作比较,IP地址最小的路由器将成为查询器,其他路由器成为非查询器。如图所示,RTA的接口IP地址小于RTB的接口IP地址,则RTA当选为查询器。IGMP的查询器和非查询器都会处理IGMP组加入信息,但是只有查询器负责发送查询报文。IGMP非查询器不处理IGMPv2离开报文。
- 所有非查询器上都会启动一个定时器。如果在该定时器超时前收到了来自查询器的查询报文,则重置该定时器;否则就认为原查询器失效并发起新的查询器选举。
3.3 IGMPv1和v2报文的比较
- 版本:包含IGMP版本标识,因此设置为1。
- 类型:普遍组查询 (0x11),成员关系报告 (0x12)。
- 组地址:普遍组查询报文中,组地址为0;成员关系报告报文中,组地址为成员想要加入的组播组的地址。
- 类型:相比于IGMPv1,IGMPv2新增了两种报文:
特定组查询报文(0x11):查询器向共享网段内指定组播组发送的查询报文,用于查询该组播组是否存在成员。
成员离开报文(0x17):成员离开组播组时主动向路由器发送的报文,用于宣告自己离开了某个组播组。
- 最大响应时间:表示主机响应查询返回报告的最大时间。
对于普遍组查询,最大响应时间默认为10秒。对于特定组查询,最大响应时间默认为1秒。
- 组地址:
普遍组查询报文中,组地址设置为0。特定组查询报文中,组地址为需要查询的组地址。在成员报告或离开组的消息中,组地址为需要报告或离开的组地址。
4、IGMPv3
4.1 SSM模型新需求
如果Client A和RTC之间运行的是IGMPv1或IGMPv2,Client A无法对组播源进行选择,无论其是否需要,都会同时接收到来自组播源Source A和Source B的数据。为了满足SSM(特定源组播)模型的新需求,IGMPv3提供了在报文中携带指定组播源信息的能力。
4.2 IGMPv3的工作机制
IGMPv3报文变化如下:
- IGMP报文包含两大类:查询报文和成员报告报文。IGMPv3没有定义专门的成员离开报文,成员离开通过特定类型的报告报文来传达。
- 查询报文中不仅包含普遍组查询报文和特定组查询报文,还新增了特定源组查询报文(Group-and-Source-Specific Query)。用于查询该组成成员是否愿意接收特定源发送的数据。特定源组查询通过在报文中携带一个或者多个组播源地址来达到这一目的。
- 成员报告报文不仅包含主机想要加入的组播组,而且包含主机想要接收来自哪些组播源的数据。IGMPv3增加了针对组播源的过滤模式(INCLUDE/EXCLUDE),将组播组与源列表之间的对应关系简单的表示为(G,INCLUDE,(S1、S2...)),表示只接收来自指定组播源S1、S2发往组G的数据;或(G,EXCLUDE,(S1、S2...)),表示接收除了组播源S1、S2……之外的组播源发给组G的数据。当组播组与组播源列表的对应关系发生了变化,IGMPv3报告报文会将该关系变化存放于组记录(Group Record)字段,发送给IGMP查询器
- 在IGMPv3中一个成员报告报文可以携带多个组播组信息,而之前版本一个成员报告只能携带一个组播组。这样在IGMPv3报文数量大大减少。
4.3 各个版本之间的差异
机制 | IGMPv1 | IGMPv2 | IGMPv3 |
查询器选举 | 依靠其他协议 | 自己选举(IP地址小的) | 自己选举 |
成员离开方式 | 静默离开 | 主动发送离开报文 | 主动发送离开报文 |
特点组查询 | 不支持 | 支持 | 支持 |
指定源、组 | 不支持 | 不支持 | 支持 |
5、IGMP Snooping
5.1 二层中组播数据转发的问题
组播数据帧在二层被洪泛,造成:
- 网络资源浪费。
- 存在安全隐患。
主机加入组播需要向上游设备发送IGMP成员报告,这样上游设备才可以将组播报文发送给主机。由于IGMP报文是封装在IP报文内的,属于三层协议报文,而二层设备不处理报文的三层信息,所以主机家族的过程二层设备并不知道,而且通过对数据链路层数据帧的源MAC地址学习也学习不到组播MAC地址(数据帧的源MAC地址不会是组播MAC地址)。
这样当二层设备在接收到一个目的MAC地址为组播MAC地址的数据帧时,在MAC地址表中就会找不到对应的表项。那么这个时候,它就会采用广播发送组播报文,这样一来就会对网络资源造成极大浪费而且影响网络安全。
5.2 IGMP Snooping机制
IGMP Snooping通过侦听组播路由器与主机之间交互的IGMP报文建立组播数据报文的二层转发表项,从而管理和控制组播数据报文在二层网络中的转发。
IGMP Snooping可以实现组播数据帧在数据链路层的转发和控制。
使能IGMP Snooping功能后二层设备会侦听主机和路由器之间交互的IGMP报文。通过分析报文中携带的信息(报文类型、组播组地址、接收报文的接口等),建立和维护二层组播转发表,从而导致组播数据帧在数据链路层按需转发。
IGMP Snooping建立和维护二层组播转发表的过程:
- RTA作为查询器,周期性的发送普遍组查询,该报文被扩散到交换机的所有端口,包括与交换机CPU相连的内部接口0。交换机CPU收到查询报文后,判断1号接口为连接路由器的接口。
- Client B希望加入组播组224.1.2.3,因此以组播方式发送一个IGMP成员报告报文,报告中具有目的的MAC地址0x0100.5e01.0203。该报文将被发往路由器的接口以及交换机CPU相连的接口0;当CPU接收到Client B的IGMP报告时,CPU利用IGMP报告中的信息将该接口加入二层组播转发表中,此时表项包括Client B的接口号,连接路由器的接口号和连接交换机内部CPU的接口号。
- 形成此转发表项的结果是使后面任何目的地址为0x0100.5e01.0203的组播帧都被控制在端口0、1和3,而且不向交换机其他端口扩散。
- Client C加入组224.1.2.3并主动发一个IGMP报告,交换机CPU收到此报告,它在转发表项上为MAC地址0x0100.5e01.0203增加一个端口(端口4)。
6、IGMP配置
multicast routing-enable //开启组播功能
interface G0/0/1 //进接口开启IGMP功能和版本号
ip address 192.168.1.1 255.255.255.0
igmp enable
igmp version 2
<RTA>display igmp interface //验证
Interface information of VPN-Instance: public net
GigabitEthernet0/0/1(192.168.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
Querier for IGMP: 192.168.1.i(this router)
Total 1 IGMP Group reported
<RTA>display igmp group
Interface group report information of VPN-Instance: public netGigabitEthernet0jo/1(192.168.1.1):
Total 1 IGMP Group reported
Group Address Last Reporter Uptime Expires
239.255.255.250 192.168.1.11 00:04:18 00:02:07