背景

国内三大运营商宽带布局普遍使用光猫+路由器的方式(FTTR虽然运营商在主推,目前并不普及)。光猫无线能力较弱或者不支持无线,路由器将承载用户主要上网需求。但是普通家庭网线只布置一条(光猫放弱点箱,路由器在电视柜),上网和IPTV同时支持需要光猫配置单线复用

一条网线同时支持上网和IPTV业务,国内通常上网业务不带vlan tag,IPTV业务带vlan tag。此时路由器可以通过vlan tag区分业务流,将IPTV业务转发到路由器IPTV口。目前运营商送的路由器都支持该功能,国内主流厂商家用路由器也支持该功能。

拓扑

alt text

问题描述

电视盒子播放电视过程中,概率出现PC有线接入LAN1/LAN2后IPTV停止播放

问题分析

  • PC连接网线后会主动发送IGMP加组报文,路由器接收到后,会通过WAN口请求加组,该加组报文由于是LAN1或LAN2输入,并不会携带tag。
  • 光猫收到没有带tag的IGMP报文,会导致原有的IPTV组播流从带tag下发变成不带tag下发。(问题根源)
  • 路由器由以前带tag报文通过vlan tag来识别IPTV业务流,此时,路由器并没有对应的组播路由来转发IPTV业务。电视出现卡顿。

路由器wan侧抓包,下图为问题情况数据流,可稳定复现。

alt text

该问题其实是光猫bug,以下为路由器端解决该问题。

解决方案

  • 通过添加组播路由来引流
  1. 出现问题后正常IPTV业务流不带tag进入WAN port,此时路由器认为该流目的为LAN1、LAN2口;
  2. 但是239.11.0.109并没有对应的组播转发规则,kernel不能正常转发;
  3. 尝试通过检测IPTV port的加组报文,维护组网转发路由;
  • 识别特定的的IPTV流,在WAN port入口重新打对应IPTV vlan tag
  1. 出现IPTV断流后,路由器功能正常,配置没有改变,可以转发带vlan tag的组播业务;
  2. 只需要在wan port入口驱动处识别IPTV业务流,并添加对应vlan tag,后续路由器可以将带有vlan tag的报文送到IPTV port。
  3. 识别IPTV port和 vlan tag添加较简单,不在这里赘述。