IP组播---IGMP、MLD、IGMP SSM Mapping、IGMP Snooping详解
简介
Internet Group Management Protocol
互联网组管理协议,负责IPv4组播成员管理的协议
在接收者主机和组播路由器之间交互IGMP报文实现组成员的管理功能,建立、维护组播组成员关系。
IGMP报文封装在IP报文中
三个版本:IGMPv1、IGMPv2、IGMPv3 默认v2
- IGMPv3可以直接应用于SSM模型
- 而IGMPv1、IGMPv2需要IGMP SSM Mapping技术支持才可以应用于SSM模型
一、IGMPv1工作原理
两种报文
1.普遍组查询报文(General Query):查询器向共享网络上的所有主机和路由器发送查询报文,了解哪些组播组存在成员
2.成员报告报文(Report):主机向查询器发送的报告报文,用于申请加入某个组播组或者应答查询报文
IGMPv1报文格式
64bit
Version(3bit) + Type(4bit) + Unused(8bit) + Checksum(16bit) + Group Address(32bit)
字段 | 说明 |
---|---|
Version | IGMP版本 |
Type | 报文类型两种取值:0x1普遍组查询报文;0x2成员报文报文 |
Unused | IGMPv1中为0 |
Checksum | 校验和,校验IGMP报文长度 |
Group Address | 组播组地址,普遍组查询报文中为0、成员报告报文中该字段为成员加入的组播组地址 |
工作机制
1.查询机制
路由器侧完成(查询器)
发送目的IP为224.0.0.1的普遍组查询报文(周期60s)
multicast routing-enable //激活组播路由功能
int g0/0/1 //进入连接成员的接口
pim sm //用于选举查询器
igmp enable //激活IGMP
igmp version 1 //修改版本(默认为版本2)
v1版本,默认不自动选举查询器
- 由PIM协议的DR充当
- DR选举规则:先比较优先级,再比较IP地址,越大越优
普遍组查询报文内容
-
Version=1
-
Type=0x2
-
Group Address=0.0.0.0
2.响应机制
1.主动响应
- 成员主动向上发送成员报告报文
- 成员报告报文内容
- 加入的组播组地址
- 成员报告报文内容
2.被动响应
- 成员收到普遍组查询报文后才发送成员报告报文
- 成员报告报文内容:
- 加入的组播组地址
- 查询器的IP地址
- 成员报告报文内容:
- 被动响应存在响应抑制机制
- 接受者收到普遍组查询报文后,开启定时器(定时器时间随机在1-10s内选择),定时器超时后才会发送成员报告报文
- 定时器为超时
- 收到相同组的成员报告报文,执行响应抑制,不发送成员报告报文
- 收到不同组的成员报告报文,继续等待定时器超时
- 定时器为超时
- 响应抑制机制可以减少成员报告报文的交互
- 接受者收到普遍组查询报文后,开启定时器(定时器时间随机在1-10s内选择),定时器超时后才会发送成员报告报文
3.离开机制
静默离开
- 成员离组不会发送任何报文
查询器会维护该组成员关系,130s后,老化,删除
- 130s:2*普遍组查询时间120s + 响应抑制时间10s
在130s内组播路由器会一直下发该组流量,造成浪费
缺点:浪费带宽资源
IGMPv1存在的问题
1.自身不选举查询器,需要依赖PIM协议
2.静默离开
3.响应时间范围太小
二、IGMPv2工作原理
IGMPv2工作流程与IGMPv1大体一致
四种报文
1.普遍组查询报文(General Query)
2.成员报告报文(Report)
3.成员离开报文(Leave):宣告自己离开某个组播组,成员离开组播组时主动向查询器发送
4.特定组查询报文(Group-Specific Query):查询某个组播组是否还存在成员,查询器向共享网段内指定组播组发送的查询报文
IGMPv2报文格式
Type(8bit) + Max Response Time(8bit) + Checksum(16bit) + Group Address(32bit)
-
Type:报文类型
- 0x11:查询报文,普遍组查询报文或特定组查询报文
- 0x12:IGMPv1成员报告报文
- 0x16:IGMPv2成员报告报文
- 0x17:成员离开报文
-
Max Response Time:最大响应时间
- 成员主机收到普遍组查询报文后,需要在最大响应时间内做出回应
- 仅在IGMP查询报文中有效
工作机制
IGMPv2针对IGMPv1的三个问题都做了改进
1.查询机制
周期60s发送查询报文
自身选举查询器(改进一)
- 通过发送查询报文选举
- 选举规则:IP地址越小越优
- 选举完成后,竞选失败的成为非查询器;非查询器会开启一个定时器(125s);在定时器超时前收到查询器的查询报文,则重置定时器,否则认为原查询器失效,重新发起查询器选举
新增特定组查询报文
- 作用:配置成员离开报文,加快收敛
- 触发条件:收到成员离开报文后,发送
- 发送间隔:1s一次,共两次;
- 如果两次都没收到任何回应删除该组
2.响应机制
与IGMPv1一致
报文中新增最大响应时间(改进二)
-
可以控制响应抑制时间;可以根据局域网的网络环境灵活的修改最大响应时间,可以适应多用户主机的局域网环境。
-
##查询器侧修改 interface g0/0/1 igmp max-reponse-time 5 ##修改最大响应时间为5.0s
-
用户主机收到查询报文,需要在报文内的最大响应时间内随机选取时间进行回应
- 最大响应时间范围:1.0s--25.0s,间隔0.1s
- 特定组查询报文最大响应时间为1.0s,不可改
问题一:普遍组查询报文与特定组查询报文区别?
1.报文max-reponse-time字段不一致
2.目的IP不一致,普遍组查询报文目的IP时224.0.0.1;特定组查询报文针对特定的组播组IP
3.普遍组查询报文周期60s发送;特定组查询报文收到last report的离组报文才会发送
问题二:什么时候需要讲最大响应抑制时间调大,调小?
响应时间调小,加快接收者响应,应用在接收者少的情况下
响应时间调大,减少响应时间重复概率
3.离开机制
新增成员离组报文(改进三)
每台成员主机在离开组播组时,都会发送成员离组报文,报文内容包含要离开组播组的组IP
三、IGMPv3工作原理
IGMPv3用于SSM模型,接收者需要使用232.0.0.0-232.255.255.255组播组地址
四种报文
A.三种查询报文
- 普遍组查询报文
- 特定组查询报文
- 特定源组查询报文(Group-and-Source-Specific Query):查询该组成员是否愿意接收特定源发送的数据,在报文中携带一个或多个组播源地址
B.一种报告报文
-
成员报告报文
-
不仅包含主机想要加入的组播组,而且包含主机想要接收来自哪些组播源的数据
-
一个成员报告报文可以携带多个组播组信息
-
无成员离组报文,成员离组通过特定的类型的成员报告报文传达
IGMPv3报文格式
1.查询报文
- Type:类型;0x11
- Max Resp Code:最大响应时间;成员主机要在最大响应时间内做出回应
- Group Address:组播组地址;普遍组查询报文中为0
- Resv:保留字段;0
- S:接收到此查询报文的其他路由器不启动定时器刷新功能;1
- 选举DR完成后,未被选举上的路由器不会开启定时器
- QRV:查询器健壮系数
- QQIC:查询间隔
- Source Address:组播源地址;受Number of Source字段限制
2.报告报文
- Type:类型;0x22
- Group Record:组记录(成员加组方式)
Group Record详解
-
Record Type:组记录的类型;三大类
- 当前状态报告:对查询报文响应,通告目前状态和想要接收的组播源流量
- mode_is _include:只接收源地址列表包含的组播源的流量
- mode_is _exclude:只接受源地址列表不包含组播源的流量
- 源地址列表:查询报文中Source Address字段
- 过滤模式改变报告:当组和源的关系在include和exclude切换时,通告变化
- change_to_include_mode:由exclude转换到include
- change_to_exclude_mode:由include转换到exclude
- 源列表改变报告
- allow_new_sources:在原有源地址列表基础上新增组播源地址
- 如果是include状态,则在源地址列表增加新的组播源地址
- 如果是exclude状态,则在源地址列表删除组播源地址
- block_old_sources:在原有源地址列表基础上排除组播源地址
- allow_new_sources:在原有源地址列表基础上新增组播源地址
- 当前状态报告:对查询报文响应,通告目前状态和想要接收的组播源流量
-
Aux Data Len:辅助数据长度
-
Auxiliary Data:辅助数据;预留给IGMP后续扩展
工作机制
与IGMPv2几乎一致,IGMPv3增加了主机对组播源的选择能力
并且IGMPv3取消了响应抑制机制,因为有特定的组播源,所以成员主机可能会接受同一组播IP当不同源设备的流量,存在相同组播组地址有不同组播源的情况;
- 如果采用响应抑制机制,如果两台成员主机对同组播组地址但不同组播源发送成员报告报文。那么一成员主机会抑制另一成员主机对不同组播源的Report信息
1.特定源组加入
成员主机发送IGMPv3报告(G1,include,(S1))给查询器:表示仅接收源S1、组G1的组播数据
成员主机发送IGMPv3报告(G2,exclude,(S2))给查询器:表示不接收源S2、组G2的组播数据
2.特定源组查询
查询器接收到成员主机发送的 change_to_include_mode或change_to_exclude_mode 后,查询器发送特定源组查询报文(更新源地址列表)
四、IGMP Snooping
作用:避免组播流量在二层设备泛洪,只让组播流量从特定的接口转发出去
缺点:安全性无法的到保障
过程:通过窥探组播路由器和接收者之间交互的IGMP报文,形成二层转发表项,后续组播流量就会按照组播转发表项从指定接口转发出去
开启IGMP snooping,响应抑制机制失效
角色
-
路由器端口:收到IGMP普遍组查询消息或者PIM hello消息感知路由器端口
- 也可以手动指定路由器端口
-
成员端口:收到IGMP Report报文的接口被认为是动态成员端口
- 也可以手动配置成员端口
配置
igmp-snooping enable ##开启IGMP snooping
igmp-snooping enable vlan 1 ##vlan 1使能IGMP snooping
display l2-multicast forwarding-table vlan 1 ##查看二层组播转发表
##静态绑定接口为路由器端口
interface e0/0/5
igmp-snooping static-router-port vlan 1
##静态绑定接口为成员端口,加入组239.1.1.1
interface e0/0/4
l2-multicast static-group group-address 239.1.1.1 vlan 1
五、IGMP SSM MAPPING
成员主机只能运行IGMPv1或者IGMPv2,为了使其能使用SSM服务,路由器上需要提供IGMP SSM Mapping功能**
实现方式:通过在路由器上静态配置SSM地址的映射规则,将IGMPv1和IGMPv2成员报告报文中的(*,G)转化为对应的(S,G)信息,提供SSM组播服务
- 如果G是在ASM范围内,只提供ASM服务
- 如果G是在SSM组地址范围内(232.0.0.0--232.255.255.255)
- 路由器上有G对应的SSM Mapping规则,依据规则将成员报告报文中的(*,G)信息映射为(G,INCLUDE,(S1,S2))信息,提供SSM服务
- 路由器上没有G对应的SSM Mapping规则,则无法提供SSM服务,丢弃报文
配置
##路由器上进入与成员主机同一局域网的端口,开启SSM Mapping
interface G0/0/1
igmp enable
igmp version 3 ##使用igmpv3,为了保证接口网段内运行任意版本IGMP的成员主机都能得到SSM服务
igmp ssm-mapping enable
##路由器上配置SSM Mapping规则
igmp
ssm-mapping 232.1.1.0 255.255.255.0 200.1.1.1
##查看SSM Mapping转换规则
display igmp routing-table
六、IGMP Proxy
通常被部署在与接入设备和成员主机之间的三层设备
场景:与用户网段相连设备RouterB不需要运行复杂的组播协议(如PIM),如果RouterB透传IGMP报文给RouterA,会导致RouterA管理太多用户。当网络中存在大量成员主机的加组/离组,产生大量的IGMP报文,从而给RouterA带来较大的处理能力
作用:
- IGMP Proxy设备可以收集下游成员主机的IGMP报告/离开报文,同时将IGMP报告/离开报文汇总后统一发给接入IGMP查询器
- IGMP Proxy设备也可以代理IGMP查询器向下游成员主机发送查询报文,维护组成员关系,基于组成员关系进行组播转发
IGMP Proxy中定义两种类型接口
- 上游接口(主机接口):指IGMP代理设备上配置IGMP Proxy功能的接口,该接口执行IGMP代理设备的主机行为
- 下游接口(路由器接口):IGMP代理设备上配置IGMP功能的接口,该接口执行IGMP代理设备的路由器行为
七、MLD组播侦听者发现协议
Multicast Listerer Discovery
MLD可以理解为IGMP的IPv6版本,两者的协议行为完全相同,区别仅仅在于报文格式
MLD报文封装在IPv6报文中
定义:用来在IPv6成员主机和与其直接相邻的组播路由器之间建立和维护组播组成员关系
版本
- MLDv1,对应IGMPv2
- MLDv2,对应IGMPv3
1.MLDv1
用于ASM,接收者不能指定源加入组
报文类型
- 普遍组查询报文
- 报文发送目的地址为:FF02::1;周期125s,查询器失效时间255s
- 特定住查询报文
- 成员报告报文
- 成员离组报文
报文格式
报文长度:192bit
- Type:=130查询报文;=131成员报告报文;=132成员离开报文
配置
ipv6 ##使能ipv6
multicast ipv6 routing-table ##使能ipv6组播
interface g0/0/0
ipv6 enable
ipv6 address 2001::1/64
mld enable ##使能MLD
mld version 1
mld static-group FF1E::AA ##静态加组FF1E::AA
2.MLDv2
用于SSM模型,接收者可以在加入组时指定特定源以及过滤特定源
报文类型
两大类
查询报文(type=130)
- 普遍组查询报文
- 发送目的地址:FF02::16(本网段内所有是能MLDv2的路由器都能接收)
- 特定组查询报文
- 特定源组查询报文
报告报文(type=143)
- 成员报告报文
报文格式