MLD Snooping
定义
MLD Snooping (Multicast Listener Discovery Snooping)是一种IPv6二层组播协议,通过侦听三层组播设备和用户主机之间发送的组播协议报文来维护组播报文的出端口信息,从而管理和控制组播数据报文在数据链路层的转发。
目的
与IPv4组播网络类似,在IPv6组播网络中,组播报文也要不可避免地经过一些二层交换设备,尤其是在局域网环境里。如图11-13所示,在组播用户和三层组播设备Router之间,经过二层交换机Switch。
当Router将组播报文转发至Switch以后,Switch负责将组播报文转发给组播用户。由于组播报文的目的地址为组播组地址,在二层设备上是学习不到这一类MAC表项的,因此组播数据报文就会在所有接口进行广播,和它在同一广播域内的组播成员和非组播成员都能收到组播数据报文。这样不但浪费了网络带宽,而且影响了网络信息安全。
MLD Snooping有效地解决了这个问题。MLD Snooping是在IPv6组播网络中使用的二层组播协议。配置MLD Snooping后,二层组播设备可以侦听和分析组播用户和上游路由器之间的MLD报文,根据这些信息建立二层组播转发表项,控制组播数据报文转发。这样,就防止了组播数据在二层网络中的广播。
基本原理
MLD Snooping是IPv6二层组播的基本功能,可以实现组播数据在数据链路层的转发和控制。当主机和上游三层设备之间传递的MLD协议报文通过二层设备时,MLD Snooping分析报文携带的信息,根据这些信息建立和维护二层组播转发表,从而指导组播数据在数据链路层按需转发。
如图11-14所示,在IPv6组播网络中,当组播数据从三层组播设备Router转发下来以后,处于接入边缘的二层设备Switch负责将组播信息转发给用户,使用户收看所点播的节目。当二层设备没有运行MLD Snooping时,组播数据在二层被广播;当二层设备运行了MLD Snooping后,已知组播组的组播数据不会在二层广播,而是会被组播发送给指定的接收者。
使能MLD Snooping功能后,二层设备会侦听主机和上游三层设备之间交互的MLD报文,通过分析报文中携带的信息(报文类型、组播组地址、接收报文的接口等),建立和维护二层组播转发表,从而指导组播数据在数据链路层按需转发。
基本概念
如图11-15所示,三层设备Router连接组播源,在二层设备SwitchA和SwitchB上分别运行MLD Snooping,HostA、HostB和HostC为接收者主机(即组播组成员)。
结合图11-15,介绍MLD Snooping中相关端口的概念。
端口角色 |
作用 |
如何生成 |
---|---|---|
路由器端口(Router Port) 如SwitchA和SwitchB上蓝色圆圈表示的接口。 说明:
路由器端口都是指二层设备上连接组播路由器的接口,而不是指路由器上的接口。 |
二层设备上连接上游三层组播设备(DR或MLD查询器)一侧的接口,二层设备从此接口接收组播数据报文。 |
|
成员端口(Member Port) 如SwitchA和SwitchB上黄色方框表示的接口。 |
又称组播组成员端口,表示二层设备上连接下游组播组成员一侧的端口,二层设备往此接口发送组播数据报文。 |
|
路由器端口和成员端口在二层组播转发表项中用作出接口。其中路由器端口相当于上游接口,成员端口相当于下游接口。通过协议报文学习到的端口,对应的为动态表项;而手工配置的端口,对应的为静态表项。
- 组播组地址,可以为组播IP地址,也可以为组播IP地址映射后的组播MAC地址。按照IP地址转发的模式可以避免MAC地址转发模式中的地址重复问题。
- VLAN编号,指定了二层广播域范围。如果使用了组播VLAN功能,入VLAN编号为组播VLAN的编号,出VLAN编号为主机所在的用户VLAN编号。否则入VLAN编号和出VLAN编号均为主机所在VLAN的编号。
工作机制
二层设备运行了MLD Snooping后,收到不同的MLD协议报文会进行不同的处理,并在此过程中建立起二层组播转发表项。
MLD工作阶段 |
二层设备收到的报文类型 |
处理方式 |
---|---|---|
普遍组查询 MLD查询器定期向本地网段内的所有主机与路由器(FF02::1)发送MLD普遍组查询报文,以查询该网段有哪些组播组的成员。 |
MLD普遍组查询报文 |
向VLAN内除接收接口外的其他所有接口转发,并对接收接口做如下处理:
|
成员报告关系 有两种情况:
|
MLD报告报文 |
向VLAN内所有路由器端口转发。从报文中解析出主机要加入的组播组地址,并对接收接口做如下处理:
说明:
动态成员端口的老化定时器=健壮系数 ×普遍组查询间隔 + 最大响应时间。 |
成员离开组播组 有两个阶段:
|
MLD离开报文 |
判断离开的组是否存在对应的转发表项,以及转发表项出接口列表是否包含报文的接收接口:
对于MLD离开报文的接收接口(假定为动态成员端口),二层设备在其老化时间内:
|
MLD最后侦听者查询报文/MLD特定源组查询报文 |
向有特定组成员的接口转发。 |
- 如果路由器端口列表中已包含该动态路由器端口,则重置老化定时器。
- 如果路由器端口列表中尚未包含该接口,则将其添加进去,并启动老化定时器。
收到IPv6 PIM Hello报文时,动态路由器端口的老化时间为Hello报文中Holdtime字段的值。
如果是静态配置路由器端口,二层设备收到MLD报告和离开报文也会向静态路由器端口转发。如果配置了静态成员端口,则转发表项中会添加该接口为出接口。
当二层设备上建立了二层组播转发表项以后,二层设备接收到组播数据报文时,依据报文所属VLAN和报文的目的地址(即IPv6组播组地址)查找转发表项是否存在对应的“出接口信息”。如果存在,则将报文发送到所有组播组成员端口;如果不存在,则丢弃该报文或将报文在VLAN内广播。
MLD Snooping Proxy
基本原理
为了减少上游三层设备收到的MLD报告报文和MLD离开报文的数量,可以在二层设备上部署MLD Snooping Proxy功能,使其能够代理下游主机来向上游设备发送成员关系报告报文。配置了MLD Snooping Proxy功能的设备称为MLD Snooping代理,在其上游设备看来,它就相当于一台主机;在其下游设备看来,它相当于一台查询器。
如图11-16所示,当Switch上运行MLD Snooping时,Switch对上游Router的查询报文和下游主机的报告/离开报文都是原封不动地转发。当网络中存在大量用户主机时,冗余的MLD报文给上游设备带来处理压力。
当Switch上配置MLD Snooping Proxy时,Switch可以终结上游的MLD查询报文,并且自己构造查询报文向下游主机发送;终结下游主机的MLD报告/离开报文,并自己构造统一的报告/离开报文向上游发送。
部署MLD Snooping Proxy后,三层设备会感知到下面只有一个用户,二层设备直接跟下游用户和上游三层设备进行对话,而不再是一个完全透明的转发角色。MLD Snooping Proxy有效减少MLD协议在网络中的交互程度,节约带宽;有效屏蔽来自下游主机的大量协议报文,并接管了对主机的查询器功能,分担上游三层设备的性能负荷。
工作机制
运行MLD Snooping Proxy的设备会参与二层组播转发表的建立和维护,依据转发表向有需要的用户主机发送组播数据。MLD Snooping代理设备对MLD报文的处理方式如表11-4所示。
MLD报文类型 |
处理方式 |
---|---|
MLD普遍组查询报文 |
向本VLAN内除接收接口以外的所有接口转发;同时根据本地维护的组成员关系生成报告报文,向所有路由器端口发送。 |
MLD最后侦听者查询报文/MLD特定源组查询报文 |
若该组对应的转发表项中还有成员端口,则向所有路由器端口回复该组的报告报文。 |
MLD报告报文 |
|
MLD离开报文 |
向接收接口发送针对该组的特定组查询报文。只有当删除某组播组对应转发表项中的最后一个成员端口时,才会向所有路由器端口发送该组的离开报文。 |