一种调制解调器及其实现igmp报文版本自适应的方法
技术领域
本发明涉及网络通信技术领域,尤其涉及一种调制解调器及其实现igmp(internet group management protocol,互联网组管理协议)报文版本自适应的方法。
背景技术
目前modem(调制解调器)对组播的处理主要包括两种方式igmp proxy(互联网组管理协议代理)和igmp snooping(互联网组管理协议窥探)技术,其中igmp snooping相对比较简单,主要工作在链路层,它是通过监听客户端和路由器端之间的igmp报文,从而在链路层建立针对某个组播的组播表转发条目,包括了组播地址、物理端口和VLAN(VirtualLocal Area Network,虚拟局域网)的映射关系。igmp proxy主要工作在网络层,是靠拦截用户和路由器之间的igmp报文建立组播表,proxy设备的上联端口(wan口)执行主机的角色,响应来自路由器的查询,当新增用户组或者最后一个用户退出时,主动发送成员报告包或者离开包,下联端口(lan口)执行路由器的角色,完全按照协议中规定的机制执行,包括查询者选举机制,定期发送通用查询信息,收到离开包时发送特定查询等,其运行主要过程如下:
1,当proxy设备(如modem)收到lan口的igmp report(igmp报告)报文时,首先在组播mac表查找发送该报文的用户(通过mac地址标识)是否已经加入了该报文ip组播组对应的mac组播组,如果根据组播地址、report源ip地址以及组播源ip地址找到了对应的条目则说明该用户已经加入了report报文指定的组播组,更新其老化时间,将向wan口发送report报文。如果没有找到对应的条目说明该端口还没有加入report报文中指定的组播组,那么就要根据组播地址、源ip地址以及组播源ip地址新建一个条目,并设置老化时间,并向wan口发送report报文。
2,当收到lan口的igmp leave(igmp离开)报文时,同样以组播地址,report源ip地址和组播源ip地址,查找组播mac表是否已经存在该转发条目,存在则从组播mac表中删除该条目,并仅以组播地址查找是否还存其他的条目,如果存在说明还有其他的lan口需要该组播,则将igmp leave包丢掉不再向wan口发送leave报文,如果不存在该组播的其他条目,则向wan口发送igmp leave报文。
3,当从wan口收到上联设备的igmp query(igmp查询)报文时,则查看自己维护的组播表,对组播表里面所有的组播组都向wan口回report包。
4,只要组播表里面还存在任何一个组播组,都要定期向lan口下发查询报文。
从上面流程可以看出如下几个问题:
首先,当modem收到lan口的igmp report报文或者从wan口收到igmp query报文后,怎么确定该向wan口发送igmp v2还是igmp v3的报文,目前的处理方法包括:方法一,在modem配置页面有v2/v3选项,在确定上联设备支持哪种版本的igmp报文时,手动选择向wan口发送v2还是v3报文,但这种方法不智能,处理效率较低;方法二,避免手动设置,根据上联设备发送query报文的版本来决定发送igmp report报文的版本,当从wan口收到igmpquery的版本是v2,则向wan口发v2的igmp report报文,当从wan口收到igmp query的版本是v3,则向wan口发v3的igmp report报文。这种方法虽然克服了手工设置的问题,但该方法但也有缺陷,表现在:由于上联设备发送igmp query报文是周期性,一般是两三分钟时间或者更长,甚至有些设备在没有收到igmp report报文之前是不向下发送igmp query报文的,那么,刚开始很有可能还没有收到上联设备发送的igmp query报文,这个时候又从lan口收到了igmp report报文,那么这时就会导致不知向wan口发送什么版本的igmp report报文。
其次,关于如何确定向lan口发送的igmp query报文的版本,目前的主要方式是通过页面配置,手动选择v2或者v3,这样需要人工干预,不是很智能,而且这样的方式在所有的lan口发送的都是相同版本的igmp query包,那么如果lan口接多个支持不同版本的设备时,有些设备就会因为收到不支持的query包而工作不正常。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的调制解调器及其实现igmp报文版本自适应的方法。
依据本发明的一个方面,提供了一种调制解调器实现igmp报文版本自适应的方法,包括:
调制解调器接收到下联设备发送的igmp report报文时,检测在前是否已经接收到上联设备发送的igmp query报文,当未接收到时,按照预设的报文版本选取原则选取版本后,向上联端口发送选取版本的igmp report报文;
调制解调器检测设定时间内所述上联端口是否接收到组播数据流,若是,则记录所述上联端口支持的报文版本为当前选取的报文版本;否则,按照所述报文版本选取原则选取下一版本后,重复报文发送及组播数据流检测过程。
可选地,本发明所述方法还包括:所述调制解调器在接收到下联设备发送的igmpreport报文后,记录接收该igmp report报文的下联端口的端口号以及igmp report报文的版本号,建立端口号与igmp report报文版本号的映射关系,并根据该映射关系周期性的向下联端口发送对应版本的igmp query报文。
可选地,本发明所述方法中,所述报文版本选取原则包括:按照版本由高至低的选取原则选取报文版本。
可选地,本发明所述方法中,所述调制解调器根据所述报文版本选取原则选取版本vi后,向所述上联端口发送vi版本的igmp report报文,并启动预先设定的定时器;
所述调制解调器在所述定时器超时前,若检测到所述上联端口收到了组播数据流,则令预先定义的版本变量igmp_version=vi;否则,返回上述报文版本选取过程。
可选地,本发明所述方法中,所述调制解调器在接收到下联设备发送的igmpreport报文时,若在前已经接收到上联设备发送的igmp query报文,则向上联端口发送与所述igmp query报文版本相同的igmp report报文。
依据本发明的另一个方面,提供了一种调制解调器,包括:
检测模块,用于在接收到下联设备发送的igmp report报文时,检测在前是否已经接收到上联设备发送的igmp query报文,当未接收到时,触发第一版本自适应模块;
第一版本自适应模块,用于按照预设的报文版本选取原则选取版本后,向上联端口发送选取版本的igmp report报文,并检测设定时间内所述上联端口是否接收到组播数据流,若是,则记录所述上联端口支持的报文版本为当前选取的报文版本;否则,按照所述报文版本选取原则选取下一版本后,重复报文发送及组播数据流检测过程。
可选地,本发明所述调制解调器还包括:
第二版本自适应模块,用于在接收到下联设备发送的igmp report报文后,记录接收该igmp report报文的下联端口的端口号以及igmp report报文的版本号,建立端口号与igmp report报文版本号的映射关系,并根据该映射关系周期性的向下联端口发送对应版本的igmp query报文。
可选地,本发明所述调制解调器中,所述第一版本自适应模块中报文版本选取原则包括:按照版本由高至低的选取原则选取报文版本。
可选地,本发明所述调制解调器中,所述第一版本自适应模块,具体包括:
版本选取子模块,用于根据所述报文版本选取原则选取版本vi后,向所述上联端口发送vi版本的igmp report报文,并启动预先设定的定时器;
版本确定子模块,用于在所述定时器超时前,若检测到所述上联端口收到了组播数据流,则令预先定义的版本变量igmp_version=vi;否则,触发所述版本选取子模块选取下一版本后继续报文发送。
可选地,本发明所述调制解调器中,所述检测模块,还用于在接收到下联设备发送的igmp report报文时,若检测到在前已经接收到上联设备发送的igmp query报文,则向上联端口发送与所述igmp query报文版本相同的igmp report报文。
本发明有益效果如下:
本发明所述方法和装置,通过对组播处理机制进行改进,不仅满足了正常组播功能,又可以达到完全自动化的效果,使得无论下联端口和上联端口连接的设备支持什么版本的igmp,都不需要修改modem的配置,有效的实现了自适应igmp报文版本。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种调制解调器实现igmp报文版本自适应的方法的流程图;
图2为本发明实施例中调制解调器上联端口侧的版本自适应处理流程图;
图3为本发明实施例中调制解调器下联端口侧的版本自适应处理流程图;
图4为本发明实施例提供的一种调制解调器的结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了解决现有技术中调制解调器不能有效地自适应igmp报文版本的问题,本发明实施例提供一种调制解调器及其实现igmp报文版本自适应的方法,所述方法仅对组播处理机制进行改进,不仅满足了正常的组播功能,又达到了完全自动化的效果,使得无论调制解调器的下联端口和上联端口连接的设备支持什么版本的igmp报文,都不需要修改调制解调器的配置。下面就通过几个具体实施例对本发明的技术方案进行详细说明。
方法实施例
本发明实施例提供一种调制解调器实现igmp报文版本自适应的方法,如图1所示,包括以下步骤:
步骤S101,调制解调器接收到下联设备发送的igmp report报文时,检测在前是否已经接收到上联设备发送的igmp query报文,当未接收到时,执行步骤S102;
进一步地,该步骤中,若在前已经接收到上联设备发送的igmp query报文,则向上联端口发送与所述igmp query报文版本相同的igmp report报文。
步骤S102,调制解调器按照预设的报文版本选取原则选取版本后,向上联端口发送选取版本的igmp report报文;
该步骤中,所述报文版本选取原则优选地为:按照版本由高至低的选取原则选取报文版本。
步骤S103,调制解调器检测设定时间内所述上联端口是否接收到组播数据流,若是,执行步骤S104;否则,返回步骤S102,选择下一版本继续检测;
步骤S104,调制解调器记录所述上联端口支持的报文版本为当前选取的报文版本。
进一步地,本实施例中,调制解调器自适应版本的过程具体为:
调制解调器根据报文版本选取原则选取版本vi后,向上联端口发送vi版本的igmpreport报文,并启动预先设定的定时器;
调制解调器在定时器超时前,若检测到上联端口收到了组播数据流,则令预先定义的版本变量igmp_version=vi;否则,返回上述报文版本选取过程。
进一步地,本实施例除了给出自适应上联端口报文版本的方案外,还给出了自适应下联端口报文版本的方案,具体如下:
调制解调器在接收到下联设备发送的igmp report报文后,记录接收该igmpreport报文的下联端口的端口号以及igmp report报文的版本号,建立端口号与igmpreport报文版本号的映射关系,并根据该映射关系周期性的向下联端口发送对应版本的igmp query报文。
为了更清楚的阐述本发明的实现过程,下面通过一具体应用示例对本发明实施例所述的方法进行进一步说明。本应用示例中,调制解调器对组播处理机制进行了改进,以自动适应v2或者v3不同的组播环境。对于报文版本的自适应主要表现以下在两个方面:
一方面,在wan侧(即上联端口侧),在没有收到上联设备发送的query报文之前,如果lan侧有设备需要加入某个组播组,则先向wan口发送igmp v3的report包,然后监测wan口是否有对应的组播数据包下来,如果在设定的时间(如3~5秒)内没有抓到对应的组播数据包,则向wan口发送igmp v2的report包,并记录wan口是支持igmp v2的,如果抓到了对应的组播数据包,则记录wan口是支持igmp v3的,并不再发送v2的report包。
上述wan侧的处理流程,具体如图2所示,包括:
步骤1,当收到lan口过来的igmp report报文后,判断wan口是否已经收到igmpquery报文,如果收到则向wan口发送和igmp query相同版本的igmp report报文,如果还没有收到igmp query报文,则执行步骤2。
步骤2,自定义定时器igmp_timer,定时5秒并启动这个定时器,基于设定的版本选取选择,向wan口发送v3的igmp report报文,并开始监测wan口是否收到了igmp report加入的组播数据流。
该步骤中,定时器的定时时间优选地根据报文收发的平均时间进行设定。
步骤3,自定义变量igmp_version,定时器timeout时,如果收到了组播数据流,则令igmp_version=v3,那么以后在lan口收到igmp report报文,向wan口都发送v3的igmpreport报文,如果没收到正确的组播数据流,则转入步骤4。
步骤4,给igmp_version赋值v2,向wan口发送v2的igmp report报文,以后向wan口都发送v2的igmp report报文。
另一方面,在lan侧(即下联端口侧),如图3所示,包括:
步骤1,收到lan口的igmp report报文后,记录下接收该igmp report报文的lan口的端口号和igmp report报文的版本号,建立端口号和igmp版本号的映射关系。
步骤2,调制解调器根据这种映射关系周期性的向lan口发送对应版本的igmpquery报文。即,调制解调器周期性的向lan口发送与接收到的igmp report报文相同版本的igmp query报文。
装置实施例
如图4所示,本发明实施例提供一种调制解调器,包括:
检测模块410,用于在接收到下联设备发送的igmp report报文时,检测在前是否已经接收到上联设备发送的igmp query报文,当未接收到时,触发第一版本自适应模块420;
第一版本自适应模块420,用于按照预设的报文版本选取原则选取版本后,向上联端口发送选取版本的igmp report报文,并检测设定时间内所述上联端口是否接收到组播数据流,若是,则记录所述上联端口支持的报文版本为当前选取的报文版本;否则,按照所述报文版本选取原则选取下一版本后,重复报文发送及组播数据流检测过程。
进一步地,本实施例中,第一版本自适应模块420中报文版本选取原则优选地包括:按照版本由高至低的选取原则选取报文版本。
进一步地,本实施例中,第一版本自适应模块420具体包括:
版本选取子模块421,用于根据所述报文版本选取原则选取版本vi后,向所述上联端口发送vi版本的igmp report报文,并启动预先设定的定时器;
版本确定子模块422,用于在所述定时器超时前,若检测到所述上联端口收到了组播数据流,则令预先定义的版本变量igmp_version=vi;否则,触发所述版本选取子模块421选取下一版本后继续报文发送。
进一步地,本实施例中,检测模块410,还用于在接收到下联设备发送的igmpreport报文时,若检测到在前已经接收到上联设备发送的igmp query报文,则向上联端口发送与所述igmp query报文版本相同的igmp report报文。
优选地,本实施例中,所述调制解调器还包括:
第二版本自适应模块430,用于在接收到下联设备发送的igmp report报文后,记录接收该igmp report报文的下联端口的端口号以及igmp report报文的版本号,建立端口号与igmp report报文版本号的映射关系,并根据该映射关系周期性的向下联端口发送对应版本的igmp query报文。
综上所述,本发明实施例所述方法和装置,通过对组播处理机制进行改进,不仅满足了正常组播功能,又可以达到完全自动化的效果,使得无论下联端口和上联端口连接的设备支持什么版本的igmp,都不需要修改modem的配置,有效的实现了自适应igmp报文版本。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。