IP组播是工作在第三层的,而一般的GPON系统是工作在第二层的,二层交换不能直接支持IP组播,因为它不能辨别输入数据的第三层信息的内容,当OLT和ONU收到IP组播报文时,区分不出是广播报文还是组播报文,直接将其广播出去。因此,要实现组播应用,GPON系统需要增加识别第三层信息的功能,使用IGMPSnooping和MLD可以有效地解决这个问题,即OLT和ONU中的处理模块必须具备管理基于IGMPSnooping协议的二层组播MAC地址表的功能。
在GPON中实现组播的基本思想是:在ONU和OLT端都建立一个组播MAC地址表,将组播MAC地址与用户主机端口相对应。在上行方向,用户通过机顶盒或主机发出希望加入组播组的报告,OLT查看组播地址表,决定是否将此报告转发给上层路由器;在下行方向,OLT接收来自路由器的组播信息,按照组播地址表的映射关系将信息发送给对应的ONU,ONU再决定将组播信息转发给特定的用户端口。
(1)加入组播组
主机1希望加入组播组224.1.2.3,并主动发送一个IGMP报告给该组,报告中显示的目的地址为0x0100.5E01.0203。ONU将这个地址写入组播地址表。这时如果STB1也希望加入组224.1.2.3,ONU将修改组播地址表,并把STB1要加入该组的IGMP信息转发到OLT。而在OLT中,在OLT接收到要求加入组224.1.2.3的IGMP协议帧后,查找组播表,若发现本GPON中已经建立了到组224.1.2.3的连接,则不再继续将这个请求转发到上层路由器,否则,发送Report消息给路由器,建立与该组播组的连接。可以看出,无论要加入的组播组的连接是否已经建立,ONU都要将终端用户加入组的请求发送给OLT,而OLT在已经建立连接的情况下则不需要将这个Report消息转发给路由器。这是因为ONU只具备IGMPsmooping功能,而OLT在这个基础上还具有IGMPProxy功能,这使得OLI可以拦截终端用户的IGMP请求并进行相关处理,再将它转发给上层路由器。
(2)对下行组播数据处理
在OLT从上层路由器接收到一个组播帧后,首先查找组播地址表,OLT的组播地址表跟ONU的地址表不同,它是将组播地址与ONU的ID号对应,也就是OLT只负责将组播信息传送给相应的ONU,它并不知道目的地址指的是哪台主机。ONU1中有主机加入组播组224.1.2.3,ONU2中有主机加入组播组224.1.2.5,而与ONU3相连的主机加入了组播组224.1.2.4。当OLT接收到上层路由器发来的MAC地址为224.1.2.3的组播帧后,会转发给ONU1,收到MAC地址为224.1.2.5的组播帧后转发给ONU2,而收到MAC地址为224.1.2.4的组播帧后,会转发给ONU3。由于OLT具备了Snooping功能,就不会将组播信息加上广播地址发送给所有的ONU,节省了带宽资源。
如果ONU不具备Snooping功能,它会将接收到的组播帧转发给它所连接的所有终端用户。这样,无论这个用户是否加入到组播组,都将能够接收到组播帧。这显然是对资源的浪费,也不能满足服务提供商对用户隔离和业务隔离的要求。在ONU执行了Snooping功能后,它会通过侦听本地终端设备发出的加入或离开组播组的IGMP协议帧,在本地维护一个组播地址表,ONU将根据这个地址表决定将组播帧转发到哪个端口上。
(3)离开组播组
对于终端用户离开组播组的过程,IGMPv1和IGMPv2有很大差别。IGMPv1协议中规定,当一个终端设备离开组播组时,不发送任何IGMP信息。在最后的主机离开组之后的几分钟内,路由器继续转发组播信息到接入网。而IGMPv2的终端设备在离开组播组时,会主动发送一个离开帧。这样,IGM-Pv2把离开延迟减少到仅仅几秒钟。为了保持兼容性,无论终端设备是执行IGMPv1还是执行IGMPv2,IP组播服务器都将周期性地发送Query消息,检查某个组播组内是否还有成员存在。若组内成员仍然希望留在该组中,则发送一个Report消息作为响应。