组播地址:224.0.0.0 240.255.255.255
组播地址作用:1,标识某一个组播应用/组播业务
2,代表接收这种组播业务的所有主机
组播IP报文的DIP由组播业务/组播应用事先确定
SIP就是发送该组播报文的主机IP
224.0.0.1:所有主机包括路由器
224.0.0.2:所有组播路由器
组播IP与组播MAC映射:
1,组播IP有5个bit在组播MAC地址中无法映射,导致32个组播IP共享一个组播MAC的问题
2,避免组播地址冲突,规划时应保证最后23bit不冲突即可
组播IP分类:
ASM:任意源组播地址
仅通过组地址来区分不同的组播业务,即不同的组播业务得分配不同的组播地址,组播地址利用率不高。
客户端无需维护组播的信息,客户端开发难度低
SSM:指定组播地址
如果客户端可以选择加入的组地址,也可以选择加入的源地址,则部署SSM模型
特点,不同的源可以使用相同的组地址提供不同的组播服务,提供组播地址利用率是客户端需要事先维护所有对应关系
01-00-5E-0 仅仅只是组播MAC地址中用来为IPv4组播地址做映射用的一段子集
IGMP协议运行在组播路由器和主机之间
作用:
主机侧,通告IGMP协议向路由器通告组成员关系
路由器侧,通告IGMP协议维护组成员关系
默认所有报文TTL值都为1
IGMPV1:
IGMPv1支持两种类型的报文:
@普遍组查询报文(General Query): 路由器周期性的向224.0.0.1地址发送通用组查询报文,默认60s发送一次普遍组查询
@成员关系报告报文(Membership Report): 用于主机加入某个组
如图所示,假设A要接收G1组数据,B要接收组G2数据,响应过程如下:
路由器A发送普遍组查询报文
网段内所有主机接收该查询报文,在本地启动定时器Timer-G1,B是组G2成员,在本地启动定时器Timer-G3,定时器范围是0~10s的随机值
响应抑制机制 :定时器先超时的主机向路由器A发送成员报告报文目的地址G1,同组的B接收到同组的A的成员报文报文后停止计时器,
不发送成员报告报文,
当有新PC进入需要加组时,不等待普遍组查询报文,直接发送成员报告报文
当有主机离组时,静默离开,超时130s停止发送组播流量
IGMPv1缺点:
问题一:当有PC需要离开组时,静默离开,60s+60s超时时间+10s最大等待时间,被动等待130s才停止流量下发
问题二:当同一网段有多台路由器,路由器会不知道谁是查询器。需要运行PIM协议在路由器之间发送hello包选举DR来充当IGMPv1的查询器,2
只有一台路由器时也需要运行PIM协议
问题三:路由器不能控制组成员响应时间
IGMPv2:
对于IGMPv1改进:
1,基本原理与IGMPv1相同
2,增加离组报文,当组成员离开,会主动发送离组报文,目的IP为224.0.0.2
路由器收到离组报文,有两种反馈机制
1,检查离组报文的源地址是否是last reporter地址,如果是则发送特定组查询报文
2,检查离组报文的源地址是否是last reporter地址,如果不是则不发送特定组查询报文
IGMPv2拥有独立的查询器选举机制,接口IP地址小的成为查询器
所有IGMPv2路由器初始状态下都认为自己是查询器,向本网段所有主机和路由器发送普遍组查询报文,其他路由器收到后将源IP与自己的接口IP对比。
所有非查询器上都会启用一个定时器(默认为125s),如果在该定时器超时前收到了来自查询器的查询报文,则重置该定时器,
否则就认为原查询器失效并发起新的查询器选举
报文格式:
IGMPv3的客户端是针对ASM组播模型开发的协议,成员可以对组播源进行选择,并且也支持ASM模型,但实际应用较少,因为客户端维护难度较大
没有成员报告机制
IGMPv3与IGMPv2变化:
IGMP snooping :
原因 :组播数据在二层会被泛洪转发,造成网络资源浪费。
在交换机上 IGMP监听
工作机制:查询响应仅向路由器接口转发
交换机通过IGMP监听,生成一张组播转发表,包含三个信息
G地址/组播MAC地址 VLAN 成员端口
1,交换机需要确认路由器接口(交换机连接组播路由器的接口)
@交换机收到PIM协议的报文或者收到IGMP的查询报文的接口就认为是路由器端口
@管理员手动配置路由器端口
2,交换机需要确定哪些端口存在哪些组成员,即成员端口
@监听成员发送的报告报文,报告报文中携带的组地址
@管理员手动配置
3,交换机在路由器接口收到普遍组查询报文后向其他所有端口泛洪
4,主机收到查询报文后,回复报告报文,交换机收到报告报文后向路由器端口转发,不会泛洪,并将该端口加入到相应的组播转发表
交换机要知道所有成员所属端口就必须让该组所有成员都发送报告,要屏蔽掉查询报文的抑制机制
5,主机发送离组报文,交换机收到离组报文并不会立即删除该成员接口,离组报文向路由器端口转发。
路由器收到离组报文,发送特定组查询报文,交换机向成员端口泛洪,如果该端口在2s内没有收到报告报文,则删除该成员端口
如果收到成员报告,重置成员端口的老化时间
IGMP配置:
全局下启用组播路由功能:
接口下开启igmp:
手动配置将路由器接口加入组播组命令:igmp static-group 239.1.1.100
IGMP SSM Maping
1,为IGMPv1主机和IGMPv2主机提供SSM服务
2,通过在路由器上静态配置SSM地址的映射规则,将IGMPv1和IGMPv2报告报文中的(*,G)信息转化为对应的(S,G)信息
配置了SSM Mapping规则后,当IGMP查询器收到来自成员主机的IGMPv1或IGMPv2报告报文时,
首先检查该报文中所携带的组播组地址G,然后根据检查结果的不同分别进行处理:
如果G在ASM(Any-Source Multicast)范围内,则只提供ASM服务(因为在公网中规定了ASM是运行任意组播源的)。
如果G在SSM组地址范围内(缺省情况下为232.0.0.0~232.255.255.255)。
• 如果路由器上没有G对应的SSM Mapping规则,则无法提供SSM服务,丢弃该报文。
• 如果路由器上有G对应的SSM Mapping规则,则依据规则将报告报文中所包含的(*, G)信息映射为(G, INCLUDE, (S1, S2…))信息,提供SSM服务。
配置:
igmp ssm-mapping enable
然后在igmp模式下配置ssm-mapping
igmp
ssm-mapping 232.0.0.0 255.255.255.0 172.16.1.1 //将232.0.0.0/24范围内的组播地址转换为匹配到 172.16.1.1的源。
IGMP Proxy:
出现背景:现网中一台IGMP查询器需要管理大量组成员的情况
代理设备将成员关系报告/离开报文汇聚后统一上送给IGMP查询器