IGMP(Internet Group Management Prootocol)作为因特网组管理协议,是TCP/IP协议簇中负责IP组播成员管理的协议,它用来在IP主机和与其直接相邻的组播路由之间建立、维护组播成员关系。
介绍:
IGNP协议运行与主机和与主机直连的组播路由之间
IGMP工作机制:
接收者主机向所在的共享网络报告组成员关系
查询器周期性地向该共享网段发送组成员查询消息
接收者主机接收到查询消息后进行相应以报告组成员关系
网段中的组播路由一句接收到的相应来刷新组成员的存在信息(oiflist刷新)
组播协议分层体系
IGMPv1报文格式:
版本:版本字段包含IGMP版本标识,因此设置为1
类型:成员关系查询(0x11),成员关系报告(0x12)
组地址:
当一个成员关系报告正被发送时,组地址字段包含组播地址。
当用于组成员关系查询时,本字段为0,并被主机忽略
主机加入组播会发送成员关系报告
IGMPv1查询器周期性的详子网内所有的主机(224.0.0.1)发送成员关系查询信息
主机侧受限发送成员关系报告,报文目的地址会为:224.0.0.1,所有的都会接收到该报文,接收到该报文的主机与其是在同一个组中的,会抑制自身的报告转发,取消多余的报告
IGMPv1支持两种类型的报文:
普遍组查询报文(General Query):路由器周期性地向224.0.0.1地址(表示 同一网段内所有主机和路由器)发送通用查询报文,默认查询周期为60秒, 发送周期可以通过命令配置。
成员关系报告报文(Membership Report):用于主机加入某个组播组。
如图所示,假设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的组播数据,将向该网段转发。
新接入主机Client D想加入组播组G3,为了快速接收组播数据,不等待普遍组查询 报文,而立即发送G3的成员报告报文。RTA收到成员报告报文后,了解到本网段内 出现了组播组G3的成员。一旦有G3的组播数据到达RTA,将向该网段转发。
IGMPv1组成员离开:
IGMPv1没有设定主机离开组的报文,所以会静默离开,
路由器会周期性的发送普遍组查询
路由器没有收到该组的igmp报告,则发送成员关系信息(共3次,130s=120*2+10)
3次查询仍没有收到相应,则路由器认为没有组播成员
IGMPv1的查询器选举:
查询器选举依赖路由组播协议。
多台路由器同时连接到同一接收端网络时,只需要有一台路由器进行IGMP查询
IGMPv1无查询路由器选举机制,其依赖于组播路由协议在末端网络中选举一个查询器。 由于不同的组播路由协议采用不同的选举机制,所以在IGMPv1中,同一末端网络中 可能会存在多台查询器。
针对IGMPv1中的两个问题,IGMPv2进行了改进和优化。
igmpv1配置命令:
[route]multicast routing-enable(全局启动)
inter g 0/0/0(接口启用)
pim dm
igmp enable
igmp version 1(默认是2)
PC需要加入组播组
IGMPv2报文格式:
类型:
成员关系查询(0x11)
常规关系查询:用于确定哪些组播组是有效的,即该组是否还有成员在使用,常规查询地址由全0表示
指定组查询:用于禅熏特定的组播组是否还有组成员
v2成员关系报告(0x16)
v1成员关系报告(0x12)
离开组消息(0x17)
最大相应时间:
以0.1秒为单位
默认值为100,即10s
校验和:
组地址:
在成员查询消息中,发送一个常规的查询时组地址域设为0,当发sing一个特定组查询时,则应设置组的地址
在成员报告或离开组的消息中,组的地址域保留了要报告或要离开的地址
IGMPv2组成员加入:
当一个主机加入一个组播组,则应该立即发送一个或多个成员关系报告给组播组
IGMPv2查询与相应:
与v1相同,存在抑制机制
增加了最大相应时间
IGMPv2中增加了最大相应时间字段。前面接受了注解收到成员关系查询报文时,会为每个已经加入的组播组启动一个计时器。计时器到期的主机才会发送IGMP成员关系报告来相应路由器的查询。在v2中该计时器的值为“1—最大相应时间”之间的一个随机值
IGMPv2版本中增加最大相应时间字段,以动态的调整知己对组查询报文的响应时间
在IGMPv1版本中,组播路由器发起的查询是针对该网段下的所有组播组,这种查询被称为普遍组查询
IGMPv2版本中,在普遍组查询之外增加了特定组的查询,这种查询报文的目的IP地址为某个组播组的IP,报文中的组地址字段也为该组播组的IP地址,网络中属于该组播组成员的主机才有机会进行相应,这样就避免了属于其他组播组的主机发送相应报文
IGMPv2查询器选举:
相对于IGMPv1,IGMPv2使用独立的查询器选举机制。
所有IGMPv2路由器在初始状态时都认为自己是查询器,向本地网段内的所有主机和路由器发送普遍组查询报文。其他路由器在收到该报文后,将报文的源IP地址与自己的接口地址作比较。IP地址最小的路由器将成为查询器,其他路由器成为非查询器。如图所示,RTA的接口IP地址小于RTB的接口IP地址,则RTA当选为查询器。 IGMP的查询器和非查询器都会处理IGMP组加入信息,但是只有查询器负责发送查 询报文。IGMP非查询器不处理IGMPv2离开报文。
所有非查询器上都会启动一个定时器。如果在该定时器超时前收到了来自查询器的 查询报文,则重置该定时器;否则就认为原查询器失效并发起新的查询器选举。
IGMPv2组成员离开:
如图所示,在IGMPv2中,Client B离开组播组G2的过程如下:
① Client B向本地网段内的所有组播路由器(目的地址为224.0.0.2)发送针对组 G2的离开报文。
② 查询器收到离开报文,会发送针对G2的特定组查询报文,同时启动组成员关 系定时器Timer-Membership=发送间隔x发送次数。缺省每隔1秒发送一次,一 共发送两次,发送间隔和发送次数可以配置。
③ 如果网段内不存在其他组G2的成员,则路由器不会收到组G2的成员报告报文。 在Timer-Membership超时后,删除组播转发表项中对应的下游接口。路由器 将不再向该网段转发G2的组播数据。如果网段内还有G2的其他成员,则这些 成员在收到特定组查询报文后,会在最大响应时间内发送G2的成员报告报文。 路由器继续向该网段转发G2的组播数据。
比较:
IGMPv1报文:
版本:包含IGMP版本标识,因此设置为1。
类型:普遍组查询 (0x11),成员关系报告 (0x12)。
组地址:普遍组查询报文中,组地址为0;成员关系报告报文中,组地址为成 员想要加入的组播组的地址。
IGMPv2报文:IGMPv2报文与IGMPv1报文略有不同,它取消了版本字段,增加了最大响应时间字段。
类型:相比于IGMPv1,IGMPv2新增了两种报文:
特定组查询报文(0x11):查询器向共享网段内指定组播组发送的查询 报文,用于查询该组播组是否存在成员。
成员离开报文(0x17):成员离开组播组时主动向路由器发送的报文, 用于宣告自己离开了某个组播组。
最大响应时间:表示主机响应查询返回报告的最大时间。
对于普遍组查询,最大响应时间默认为10秒。
对于特定组查询,最大响应时间默认为1秒。
组地址:
普遍组查询报文中,组地址设置为0。
特定组查询报文中,组地址为需要查询的组地址。
在成员报告或离开组的消息中,组地址为需要报告或离开的组地址。
配置:
配置一版本一相同,将version 1 改为version 2
IGMPv1与v2的互操作性
版本2的主机加入版本1的,会发送版本一的报告
v1的主机加入v2的,主机只发送v1的报告,但是v2的路由器设置一个与组相关的并考虑到v1主机存在的倒数计时器,用于通知局域网有一个v1的主机是组成员
当整个网络既有v1的主机和路由,也有v2的主机和路由,v2的路由会降级称为v1,v2的主机发送v1的报告
IGMPv3概述:
服务于source specific multicast(SSM)模型
允许主机指定接收某些网络发送的某些组播组
增强了主机的控制能力,不仅可以指定组播组,还能指定组播的源
路由器周期性的向224.0.0.1发送查询
与IGMPv2相比,IGMPv3报文的变化如下:
IGMPv3报文包含两大类:查询报文和成员报告报文。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中报文数量大大减少。
IGMPv3改进之处:
二层中组播数据转发的问题:
主机加入组播组需要向上游设备发送IGMP成员报告,这样上游设备才可以将组播报 文发送给主机。由于IGMP报文是封装在IP报文内,属于三层协议报文,而二层设备 不处理报文的三层信息,所以主机加组的过程二层设备并不知道,而且通过对数据 链路层数据帧的源MAC地址的学习也学不到组播MAC地址(数据帧的源MAC地址不 会是组播MAC地址)。
这样当二层设备在接收到一个目的MAC地址为组播MAC地址的数据帧时,在MAC地 址表中就不会找到对应的表项。那么这时候,它就会采用广播方式发送组播报文, 这样一来不但对网络资源造成的极大浪费而且影响网络安全。
IGMP Snooping机制的提出,解决了二层组播泛洪问题,
IGMP Snooping概述:
解决组播报文在二层广播问题
运行在链路层,是二层以太网交换机上的组播约束机制,用于管理和控制组播组
通过监听主机发送的IGMP报文,建立组播MAC地址表
IGMP Snooping工作机制:
当二层以太网交换机收到主机和路由器之间传递的IGMP报文时,IGMP Snooping分析报文所带的信息:
如果主机发出IGMP主机报告时,交换机将该主机加入相应的组播表中
如果主机发出IGMP离开报文时,交换机将删除与该主机对应的组播表项
通过不断监听IGMP报文,交换机在二层建立和维护组播MAC地址表,交换机根据组播MAC地址表转发路由器下发的组播报文
工作原理:
IGMP Snooping可以实现组播数据帧在数据链路层的转发和控制。
使能IGMP Snooping功能后,二层设备会侦听主机和路由器之间交互的IGMP报文。 通过分析报文中携带的信息(报文类型、组播组地址、接收报文的接口等),建立 和维护二层组播转发表,从而指导组播数据帧在数据链路层按需转发。
IGMP Snooping建立和维护二层组播转发表的过程:
① RTA作为查询器,周期性的发送普遍组查询,该报文被扩散到交换机的所有 端口,包括与交换机CPU相连的内部接口0。交换机CPU收到查询报文后,判 断1号接口为连接路由器的接口。
② Client B希望加入组播组224.1.2.3,因此以组播方式发送一个IGMP成员报告 报文,报告中具有目的MAC地址0x0100.5e01.0203。最初转发表上没有这个 组播MAC地址的表项,所以该报告被扩散到交换机的所有接口,包括与交换 机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)。
配置:
vlan 2
port Ethernet 1/0/5 to Ethernet 1/0/8
igmp-snooping enable
试验:
配置好IP,实现互通
路由器:
]multicast routing-enable
]int g 0/0/0
igmp enable
igmp version 2
交换机:
int g 0/0/2
port link-type access
port default vlan 2
int g0/0/1
port link-type access
port default vlan 2
q
igmp-snooping enable
vlan 2
igmp-snooping enable