标题：MLD snooping
MLD Snooping协议简介
MLD Snooping是Multicast Listener Discovery Snooping（组播侦听者发现协议窥探）的简称。它是运行在二层设备上的IPv6组播约束机制，用于管理和控制IPv6组播组。MLD Snooping原理运行MLD Snooping的二层设备通过对收到的MLD报文进行分析，为端口和MAC组播地址建立起映射关系，并根据这样的映射关系转发IPv6组播数据。
如图 1所示，当二层设备没有运行MLD Snooping时，IPv6组播数据报文在二层被广播；当二层设备运行了MLD Snooping后，已知IPv6组播组的组播数据报文不会在二层被广播，而在二层被组播给指定的接收者。
MLD Snooping通过二层组播将信息只转发给有需要的接收者，可以带来以下好处：
l              减少了二层网络中的广播报文，节约了网络带宽；
l              增强了IPv6组播信息的安全性；
l              为实现对每台主机的单独计费带来了方便。MLD Snooping基本概念1. MLD Snooping相关端口如图 2所示，Router A连接组播源，在Switch A和Switch B上分别运行MLD Snooping，Host A和Host C为接收者主机（即IPv6组播组成员）。
l              路由器端口（Router Port）：交换机上朝向三层组播设备（DR或MLD查询器）一侧的端口，如Switch A和Switch B各自的Ethernet1/1端口。交换机将本设备上的所有路由器端口都记录在路由器端口列表中。
l              成员端口（Member Port）：又称IPv6组播组成员端口，表示交换机上朝向IPv6组播组成员一侧的端口，如Switch A的Ethernet1/2和Ethernet1/3端口，以及Switch B的Ethernet1/2端口。交换机将本设备上的所有成员端口都记录在MLD Snooping转发表中。
l    本文中提到的路由器端口都是指交换机上朝向组播路由器的端口，而不是指路由器上的端口。
l    如不特别指明，本文中提到的路由器/成员端口均包括动态和静态端口。
l    在运行了MLD Snooping的交换机上，所有收到源地址不为0::0的MLD普遍组查询报文或IPv6 PIM Hello报文的端口都将被视为动态路由器端口。
2. MLD Snooping动态端口老化定时器表 1 MLD Snooping动态端口老化定时器
定时器
说明
超时前应收到的报文
超时后交换机的动作
动态路由器端口老化定时器
交换机为其每个动态路由器端口都启动一个定时器，其超时时间就是动态路由器端口老化时间
源地址不为0::0的MLD普遍组查询报文或IPv6 PIM Hello报文
将该端口从路由器端口列表中删除
动态成员端口老化定时器
当一个端口动态加入某IPv6组播组时，交换机为该端口启动一个定时器，其超时时间就是动态成员端口老化时间
MLD成员关系报告报文
将该端口从MLD Snooping转发表中删除

MLD Snooping端口老化机制只针对动态端口，静态端口永不老化。
MLD Snooping工作机制运行了MLD Snooping的交换机对不同MLD动作的具体处理方式如下：
本节中所描述的增删端口动作均只针对动态端口，静态端口只能通过相应的配置进行增删。
1. 普遍组查询MLD查询器定期向本地网段内的所有主机与路由器（FF02::1）发送MLD普遍组查询报文，以查询该网段有哪些IPv6组播组的成员。
在收到MLD普遍组查询报文时，交换机将其通过VLAN内除接收端口以外的其它所有端口转发出去，并对该报文的接收端口做如下处理：
l              如果在路由器端口列表中已包含该动态路由器端口，则重置其老化定时器。
l              如果在路由器端口列表中尚未包含该动态路由器端口，则将其添加到路由器端口列表中，并启动其老化定时器。
2. 报告成员关系以下情况，主机会向MLD查询器发送MLD成员关系报告报文：
l              当IPv6组播组的成员主机收到MLD查询报文后，会回复MLD成员关系报告报文。
l              如果主机要加入某个IPv6组播组，它会主动向MLD查询器发送MLD成员关系报告报文以声明加入该IPv6组播组。
在收到MLD成员关系报告报文时，交换机将其通过VLAN内的所有路由器端口转发出去，从该报文中解析出主机要加入的IPv6组播组地址，并对该报文的接收端口做如下处理：
l              如果不存在该IPv6组播组所对应的转发表项，则创建转发表项，将该端口作为动态成员端口添加到出端口列表中，并启动其老化定时器；
l              如果已存在该IPv6组播组所对应的转发表项，但其出端口列表中不包含该端口，则将该端口作为动态成员端口添加到出端口列表中，并启动其老化定时器；
l              如果已存在该IPv6组播组所对应的转发表项，且其出端口列表中已包含该动态成员端口，则重置其老化定时器。
交换机不会将MLD成员关系报告报文通过非路由器端口转发出去，因为根据主机上的MLD成员关系报告抑制机制，如果非路由器端口下还有该IPv6组播组的成员主机，则这些主机在收到该报告报文后便抑制了自身的报告，从而使交换机无法获知这些端口下还有该IPv6组播组的成员主机。
3. 离开组播组当主机离开IPv6组播组时，会通过发送MLD离开组报文，以通知组播路由器自己离开了某个IPv6组播组。当交换机从某动态成员端口上收到MLD离开组报文时，首先判断要离开的IPv6组播组所对应的转发表项是否存在，以及该IPv6组播组所对应转发表项的出端口列表中是否包含该接收端口：
l              如果不存在该IPv6组播组对应的转发表项，或者该IPv6组播组对应转发表项的出端口列表中不包含该端口，交换机不会向任何端口转发该报文，而将其直接丢弃；
l              如果存在该IPv6组播组对应的转发表项，且该IPv6组播组对应转发表项的出端口列表中包含该端口，交换机会将该报文通过VLAN内的所有路由器端口转发出去。同时，由于并不知道该接收端口下是否还有该IPv6组播组的其它成员，所以交换机不会立刻把该端口从该IPv6组播组所对应转发表项的出端口列表中删除，而是重置其老化定时器。
当MLD查询器收到MLD离开组报文后，从中解析出主机要离开的IPv6组播组的地址，并通过接收端口向该IPv6组播组发送MLD特定组查询报文。交换机在收到MLD特定组查询报文后，将其通过VLAN内的所有路由器端口和该IPv6组播组的所有成员端口转发出去。对于MLD离开组报文的接收端口（假定为动态成员端口），交换机在其老化时间内：
l              如果从该端口收到了主机响应该特定组查询的MLD成员关系报告报文，则表示该端口下还有该IPv6组播组的成员，于是重置其老化定时器；
l              如果没有从该端口收到主机响应该特定组查询的MLD成员关系报告报文，则表示该端口下已没有该IPv6组播组的成员，则在其老化时间超时后，将其从该IPv6组播组所对应转发表项的出端口列表中删除。MLD Snooping Proxying通过在边缘设备上配置MLD Snooping Proxying（MLD Snooping代理）功能，可以减少其上游设备收到的MLD报告报文和离开报文的数量，有效提高其上游设备的整体性能。配置了MLD Snooping Proxying功能的设备（称为MLD Snooping代理设备），在其上游设备看来，相当于一台主机；而在其下游主机看来，则相当于一台查询器。
尽管在其上游设备看来，MLD Snooping代理设备相当于一台主机，但主机上的MLD成员关系报告抑制机制在MLD Snooping代理设备上并不会生效。
作为MLD Snooping代理设备的Switch A，对其上游设备Router A来说是一台主机，代理下游主机向Router A发送报告报文和离开报文；而对其下游的主机来说则是一台查询器，代理Router A向下游主机发送普遍组查询报文和特定组查询报文，维护组成员关系。
MLD Snooping代理设备对MLD报文的处理方式如表 2所示。
表 2 MLD Snooping代理设备对MLD报文的处理方式
MLD报文类型
处理方式
普遍组查询报文
收到普遍组查询报文后，向本VLAN内除接收端口以外的所有端口转发；同时根据本地维护的组成员关系生成报告报文，并向所有路由器端口发送
特定组查询报文
收到针对某IPv6组播组的特定组查询报文时，若该组对应的转发表项中还有成员端口，则向所有路由器端口回复该组的报告报文
报告报文
从某端口收到某IPv6组播组的报告报文时，若已存在该组对应的转发表项，且其出端口列表中已包含该动态成员端口，则重置其老化定时器；若已存在该组对应的转发表项，但其出端口列表中不包含该端口，则将该端口作为动态成员端口添加到出端口列表中，并启动其老化定时器；若尚不存在该组对应的转发表项，则创建转发表项，将该端口作为动态成员端口添加到出端口列表中，并启动其老化定时器，然后向所有路由器端口发送该组的报告报文
离开报文
从某端口收到某IPv6组播组的离开报文后，向该端口发送针对该组的特定组查询报文。只有当删除某IPv6组播组对应转发表项中的最后一个成员端口时，才会向所有路由器端口发送该组的离开报文
交换机对IPv6组播协议报文的特殊处理规则支持MLD Snooping功能的交换机使能了三层IPv6组播路由后，在不同的情况下对各种IPv6组播协议报文的处理有所差异。具体规则如下：
(1)        如果交换机上只使能了MLD，或同时使能了MLD和IPv6 PIM，进行常规处理。
(2)        如果交换机上只使能了IPv6 PIM：
l              对于MLD报文，将其当作未知报文在VLAN内进行广播；
l              对于IPv6 PIM Hello报文，则会为其维护相应的动态路由器端口。
(3)        在交换机上关闭MLD时：
l              如果未使能IPv6 PIM，则删除所有动态成员端口和动态路由器端口；
l              如果已使能IPv6 PIM，则删除动态成员端口，只保留动态路由器端口。
(4)        在交换机上关闭IPv6 PIM时：
l              如果未使能MLD，则删除动态路由器端口；
l              如果已使能MLD，则保留所有动态成员端口和动态路由器端口。