一、背景
国内三大运营商宽带布局普遍使用光猫+路由器的方式(FTTR虽然运营商在主推,目前并不普及)。光猫无线能力较弱或者不支持无线,路由器将承载用户主要上网需求。但是普通家庭网线只布置一条(光猫放弱点箱,路由器在电视柜),上网和IPTV同时支持需要光猫配置单线复用。
一条网线同时支持上网和IPTV业务,国内通常上网业务不带vlan tag,IPTV业务带vlan tag。此时路由器可以通过vlan tag区分业务流,将IPTV业务转发到路由器IPTV口。目前运营商送的路由器都支持该功能,国内主流厂商家用路由器也支持该功能。
关于单线复用功能配置,可以通过装维人员进行安装。
二、拓扑
三、问题描述
电视盒子播放电视过程中,概率出现PC有线接入LAN1/LAN2后IPTV停止播放,
四、问题分析
- PC连接网线后会主动发送IGMP加组报文,路由器接收到后,会通过WAN口请求加组,该加组报文由于是LAN1或LAN2输入,并不会携带tag。
- 光猫收到没有带tag的IGMP报文,会导致原有的IPTV组播流从带tag下发变成不带tag下发。(问题根源)
- 路由器由以前带tag报文通过vlan tag来识别IPTV业务流,此时,路由器并没有对应的组播路由来转发IPTV业务。电视出现卡顿。
路由器wan侧抓包,下图为问题情况数据流,可稳定复现。
💡 以上截图中可以看到,192.168.1.3发送加组报文后,光猫IPTV业务从tag到untag。正常情况下,此时路由器不能处理不带tag的IPTV流。
测试基本确定为光猫问题,以下是尝试在路由器端解决问题。
五、解决方案
- 通过添加组播路由来引流
- 出现问题后正常IPTV业务流不带tag进入WAN port,此时路由器认为该流目的为LAN1、LAN2口;
- 但是
239.11.0.109
并没有对应的组播转发规则,kernel不能正常转发; - 尝试通过检测IPTV port的加组报文,维护组网转发路由;
- 识别特定的的IPTV流,在WAN port入口重新打对应IPTV vlan tag
- 出现IPTV断流后,路由器功能正常,配置没有改变,可以转发带vlan tag的组播业务;
- 只需要在wan port入口驱动处识别IPTV业务流,并添加对应vlan tag,后续路由器可以将带有vlan tag的报文送到IPTV port。
- 识别IPTV port和 vlan tag添加较简单,不在这里赘述。
💡 以上解决方案只为解决思路,代码实现和路由器IPTV实现相关,不在赘述。