具体实施方式
本发明实施例可应用于RoutingQinQ组网,用于RoutingQinQ的内层VLANTag的动态发现和更新。本发明实施例通过在接入交换机和核心交换机之间引入用于查询和报告私网VLAN信息的交互过程,使得核心交换机能够检测用户设备的私网VLAN,并动态维护私网VLAN表项,从而简化了核心交换机上指定私网VLAN的配置操作,即使用户设备上有端口的VLAN发生更改或者VLAN删除,都能够动态的在核心交换机上自动更新私网VLAN表项。
另一方面,当有外部流量向用户设备发送,但是其目的IP地址在核心交换机上没有对应的ARP表项的情况下,核心交换机根据通过上述方式维护的私网VLAN表项,发送内层VLANTag为这些私网VLAN的ARP请求,从而在这些私网VLAN范围内查询相应用户设备,与根据手动方式配置指定私网VLAN,在所有私网VLAN范围内查找相应用户设备相比,减少了ARP请求报文的数量,加快了ARP表项学习速度。
本发明实施例可基于客户端/服务器架构实现,即,接入交换机作为客户端,核心交换机作为服务器端,客户端向服务器端通告私网VLAN信息,服务器端维护私网VLAN表项,并且定期发送查询请求,以请求查询私网VLAN信息。当然,也可以基于其它架构形式实现,其实现原理与基于客户端/服务器架构的实现原理类似。
为了实现在接入交换机和核心交换机之间交互私网VLAN信息,用以维护私网VLAN表项,本发明实施例定义了两种报文:私网VLAN查询报文和私网VLAN报告报文,并规定了两种报文的交互规则以及处理流程。为描述方便起见,本发明实施例将该两种报文的交互规则以及处理流程定义为MSVRP(MultipleSub-VLANRegistrationProtocol,多私网VLAN注册协议,或称多内层VLAN注册协议),即,接入交换机和核心交换机之间交互的用于私网VLAN信息查询和报告的报文,以及相关的处理流程,均遵循该协议的规定。相应的,本发明实施例中,将私网VLAN查询报文称为MSVRP请求(MSVRPrequest)报文,用于核心交换机发送sub-VLAN(即私网VLAN)查询,将私网VLAN报告报文称为MSVRP报告(MSVRPreport)报文,用于接入交换机发送sub-VLAN(即私网VLAN)信息。
下面首先介绍本发明实施例中的MSVRP协议报文的格式。以下描述的MSVRP协议报文的格式仅为举例,并不构成对本发明范围的限制。
(1)MSVRPreport报文
MSVRPreport报文的目的MAC地址使用特定的组播MAC地址,如01-80-C2-00-00-100。报文中包含一个Message(信息)单元,AttributeType(属性类型)值为0x03,私网VLAN信息封装在AttributeList(属性列表)字段中。
如图2所示,AttributeList中包含VectorAttribute(矢量属性)和EndMark(结束标志),其中VectorAttribute可以有1个或者多个,用于承载VLAN信息;EndMark为0x0000。VectorAttribute字段包含2字节的VectorHeader(矢量头),2字节的FirstVLAN(起始VLAN),以及171字节的Vector。其中的VectorHeader字段包括3bit的LeaveAllEvent(使用000表示),和13bit的NumberOfValues(值的数量),用于说明VectorAttribute所带的VLAN个数。Vector字段中VLAN的属性状态以及计算方法,借用现有MVRP协议的属性值和计算方法,即,通过FirstVLAN指示出从哪个VLAN开始,Vector字段的每个字节代表3个VLAN的属性状态。比如,需要指示出VLAN2的属性状态为New,则:FirstVLAN字段的值为2,表示从VLAN2开始,Vector字段为1字节长度,其中的3个属性值依次为New、MT、MT,表示VLAN2的属性为New、VLAN3和VLAN4未声明。
MSVRPreport报文中,VLAN属性状态4种,这4种属性值分别为:
0:即New,表示相应VLAN为新声明的VLAN。该属性用于配置MSVRP客户端功能,或者在端口进行VLAN切换时,主动发起的MSVRPreport报文中。
1:即JoinIn,表示相应VLAN已经声明过。用于回应MSVRPrequest报文的MSVRPreport报文中。
4:即MT,表示相应VLAN不存在,未声明。应用于主动发起或者回应MSVRPrequest时的MSVRPreport报文中。
5:即LV,表示注销相应VLAN。用于在删除MSVRP客户端功能,或者端口进行VLAN切换时,主动发起VLAN信息的通告。
(2)MSVRPrequest报文
MSVRPrequest报文的格式如图3所示。MSVRPrequest报文的目的MAC使用特定的组播MAC地址,如01-80-C2-00-00-100,报文中包含一个Message,AttributeType值为0x02,AttributeList值为全0。
可选的,MSVRPrequest报文也可以是单播报文,即,MSVRPrequest报文的目的MAC地址,可以使用单播MAC地址进行发送。
下面以采用客户端/服务器方式为例,对本发明实施例进行详细描述。
下面首先说明为实现本发明实施例,需要在接入交换机和核心交换机上所进行的配置操作,以及MSVRP协议的相关规定。
(1)接入交换机上的配置操作,以及MSVRP客户端行为的规定
在接入交换机上接入用户设备的端口上配置MSVRP客户端功能。有两种配置方式:
配置方式一:在接入交换机与用户设备相连的端口上配置MSVRP客户端功能。优选的,可默认在接入交换机与用户设备相连的所有端口上配置该功能。取消MSVRP客户端功能时,只要在相应端口上取消MSVRP客户端功能即可。
配置方式二:在私网VLAN上配置MSVRP客户端功能,这样,接入交换机上属于该VLAN的端口(即用户设备所接入的端口)上也就配置了MSVRP客户端功能。优选的,可默认在所有私网VLAN上配置该功能。当对于已配置了MSVRP客户端功能的VLAN取消其MSVRP客户端功能时,接入交换机上属于该VLAN的端口上也就取消了MSVRP客户端功能。
MSVRP客户端功能主要用于实现发送MSVRPreport报文以及接收MSVRPrequest报文。
如前所述,MSVRP客户端发送的MSVRPreport报文中携带的VLAN属性有4种:New(表明对应VLAN为新声明的VLAN,该属性值为0)、JoinIn(表明对应VLAN为已声明的VLAN,该属性值为1)、MT(表明对应VLAN不存在,未声明,该属性值为4)、LV(表明对应VLAN注销,该属性值为5)。
接入交换机发送MSVRPreport报文以及报文中携带的VLAN属性,可有以下A、B、C、D几种情况:
A:当在端口上配置MSVRP客户端功能后,该端口主动发送MSVRPreport报文,用以向核心交换机通告私网VLAN信息,该报文中,对于该端口已加入的VLAN,其属性值为New,以声明相应VLAN的存在。比如,在采用上述配置方式一在端口上配置MSVRP客户端功能后,若该端口当前已加入了VLAN2,则该端口发送的MSVRPreport报文中,VectorAttribute字段中的FirstVLAN字段的值为2,Vector字段为1字节长度,其中的3个属性值依次为New、MT、MT,表示VLAN2的属性为New、VLAN3和VLAN4未声明。当然,如果采用上述配置方式一在某端口上配置了MSVRP客户端功能,但该端口目前还未加入任何VLAN,则该端口也可以不发送MSVRPreport报文。同理,采用上述配置方式二在端口上配置MSVRP客户端功能后,也按照上述方式发送MSVRPreport报文。
B:当在配置MSVRP客户端功能的端口进行VLAN切换时,该端口主动发送MSVRPreport报文,用以向核心交换机通告私网VLAN信息,该报文中,对于切换后该端口所属的VLAN,其属性值为New,用以声明该VLAN的存在,对于切换前该端口所属的VLAN,其属性值为LV,用以注销该VLAN。比如,某端口配置了MSVRP客户端功能,该端口当前属于VLAN2,当将该端口从VLAN2切换到VLAN3后,该端口发送MSVRPreport报文,该报文中VectorAttribute字段中的FirstVLAN字段的值为2,Vector字段为1字节长度,其中的3个属性值依次为LV、New、MT,表示VLAN2的属性为LV、VLAN3的属性为New,VLAN4未声明。
C:当在已配置MSVRP客户端功能的端口上取消该功能时,该端口主动发送MSVRPreport报文,用以向核心交换机通告私网VLAN信息,该报文中,对于该端口已加入的VLAN,其属性值为LV,以声明注销相应VLAN。比如,在采用上述配置方式一在端口上配置MSVRP客户端功能后,若取消该端口上的MSVRP功能,由于该端口已加入了VLAN2,则该端口发送MSVRPreport报文中,VectorAttribute字段中的FirstVLAN字段的值为2,Vector字段为1字节长度,其中的3个属性值依次为LV、MT、MT,表示VLAN2的属性为LV、VLAN3和VLAN4未声明。当然,取消某端口上配置的MSVRP客户端功能时,若该端口目前还未加入任何VLAN,则该端口也可以不发送MSVRPreport报文。同理,采用上述配置方式二在端口上取消MSVRP客户端功能后,也按照上述方式发送MSVRPreport报文。
D、接入交换机接收到核心交换机发送的MSVRPrequest报文后,将该报文在该报文所请求查询的私网VLAN内传播,其中,所请求查询的私网VLAN根据该报文中携带的VLANTag确定。接入交换机上已配置MSVRP客户端功能的端口收到核心交换机发送的MSVRPrequest报文后,返回MSVRPreport报文,用以向核心交换机通告私网VLAN信息,该报文中,对于该端口已加入的VLAN,其属性值为JoinIn。比如,已配置MSVRP客户端功能且属于VLAN2的端口收到MSVRPrequest报文后,返回MSVRPreport报文,该报文中VectorAttribute字段中的FirstVLAN字段的值为2,Vector字段为1字节长度,其中的3个属性值依次为JoinIn、MT、MT,表示VLAN2的属性为JoinIn、VLAN3和VLAN4未声明。
此外,当采用上述配置方式一在某端口上配置MSVRP客户端功能后,若该端口目前尚未加入任何VLAN,则将该端口加入VLAN时,该端口主动发送MSVRPreport报文,该报文中,对于该端口所加入的VLAN,其属性值为New。此后,若将该端口离开该VLAN,则该端口主动发送MSVRPreport报文,该报文中,对于该端口所离开的VLAN,其属性值为LV。
为了提高可靠性和减少报文的发送,端口主动发送MSVRPreport报文后,启动该端口对应的定时器,该定时器的时长为不小于核心交换机发送MSVRPrequest报文的周期长度,优选的,可以设置为几倍于发送MSVRPrequest报文的周期长度。为描述方便,本实施例中将该定时器命名为listentimer。接入交换机接收到核心交换机发送的MSVRPrequest报文后,根据该MSVRPrequest报文回复MSVRPreport报文,并重置该端口对应的listentimer定时器。若listentimer定时器超时,则说明在listentimer定时器计时时间内,该端口未接收到请求查询相应私网VLAN的MSVRPrequest报文,则MSVRP客户端认为核心交换机没有收到本客户端主动发送的相应MSVRPreport报文,该MSVRP客户端再次发送MSVRPreport报文,并删除该listentimer定时器。再次发送的MSVRPreport报文中,对于该端口所属的VLAN,其属性值为New。
可选的,还可以在接入交换机上实现VLAN流量监控和相应处理的功能。
有些私网VLAN下没有挂载PC或者挂载的PC没有上电,为了减少针对这些私网VLAN的报文交互和处理,节约资源,可以在接入交换机上增加VLAN流量监控功能。在一段时间长度内,某私网VLAN没有流量(即该私网VLAN处于非工作状态)时,接入交换机不向核心交换机报告该私网VLAN的信息,以达到节省资源的目的。
具体的,当接入交换机的端口需要通过MSVRPreport报文报告私网VLAN信息时(比如需要主动发送MSVRPreport报文,或需要根据接收到的MSVRPrequest报文返回MSVRPreport报文时),在进行私网VLAN信息报告之前,判断所要报告的VLAN是否处于工作状态,若处于工作状态,则通过MSVRPreport报文通告该VLAN的信息,否则,不通告该VLAN的信息。具体的,如果该端口包含有多个VLAN,其中有的VLAN处于工作状态,有的VLAN处于非工作状态,则该端口发送的MSVRPreport报文中,对于处于非工作状态的VLAN,则不携带其VLAN信息;如果该端口上只包含一个VLAN且该VLAN处于非工作状态,或者配置了多个VLAN但都处于非工作状态,则不发送MSVRPreport报文,以减少MSVRP报文的交互,节省资源。
VLAN流量监控方式(即判断VLAN是否处于工作状态的方式)有两种:
监控方式一:通过查看接入交换机上的MAC地址表,针对启用MSVRP客户端功能的端口上的VLAN,查看MAC地址表中是否有该VLAN的MAC地址表项,若没有,则认为该VLAN处于非工作状态,否则认为该VLAN处于工作状态;
监控方式二:每个启用MSVRP客户端功能的端口开启定时器,若在定时器计时时间内该端口上没有流量,则认为该端口上的VLAN处于非工作状态,否则认为该端口上的VLAN处于工作状态。具体的,每个启用MSVRP客户端功能的端口可周期统计该端口上各VLAN的流量,并记录每个周期内的流量,在需要判断VLAN是否处于工作状态时,可根据当前最近一个VLAN流量统计周期的统计值来判断。
考虑到接入交换机上可能有多个端口都配置了相同VLAN,并且都启用的MSVRP客户端功能。若这些端口中,有一个端口发送了一个MSVRPreport报文,由于MSVRPreport报文为组播报文,因此配置了相同VLAN的其它端口也会收到该MSVRPreport报文,因此,MSVRP协议规定:配置了MSVRP客户端功能的端口,对于接收到的MSVRPreport报文不做处理,可直接丢弃。
(2)核心交换机上的配置操作,以及MSVRP服务器端行为的规定
在核心交换机上启用RoutingQinQ功能的VLAN虚接口上配置MSVRP服务器功能,主要用于定期发送MSVRPrequest报文,用于查询客户端的私网VLAN信息,以及维护私网VLAN表项(以下称sub-VLAN表项)。sub-VLAN表项中主用包括以下内容:私网VLAN的ID,对应的公网VLAN的ID,还可以进一步包括接入交换机的MAC地址信息。
配置MSVRP服务器功能的端口可以接收MSVRPreport报文,解析报文中的私网VLAN信息,并维护sub-VLAN表项;可以根据维护的sub-VLAN表项定期发送MSVRPrequest报文。Sub-VLAN表项所维护的每个私网VLAN表项均启动有对应的定时器,该定时器的计时时长为不小于MSVRPrequest报文的发送周期时长,优选的,可以设置为发送MSVRPrequest报文的周期长度的多倍。为方便描述,本实施例中将该定时器命名为holdtimer。核心交换机每次收到属性为New或JoinIn的私网VLAN信息后,匹配到对应的私网VLAN表项并重置对应的holdtimer定时器。若holdtimer定时器超时,则说明在该定时器的计时时间内没有收到对应私网VLAN的MSVRPreport报文,则核心交换机删除sub-VLAN表中该私网VLAN对应的记录。
优选的,配置MSVRP服务器功能的端口还可启动定时器,该定时器的定时时长小于MSVRPrequest报文的发送周期长度,优选的,可以设置为MSVRPrequest报文的发送周期长度的十分之一到五分之一。为方便描述,该定时器命名为looktimer。启动looktimer定时器的主要目的是为了防止接收到大量相同VLAN的MSVRPreport报文时,引起MSVRP服务器不停的修改sub-VLAN表项。若配置MSVRP服务器功能的端口在looktimer定时器计时时间内收到相同VLAN信息的MSVRPreport报文,则不刷新sub-VLAN表中对应表项的holdtimer定时器。
具体的,一种优选实现方式是:配置MSVRP服务器功能的端口为sub-vlan中的每个私网VLAN配置looktimer定时器;配置MSVRP服务器功能的端口收到MSVRPreport报文后,解析出所通告的私网VLAN信息,根据该VLAN信息查看对应的looktimer定时器,若该looktimer定时器在计时过程中(即未超时),则丢弃接收到的该MSVRPreport报文,若该looktimer定时器已超时,重置该looktimer定时器,并根据接收到的MSVRPreport报文维护相应sub-vlan表项,包括重置相应sub-vlan表项的holdtimer定时器。
配置MSVRP服务器功能的端口收到MSVRPreport报文后,根据其中携带的VLAN属性的不同,在处理操作上也有所区别,具体可包括以下情况:
A:若解析出MSVRPreport报文中的VLAN属性为New或JoinIn,则查询sub-VLAN表中是否已经存在该属性为New或JoinIn的VLAN所对应的表项,若已存在,则重置该表项的holdtimer定时器;若未存在,则在sub-VLAN表中添加该VLAN对应的表项,设置对应的holdtimer定时器。
B:若解析出MSVRPreport报文中的VLAN属性为LV,则根据该属性为LV的VLAN查询对应的sub-VLAN表项,重置该表项的holdtimer定时器,并发送MSVRPrequest报文,用于查询该属性为LV的VLAN信息。此后的处理同前所述,包括:若在该holdtimer定时器计时时间内收到了用于通告该VLAN信息的MSVRPreport报文,则重置该VLAN对应的holdtimer定时器;若该holdtimer定时器超时,则删除sub-VLAN中该私网VLAN对应的记录。
C:若解析出MSVRPreport报文中的VLAN属性为MT,则核心交换机对该VLAN不进行处理。
核心交换机发送MSVRP报文时,根据sub-VLAN表项,封装两层VLANTag,外层VLAN为启用MSVRP服务器功能的VLAN虚接口VLAN,内层VLAN为sub-VLAN中记录的相应私网VLAN。携带两层VLANTag的MSVRPreport报文经过配置MSVRP服务器功能的端口发送到汇聚交换机。
考虑到当接入交换机上一个端口属于多个VLAN时,sub-VLAN表中该接入交换机的MACID会对应有多条表项,核心交换机发送MSVRPrequest报文时针对每个表项都发送对应的MSVRPrequest报文。为了减少报文的发送,当sub-VLAN表中,相同公网VLAN对应的表项中有多个表项的MAC地址相同时,针对这些表项只发送一个MSVRPrequest报文,该MSVRPrequest报文内层VLANTag为这些表项中的某一私网VLAN。
例如,sub-VLAN表中,公网VLAN100对应私网VLAN2和私网VLAN3,私网VLAN2和私网VLAN3对应的接入交换机的MAC地址相同,则针对MAC地址相同且属于同一公网VLAN的表项,只需要发送的一个外层Tag为VLAN100,内层Tag为VLAN2的MSVRPrequest报文即可。
(3)汇聚层交换机上的配置操作,以及汇聚层交换机的行为规定
汇聚层交换机上的配置操作与现有技术相同。
汇聚交换机接收到MSVRPrequest报文后,在外层VLANTag所在VLAN内进行透传。因为RoutingQinQ组网要求汇聚层交换机上与接入交换机相连的端口启用QinQ功能,并且启用QinQ功能的端口的PVID(PortVLANID,端口VLANID,即端口缺省VLAN)值与核心交换机上启用RoutingQinQ的VLAN虚接口的VLAN值相同,因此MSVRPrequest报文通过汇聚交换机上启用QinQ的端口后,剥除外层VLANTag。MSVRPrequest报文只携带一层VLAN为私网VLAN的报文发送到接入交换机。
因为核心交换机发送MSVRPrequest报文是根据sub-VLAN表项中记录的私网VLAN信息封装VLANTag的,因此,MSVRPrequest报文可以发到sub-VLAN表项中的所有VLAN,因此,接入交换机接收到MSVRPrequest报文时,也就可以认为核心交换机已经收到了它的MSVRPreport报文了。
当核心交换机接收到从Internet网络发来的报文后,根据该报文的目的IP地址查询对应的ARP表项;如果未匹配到对应的ARP表项,则查询本设备维护的sub-VLAN表项,根据查询到的所有私网VLAN,封装ARP请求报文并发送到相应VLAN。每个私网VLAN对应一个ARP请求报文,每个ARP请求报文包含两次VLAN封装,外层VLAN为相应表项中记录的公网VLAN,内层VLAN为对应的私网VLAN。当核心交换设备接收到ARP应答报文后,根据应答报文学习ARP表项,并根据学习到的ARP表项对从Internet网络发来的报文进行封装并发向目标用户设备。
为了更清楚的说明本发明实施例,下面以图4所示的组网为例,详细描述本发明实施例的具体实现过程。
如图4所示,设备1和设备2为接入交换机,主要用于与用户设备连接。设备3为汇聚交换机,其sw3_p1和sw3_p2端口启用QinQ功能,用于将设备1和设备2发来的报文打上外层VLANtag(即VLAN100或VLAN200的Tag),然后将报文发送到核心交换机。设备4为核心交换机,其sw4_p1端口为Trunk口,在图4中对应VLAN100和VLAN200的VLAN虚接口,启用RoutingQinQ功能,在VLAN100和VLAN200虚接口上配置second-dot1qVLANid,主要用于对用户报文进行剥除两层VLANTag,然后进行三层转发;对于外部网络发来的报文,在进入sw4_p1端口时对报文打上对应的两层VLANTag,发送到相应的用户设备。在设备4上启用RoutingQinQ功能的VLAN虚接口上配置MSVRP服务器功能。
当在设备1的sw1_p1端口上启用MSVRP客户端功能后,sw1_p1端口发送MSVRPreport报文(该报文为组播报文,目的MAC地址为特定组播MAC地址),该报文中VectorAttribute字段中的FirstVLAN字段的值为2,Vector字段为1字节长度,其中的3个属性值依次为New、MT、MT。sw1_p1端口上启用MSVRP客户端功能后,该端口还启动对应的listentimer定时器,该定时器的时长为5s。
该MSVRPreport报文到达设备3的sw3_p1端口后,由于该端口为QinQ端口、pvid为VLAN100,因此对进入的MSVRPreport报文打上VLAN100的外层VLANTag,并转发到设备4。
设备4接收到该MSVRPreport报文后,解析出该MSVRPreport报文中携带的VLAN2的属性值为New,表明为新声明的VLAN;设备4根据解析出的VLAN2的信息查询其所维护的sub-VLAN表,未查询到对应的表项,因此在sub-VLAN表中创建该VLAN的表项,并设置该表项的holdtimer定时器。
同理,当在设备1的其它端口(sw1_p2、sw1_p3、sw1_p4),以及在设备2的sw2_p1、sw2_p2、sw2_p3、sw2_p4端口启用MSVRP客户端功能后,同样会触发MSVRPreport报文发送,以使设备4根据接收到的MSVRPreport报文维护相应sub-VLAN表项。
通过以上处理流程,设备4上维护的Sub-VLAN表项如表1.1所示(表1.2示出了表1.1中各MACID对应的接入交换机的MAC地址),其中的Holdtimer的时长为2min(即120000ms)。
表1.1
表1.2
MAC ID |
MAC地址 |
公网VLAN ID |
1 |
00-00-00-00-00-01 |
100 |
2 |
00-00-00-00-00-02 |
100 |
3 |
00-00-00-00-00-03 |
100 |
4 |
00-00-00-00-00-04 |
100 |
5 |
00-00-00-00-00-05 |
200 |
6 |
00-00-00-00-00-06 |
200 |
7 |
00-00-00-00-00-07 |
200 |
8 |
00-00-00-00-00-08 |
200 |
每隔1000ms(即MSVRPrequest报文的发送周期长度),设备4针对其所维护的Sub-VLAN表中的每个表项,通过sw4_p1端口发送MSVRPrequest报文,该MSVRPrequest报文封装两层VLANTag,外层为VLAN虚接口的VLAN,内层为sub-VLAN中记录的私网VLAN。比如,设备4针对表1中(私网VLAN2,公网VLAN100)所对应的表项,生成外层VLANTag为VLAN100、内层VLANTag为VLAN2的MSVRPrequest报文,并从VLAN100的VLAN虚接口发送该MSVRPrequest报文。该MSVRPrequest报文为组播报文,目的MAC地址为特定的组播MAC地址。
设备4发送的MSVRPrequest报文到达设备3后,设备3剥除外层VLANTag后发送给接入交换机。比如,设备4接收到外层VLANTag为VLAN100、内层VLANTag为VLAN2的MSVRPrequest报文后,由于sw3_p1端口的pvid为VLAN100,因此该端口剥除VLAN100的外层Tag,发送到设备1。
设备1接收到MSVRPrequest报文后将该报文在VLAN2内传播。当设备1的sw1_p1端口接收到该MSVRPrequest报文后,由于该端口上配置的VLAN与该MSVRPrequest报文中携带的VLAN相匹配,因此回复携带本端口所属VLAN的信息的MSVRPreport报文。由于在sw1_p1端口上启用MSVRP客户端功能时,该端口已经发送过MSVRPreport报文,因此此时发送的MSVRPreport报文中VLAN2的属性值为JoinIn,表示该VLAN已经声明过。sw1_p1端口在收到该MSVRPrequest报文后,还重置对应的listentimer定时器。
此后,该MSVRPreport报文被设备3透传到设备4。设备4收到该MSVRPreport报文后,解析出该MSVRPreport报文中携带的私网VLAN2的属性值为JoinIn;设备4根据解析出的VLAN信息查询其所维护的sub-VLAN表,查询到对应的表项,因此重置该表项的holdtimer定时器。
同理,当设备1的其它端口(sw1_p2、sw1_p3、sw1_p4),以及设备2的sw2_p1、sw2_p2、sw2_p3、sw2_p4端口接收到MSVRPrequest报文后,会返回MSVRPreport报文,以使设备4根据接收到的MSVRPreport报文维护相应sub-VLAN表项。
当将设备1的sw1_P3端口所属的VLAN4切换为VLAN6后,sw1_P3端口发送MSVRPreport报文,重置对应的listentimer定时器。该报文中的VectorAttribute字段中的FirstVLAN字段的值为4,Vector字段为1字节长度,其中的3个属性值依次为LV、MT、New,表示VLAN4的属性为LV、VLAN5的属性为MT,VLAN6的属性为New。设备4接收到该MSVRPreport报文后,解析出VLAN6的属性为New,因此插入(公网VLAN100,私网VLAN6)对应的表项,并启动对应的Holdtimer定时器,解析出VLAN4的属性为LV,因此重置(公网VLAN100,私网VLAN4)对应的表项的Holdtimer定时器,并发送用于查询VLAN4的MSVRPrequest报文。此后,由于(公网VLAN100,私网VLAN4)对应的表项的Holdtimer定时器超时,因此删除(公网VLAN100,私网VLAN4)对应的表项。经过上述处理后,sub-VLAN表项如表2.1所示(此处省略了用于记录表2.1中各MACID对应的MAC地址的表项):
表2.1
当取消设备1上sw1_p2端口的MSVRP客户端功能时,sw1_p2端口发送MSVRPreport报文,该报文中的VectorAttribute字段中的FirstVLAN字段的值为3,Vector字段为1字节长度,其中的3个属性值依次为LV、MT、MT,表示VLAN3的属性为LV、VLAN4和VLAN5的属性为MT。设备4接收到该MSVRPreport报文后,重置(公网VLAN100,私网VLAN3)对应的表项的Holdtimer定时器,并发送用于查询VLAN3的MSVRPrequest报文。此后,由于(公网VLAN100,私网VLAN3)对应的表项的Holdtimer定时器超时,因此删除(公网VLAN100,私网VLAN3)对应的表项。经过上述处理后,sub-VLAN表项如表3.1所示(此处省略了用于记录表3.1中各MACID对应的MAC地址的表项):
表3.1
此后,由于设备4上公网VLANID为100的虚接口上长时间没有接收到携带有私网VLAN5信息的MSVRPreport报文,对应表项的holdtime定时器时间减少为0,此时若还没有接收到携带有私网VLAN5信息的MSVRPreport报文,则将该holdtime定时器数值为0的表项从sub-VLAN表中删除。经过上述处理后,sub-VLAN表项如表4.1所示(此处省略了用于记录表4.1中各MACID对应的MAC地址的表项):
表4.1
设备1的sw1_P3端口在切换VLAN后,在5s内没有收到携带有VLAN6的信息的MSVRPrequest报文(此时sw1_P3端口属于VLAN6),对应的listentimer定时器超时,sw1_p3端口发送MSVRPreport报文,并重置对应的listentimer定时器。该报文中的VectorAttribute字段中的FirstVLAN字段的值为6,Vector字段为1字节长度,其中的3个属性值依次为New、MT、MT。此后,该报文的处理流程同前所述,在此不再详述。
当设备4接收到来自于Internet的报文后,根据该报文的目的IP地址查询对应的ARP表项,未查询到对应表项,因此根据其所维护的Sub-VLAN表项发送ARP请求报文。以设备4维护的Sub-VLAN表项如表4.1为例,设备4发送6个ARP请求报文,其外层和内存VLANTag封装分别为:
ARP请求报文1:外层VLANTag为100,内层VLANTag为2;
ARP请求报文2:外层VLANTag为100,内层VLANTag为6;
ARP请求报文3:外层VLANTag为200,内层VLANTag为5;
ARP请求报文4:外层VLANTag为200,内层VLANTag为6;
ARP请求报文5:外层VLANTag为200,内层VLANTag为7;
ARP请求报文6:外层VLANTag为200,内层VLANTag为8。
当设备4收到ARP响应报文后,进行ARP表项学习,并根据学习到的ARP表项获得目的IP地址对应的MAC地址,封装该报文并进行转发。
基于图4所示的组网,图5示出了具体场景下的私网VLAN信息管理和维护的流程。如图5所示,该流程可包括:
步骤1:当设备1的sw1_p1端口启用MSVRP客户端功能后,发送一个MSVRPreport报文,该报文的VLANTag为VLAN2,该报文中携带的VLAN2的属性为New。
步骤2:设备3的sw3_p1端口接收到该MSVRPreport报文后,为该报文打上VLAN100的外层VLANTag,并发送到设备4。
步骤3:设备4的sw4_p1端口接收到带两层VLANTag的MSVRPreport报文后,解析MSVRPreport报文中携带的私网VLAN信息为VLAN2,将VLAN2作为私网VLAN记录到sub-VLAN表中,并启动Holdtimer定时器。
步骤4:经过1000ms(即MSVRPrequest报文发送周期的长度)后,设备4根据sub-VLAN表项封装MSVRPrequest报文并发送,该报文封装两层VLANTag,外层Tag为VLAN100,内层Tag为VLAN2。
步骤5:设备3接收到该报文后,剥离VLAN100的外层Tag,保留VLAN2的Tag,并将该报文通过sw3_p1端口发送到设备1。
步骤6:设备1接收到该VLANTag为VLAN2的MSVRPrequest报文后,在VLAN2内进行传播。Sw1_p1端口接收到该MSVRPrequest报文后,由于该端口属于VLAN2,因此发送一个MSVRPreport报文,报文的外出VLANTag为VLAN2,该报文中携带的VLAN2的属性为JoinIn。
步骤7~8:该MSVRPreport报文经设备3透传到设备4后,设备4根据该报文维护相应Sub-VLAN表项。
通过以上描述可以看出,本发明实施例通过协议报文交互的方式来维护私网VLAN表项,减少RoutingQinQ的VLAN配置。另外,通过在接入交换机和核心交换机之间进行报文交互,使得核心交换机能够检测到私网VLAN,这样,当外部流量通过核心交换机发送到用户设备时,可以减少核心交换机发送ARP请求报文的VLAN范围,减少ARP泛洪,加快ARP学习速度。
本发明的上述实施例主要是通过在MSVRP报文中承载VLAN信息来实现的,并且用来承载VLAN信息的MSVRP报文使用特定的组播地址进行发送。具体实现时,也可以通过其它协议或者类似MSVRP协议的报文来承载VLAN信息,或者使用其它组播地址来实现本发明实施例,只要思想与本发明的上述实施例类似均应在本发明的保护范围之内。
基于相同的技术构思,本发明实施还提供了一种网络设备。
图6为本发明实施例提供的QinQ组网中接入层交换设备的结构示意图。如图所示,该交换设备可包括:查询响应模块61、报告发起模块62,其中:
查询响应模块61,用于在本设备接收到核心交换设备发送的私网VLAN查询报文后,根据所述私网VLAN查询报文向核心交换设备发送私网VLAN报告报文,所述私网VLAN报告报文中携带私网VLAN信息,用于触发所述核心交换设备维护相应私网VLAN表项;
报告发起模块62,用于在本设备的端口进行多私网VLAN注册协议功能配置后或所述接入交换设备的端口上的私网VLAN配置变化后,向核心交换设备发送私网VLAN报告报文,所述私网VLAN报告报文中携带私网VLAN信息,用于触发所述核心交换设备维护相应私网VLAN表项。
其中,所述私网VLAN查询报文和所述私网VLAN报告报文的目的地址为组播MAC地址。
具体的,查询响应模块61具体用于:将接收到的私网VLAN查询报文在所请求查询的私网VLAN内传播;在本设备上配置有所请求查询的私网VLAN的端口接收到所述私网VLAN查询报文后发送私网VLAN报告报文,其中指示出所请求查询的私网VLAN的属性为JoinIn。
具体的,报告发起模块62具体用于:当在本设备连接用户设备的端口上配置多私网VLAN注册协议功能后,通过该端口发送私网VLAN报告报文,所述私网VLAN报告报文中携带该端口所属的私网VLAN的信息,其中,该端口所属的私网VLAN的属性为New;或者,当在本设备连接用户设备的端口上取消多私网VLAN注册协议功能后,通过该端口发送私网VLAN报告报文,所述私网VLAN报告报文中携带该端口所属的私网VLAN的信息,其中,该端口所属的私网VLAN的属性为LV。
具体的,报告发起模块62具体用于:若本设备的端口的私网VLAN发生切换,则向核心交换设备发送私网VLAN报告报文,其中携带切换前和切换后的私网VLAN信息,其中,切换前的VLAN的属性为LV,切换后的VLAN的属性为New。
进一步的,报告发起模块62发送私网VLAN报告报文后,启动与发送端口对应的定时器,所述定时器的时长不小于核心交换设备发送私网VLAN查询报文的周期长度;以及,当定时器超时,重置该定时器,并从对应的端口发送私网VLAN报告报文,其中携带该端口所属的VLAN信息,其中,该端口所属的VLAN的属性为New。相应的,查询响应模块61还用于,当本设备接收到私网VLAN查询报文,并发送私网VLAN报告报文后,并重置接收端口对应的定时器。
具体的,查询响应模块61在向核心交换设备发送私网VLAN报告报文之前,判断所要报告的私网VLAN内是否有流量;若判断所报告的私网VLAN内有流量,则向核心交换设备发送私网VLAN报告报文,否则放弃向核心交换设备发送私网VLAN报告报文。或/和,报告发起模块62在向核心交换设备发送私网VLAN报告报文之前,判断所要报告的私网VLAN内是否有流量;若判断所报告的私网VLAN内有流量,则向核心交换设备发送私网VLAN报告报文,否则放弃向核心交换设备发送私网VLAN报告报文。
图7为本发明实施例提供的QinQ组网中核心层交换设备的结构示意图。如图所示,该交换设备可包括:私网VLAN查询模块71、私网VLAN表项维护模块72,进一步的,还可包括ARP处理模块73,其中:
私网VLAN查询模块71,用于根据本设备维护的私网VLAN表项,按照设定周期向接入交换设备发送私网VLAN查询报文,所述私网VLAN查询报文中携带所请求查询的私网VLAN信息;其中,私网VLAN表项中包括私网VLAN的标识、公网VLAN的标识;
私网VLAN表项维护模块72,用于在本设备接收到接入交换设备发送的私网VLAN报告报文后,根据接收到的私网VLAN报告报文中携带的私网VLAN信息,维护相应私网VLAN表项。
其中,所述私网VLAN查询报文和所述私网VLAN报告报文的目的地址为组播MAC地址。
进一步的,私网VLAN表项维护模块72还用于,为私网VLAN表中的各私网VLAN设置对应的定时器。私网VLAN表项维护模块72在本设备接收到私网VLAN报告报文后,根据所述私网VLAN报告报文中携带的私网VLAN信息,查询对应的定时器,若对应的定时器未超时,则丢弃接收到的私网VLAN报告报文,若对应的定时器超时,则重置所述对应的定时器,并根据所述私网VLAN报告报文中携带的私网VLAN信息,维护相应私网VLAN表项。
具体的,私网VLAN查询模块71具体用于:当发送私网VLAN查询报文的周期到达时,查询私网VLAN表项,若查询到对应于同一公网VLAN的多个私网VLAN表项中的接入交换设备媒体接入控制MAC地址相同,则针对所述多个私网VLAN表项发送一个私网VLAN查询报文,所述私网VLAN查询报文的外层VLAN为所述多个私网VLAN对应的公网VLAN,内层VLAN为所述多个私网VLAN表项中任意一个表项对应的私网VLAN。
具体的,私网VLAN表项维护模块72具体用于:解析本设备接收到的私网VLAN报告报文,并匹配对应的私网VLAN表项;若解析出私网VLAN的属性为New或JoinIn,且匹配到对应的私网VLAN表项,则重置匹配到的私网VLAN表项对应的定时器;若解析出私网VLAN的属性为New或JoinIn但未匹配到相应的私网VLAN表项,则添加对应的私网VLAN表项,并设置该私网VLAN表项对应的定时器;若解析出私网VLAN的属性为LV,且匹配到对应的私网VLAN表项,则重置匹配到的私网VLAN表项对应的定时器,并发送私网VLAN查询报文,所述私网VLAN查询报文用于查询解析出的属性为LV的私网VLAN;若私网VLAN表项对应的定时器超时,则删除该定时器对应的私网VLAN表项。
具体的,ARP处理模块73用于在本设备接收到外部网络发送的报文后,根据所述报文的目的IP地址匹配对应的地址解析协议ARP表项,若未匹配到,则查询本设备维护的所有私网VLAN表项,并向各私网VLAN表项对应的私网VLAN发送ARP请求报文。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台终端设备(可以是手机,个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。