背景技术
VPLS技术是运营商利用广域网给客户提供局域网连接的一种技术,随着以太网技术的普及,VPLS的部署逐渐盛行。
参见图1,图1为简化的VPLS组网示意图。图1中客户网络边缘路由器(CE-A1)、CE-A2、CE-A3、CE-A4都是客户A的普通的交换机,运营商认为这些设备属于一个VSI-A,VSI和客户是一一对应的。CE-A之间通过运营商的设备和网络完成等价的二层互联。同理所有CE-B都是普通的交换机,属于一个VSI-B,所有CE-B之间等价于二层互联。
控制平面中,任两个网络运营商边缘路由器(N-PE)之间提供服务的客户如果有相同的则会建立一条虚通道(VC)。例如N-PE1和N-PE3之间仅有客户A同时提供服务,因此这两台设备间仅建立一条VC3用于传输客户A的报文。而N-PE1和N-PE2同时都给客户A、客户B提供服务,因此这两个设备之间建立两个VC。VC建立过程可以用边界网关协议(BGP)或标签分配协议(LDP)完成。
在该组网中,N-PE是一个既有交换机媒质接入控制(MAC)转发、MAC学习能力同时又要有路由器MPLS转发、广域网接口能力的设备,其中MAC学习既要有以太网接口的学习能力也要有VC学习能力。这对N-PE提出了很高的要求。首先MAC学习通常由交换机芯片完成,因此传统的路由器很难做到高性能的MAC学习。其次随着VPLS服务部署的逐渐盛行,N-PE的MAC表规格可能会十分庞大,因为N-PE将承载这个设备下接的所有用户运营商边缘路由器(U-PE)的客户的MAC表,而MAC本身不能像路由那样进行聚合。
针对上述的缺点,现有实现中提出了解耦合VPLS框架(DecoupledVirtual Private LAN Services),该框架中N-PE纯粹作MPLS转发,不进行MAC学习。
参见图2,图2为解耦合VPLS框架结构示意图。由于解耦合的框架中U-PE发给N-PE的报文需要携带信息告诉N-PE这个报文发往哪个远端U-PE,因此U-PE和N-PE之间的报文是多协议标签交换(MPLS)报文。同时N-PE之间的报文也是MPLS报文,此时的VC标记必须携带更多的信息,包括标识这个报文属于哪个客户,这个报文来自哪个源U-PE,发往哪个目的U-PE,即VC标记要含有三个维度的信息。下面以图2为例,详细说明VC的建立。
对连接每一个客户的每一个U-PE进行全局编号,这个编号叫做基于客户的Site-ID。例如图2中针对客户A提供服务的U-PE有U-PE1、U-PE2、U-PE3、U-PE4,可以对这4个U-PE编号为1,2,3,4。当然针对客户B提供服务的也有U-PE1、U-PE3,那么针对客户B的编号可以是1,2。总之要保证针对同一个客户的所有U-PE编号全局唯一。
N-PE之间分配VC标签,每一个N-PE,基于该设备下接的U-PE和客户分配一段VC数值区间给其他的U-PE,这个数值区间的长度要不小于远端Site-ID的最大编号。同一个N-PE给所有远端N-PE分配的VC标签数值区间必须不重叠。
控制平面中,每个N-PE把自己分配的数值区间告诉其余远端的N-PE,这个过程就是建立VC的过程,通过BGP或LDP协议完成。
同时N-PE和U-PE之间还需要运行一个轻量级的控制平面协议,如LMI等。U-PE需要知道针对每个客户都有哪些远端U-PE需要连接,这些连接要用N-PE分给U-PE的标签标明,并携带在数据平面转发报文中,这样才能在N-PE实现用标签转发这些报文。
具体说,N-PE通过控制平面协议分配给每个U-PE针对每个客户的一段VC数值区间。例如N-PE2分配给U-PE3客户B的VC数值区间[1,1],客户A的VC数值区间[2,5],同样这里的长度要满足远端Site-ID的限制。
单播报文数据平面,假设CE-A1发送报文给CE-A3。参见图2的S1-S5。
步骤S1,U-PE1收到报文,查找客户A的MAC表,准备报文提交N-PE1,此时U-PE1需要在报文前面打一个MPLS-VC标签给N-PE1,这个标签由N-PE1分发,标明这个报文属于客户A,同时客户A的远端的U-PE是Site-ID-3。
步骤S2,N-PE1收到报文后,找到N-PE2分配的针对客户A、U-PE3的VC区间中的值,从这个区间中找到源端Site-ID的值作为最终VC标签替换原有标签。
步骤S3,N-PE2可以根据标签得到三维信息:源U-PE的Site ID,目的U-PE的Site-ID,客户A。根据目的U-PE的Site-ID准备将报文提交U-PE3,同时替换VC标签为N-PE2分配给U-PE3的数值区间中的值,这个值要表明客户A的源U-PE是Site-ID-1。
步骤S4,U-PE3从VC中确定报文是客户A的,在客户A的进行普通MAC转发,但是U-PE3在MAC学习时需要记下报文中的VC标签,以便完成反向报文的转发。
步骤S5,CE-A3得到CE-A1的报文继续处理。
广播报文数据平面:
步骤S1,U-PE1需要自己进行广播,根据N-PE分配给自己的VC区间数值,每个值构造一个VC标签并广播一个报文。
步骤S2,N-PE1不进行广播,纯粹单播转发,但是如果收到的报文的VC不对应远端U-PE,则丢弃该报文。
上述解决方法存在缺陷:需要所有的U-PE基于每个客户全局统一编号,任何需要全局统一协调的配置都会导致网络管理的复杂度。
发明内容
有鉴于此,本发明主要目的是提供一种基于解耦合VPLS转发框架的报文转发方法,降低网络管理的复杂度。该方法包括:两个以上N-PE,N-PE通过下行端口与U-PE相连,其特征在于,每个N-PE为自身下行端口分配局部端口编号,并通知给其它所有远端N-PE;每个N-PE分别为所有远端N-PE的下行端口分配对应的本地标记值;
当N-PE收到本地U-PE发来的报文,根据报文携带的所述U-PE事先通过源MAC学习学习到的本地标记值,查找到对应的远端N-PE下行端口的局部端口编号,将所述查找到的局部端口编号封装在报文中并转发给所述远端N-PE;
当N-PE收到远端N-PE发来的报文,根据报文携带的所述远端N-PE下行端口的局部端口编号,查找到对应的本地N-PE分配的本地标记值,将所述查找到的本地标记值封装在报文中并转发给本地U-PE。
其中,所述将查找到的本地标记值封装在报文中包括:将所述本地标记值封装在报文中能够被U-PE学习到的位置。
所述将查找到的本地标记值封装在报文中包括:将所述本地标记值以虚拟局域网标签Vlan-tag字段形式封装在报文中。
所述的方法进一步包括:预先建立表项X、Y和Z,将所述局部端口编号保存在表项X和表项Z中,所述对应的本地标记值保存在表项Y中;
所述的表项X还包括:客户ID和远端N-PE;
所述表项Y还包括:客户ID;
所述表项Z还包括:客户ID和远端N-PE;
所述表项X与所述表项Y为映射关系;
所述表项Y与所述表项Z为映射关系。
所述N-PE收到本地U-PE发来的报文还携带客户ID;
所述查找到对应的远端N-PE下行端口的局部端口编号的方法为:根据报文携带的表项Y包括的客户ID和本地标记值,从与表项Y有映射关系的表项Z中查找到对应的远端N-PE下行端口的局部端口编号;
N-PE收到远端N-PE发来的报文还携带客户ID和远端N-PE;
所述查找到对应的本地N-PE分配的本地标记值的方法为:根据报文携带的表项X包括的客户ID、远端N-PE和局部端口编号,从与表项X有映射关系的表项Y中查找到对应的本地N-PE分配的本地标记值。
所述每个N-PE分别为所有远端N-PE的下行端口分配对应的本地标记值,之后进一步包括:设置N-PE之间转发报文时表示广播的特殊标记值;设置U-PE和N-PE之间转发报文时表示广播的特殊标记值;
当所述N-PE收到本地U-PE发来的报文携带N-PE和U-PE之间表示广播的特殊标记值时,给报文封装N-PE之间表示广播的特殊标记值,并将所述封装报文广播;
当所述N-PE收到远端N-PE发来的报文携带N-PE之间表示广播的特殊标记值时,给报文封装对应的本地N-PE分配的本地标记值,并将所述封装报文广播。
本发明的另一个主要目的是提供一种基于解耦合VPLS转发框架的报文转发设备,降低网络管理的复杂度。该设备包括:配置模块、存储模块、第一接收模块,第一查找模块,第一封装模块、第一发送模块、第二接收模块、第二查找模块、第二封装模块和第二发送模块;
所述配置模块,与所述存储模块相连,为所述配置模块所在的设备下行端口分配局部端口编号,收到远端N-PE设备发来的所述远端N-PE为自身下行端口分配的局部端口编号,并为所述远端N-PE的下行端口分配对应的本地标记值;将收到的和配置的相关信息发送给所述存储模块;
所述存储模块,与所述第一查找模块和所述第二查找模块相连,将所述配置模块发来的所在设备的局部端口号、远端N-PE的局部端口号和为远端N-PE分配的对应本地标记值存储;
所述第一接收模块,与所述第一查找模块相连,接收到U-PE发来的报文,将接收到的报文转发给所述第一查找模块;
所述第一查找模块,与所述第一封装模块相连,接收到所述第一接收模块转发来的U-PE发来的报文,根据报文携带的所述U-PE事先通过源MAC学习学习到的本地标记值,从所述存储模块中查找到对应的远端N-PE下行端口的局部端口编号,将要发送的报文,和查找到的局部端口编号发送给所述第一封装模块;
所述第一封装模块,与所述第一发送模块相连,收到所述第一查找模块发来的要发送的报文和局部端口编号,将所述局部端口编号封装在报文中,发送给所述第一发送模块;
所述第一发送模块,收到所述第一封装模块发来的封装后的报文,并将所述封装后的报文转发给远端N-PE;
所述第二接收模块,与所述第二查找模块相连,收到远端N-PE发来的报文,将收到的报文转发给所述第二查找模块;
所述第二查找模块,与所述第二封装模块相连,收到所述第二接收模块发来的报文,根据报文携带的所述远端N-PE下行端口的局部端口编号,从所述存储模块中查找到对应的本地N-PE分配的本地标记值,将所述查找到的标记值和报文发送给所述第二封装模块;
所述第二封装模块,与所述第二发送模块相连,收到所述第二查找模块发来要发送的报文和本地标记值,将所述本地标记值封装在要发送的报文中,发送给所述第二发送模块;
所述第二发送模块,收到所述第二封装模块发来的封装后的报文,将所述封装报文转发给本地U-PE。
其中,所述第二封装模块用于将所述本地标记值封装在报文中能够被U-PE学习到的位置。
所述第二封装模块用于将所述本地标记值以虚拟局域网标签Vlan-tag字段形式封装在报文中。
所述配置模块进一步用于建立表项X、Y和Z;将配置的局部端口编号保存在表项X和表项Z中,将配置的对应本地标记值保存在表项Y中,同时将客户ID分别保存在表项X、Y和Z中,接收远端N-PE保存在表项X中,发送远端N-PE保存在表项Z中;所述表项X与所述表项Y为映射关系;所述表项Y与所述表项Z为映射关系;将所述表项X、Y和Z和它们的映射关系发送给所述存储模块;
所述存储模块进一步用于收到所述配置模块发来的表项X、Y和Z和它们的映射关系,并存储;
所述第一查找模块收到所述第一接收模块发来的报文还携带的客户ID,从所述存储模块查找到包含客户ID和本地标记值的表项Y,并从与表项Y有映射关系的表项Z中查找到对应的远端N-PE下行端口的局部端口编号;
所述第二查找模块收到所述第二接收模块发来的报文还携带的客户ID和远端N-PE,从所述存储模块查找到包含客户ID、远端N-PE和局部端口编号的表项X,并从与表项X有映射关系的表项Y中查找到对应的本地N-PE分配的本地标记值。
所述配置模块进一步用于配置N-PE之间转发报文时表示广播的特殊标记值,以及N-PE和U-PE之间转发报文时表示广播的特殊标记值,并将配置的这两个特殊标记值发送给所述存储模块;
所述存储模块进一步用于所述存储配置模块发来的N-PE之间表示广播的特殊标记值,以及U-PE和N-PE之间转发报文时表示广播的特殊标记值;
所述第一查找模块,进一步用于收到所述第一接收模块发来的报文携带表示广播报文的特殊标记值时,向存储模块查找到表示N-PE之间表示广播报文的标记值发送给所述第一封装模块;
所述第一封装模块,进一步用于收到所述第一查找模块发来的标记值,并将该标记值封装在要发送的报文中;
所述第二查找模块,进一步用于收到所述第二接收模块发来的报文携带表示广播报文的特殊标记值时,从所述存储模块中查找到对应的本地N-PE分配的本地标记值发送给所述第二封装模块;
所述第二封装模块,进一步用于收到所述第二查找模块发来的本地标记值,并将该本地标记值封装在要发送的报文中,发送给所述第二发送模块。
由上可见,本发明通过每个N-PE为自身下行端口分配局部端口编号,并通知给其它所有远端N-PE;每个N-PE分别为所有远端N-PE的下行端口分配对应的本地标记值,实现基于解耦合VPLS转发框架中报文转发,克服了需要全局统一协调配置导致网络管理的复杂度的缺点,降低了网络管理的复杂度。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明所述方案作进一步地详细说明。
本发明的基本思想为:每个N-PE为自身下行端口分配局部端口编号,并通知给其它所有远端N-PE;每个N-PE分别为所有远端N-PE的下行端口分配对应的本地标记值;当N-PE收到本地U-PE发来的报文,根据报文携带的本地标记值,查找到对应的远端N-PE下行端口的局部端口编号,将所述查找到的局部端口编号封装在报文中并转发给所述远端N-PE;当N-PE收到远端N-PE发来的报文,根据报文携带的所述远端N-PE下行端口的局部端口编号,查找到对应的本地N-PE分配的本地标记值,将所述查找到的本地标记值封装在报文中并转发给本地U-PE。
本发明提出的解决方案中,在配置时,N-PE对自身下行端口分配局部端口编号,即运营商把连接同一个客户的每个N-PE的下行端口进行编号,且该编号在进行配置的N-PE内各不相同。不同N-PE为自身下行端口分配的局部端口号与其他N-PE为自身下行端口分配的局部端口编号可以一样也可以不一样。
局部端口编号分配结束后,建立N-PE之间的VC连接,每个N-PE将自身为哪些客户提供服务,同时为每个客户的每个下行端口分配的局部端口编号告诉给其他远端的N-PE,每个N-PE都将远端N-PE发来的通知信息保存在本地。
N-PE之间的VC建立完连接后,每个N-PE分别为所有远端N-PE的下行端口分配对应的本地标记值。这个本地标记值在每个N-PE自身内不同即可。该本地标记值携带在N-PE发往U-PE的报文中,U-PE进行源MAC学习时,学习到该本地标记值,在该U-PE反向发送报文时,携带该学习到的本地标记值。
当网络中新增U-PE时,该U-PE上接的N-PE给其分配一个与本地下接U-PE的其他下行端口不同的编号,并将该信息通知远端的N-PE,所有远端的N-PE在各自本地为该U-PE分配对应的本地标记值。由此可知增加U-PE只需设置该U-PE相关的参数,不需变动其他设置。
N-PE上还设置特殊标记值来表示广播报文,N-PE之间转发报文时设置一个特殊标记值表示广播;U-PE和N-PE之间转发报文时设置一个特殊标记值表示广播。N-PE收到报文中携带上述特殊标记值时,表明该报文需要广播。
参见图3,图3为本发明提出的解耦合VPLS框架结构示意图。下面结合图3详细描述本发明实现方案中是如何配置的。
图3中,N-PE1有两个端口接了给客户A提供服务的U-PE,给这两个端口编号1,2,同理,N-PE2给自身下行端口编号1,N-PE3下行端口编号1。针对客户B的N-PE为自身下行端口编号也同客户A的方式,而且客户A和客户B分配的编号互不影响。
由上述设置我们可知,只要每个N-PE对同一个客户的下行端口编号在设置的N-PE内唯一即可。在举例中我们均从1开始,这样在管理,以及再增力U-PE时继续分配编号都较方便,当然使用者在使用时根据不同习惯,或者具体实施情况只要赋予不同的值就可,至于从几开始,是否连续,都无要求。
图3中N-PE之间的VC连接建立,如N-PE1和N-PE2之间交换时,N-PE1要告诉N-PE2本端提供客户A、客户B的服务,客户A的端口编号是1、2,客户B的端口编号是1。N-PE2告诉N-PE1,N-PE2提供的客户A、客户B的服务,客户A的端口编号为1,客户B的端口编号为1。这个信息交换可以由BGP或LDP协议完成。
经过上述这个交换后,以N-PE1为例,N-PE1为远端N-PE2和N-PE3的下行端口分配本地标记值,如N-PE1为图3中另外两个A客户下行端口分配编号1(接U-PE3),2(接U-PE4)。图3中N-PE2和N-PE3的分配方式同N-PE1,这里不再赘述。分配的标记值可以区分每个下行端口编号即可,分配什么数值,是否连续,均无要求。
这里分配的本地标记值封装到报文中时,需要封装在能够被U-PE学习到的位置,在本发明的具体实施例中,该本地标记值以虚拟局域网标签Vlan-tag字段形式封装在报文中。当U-PE收到封装该本地标记值的报文后,进行源MAC学习时,能够学习到该本地标记值。
N-PE在建立完VC后还会建立一些表项:
表项X:(接收报文远端N-PE的VC,远端N-PE下行端口的局部端口编号)
表项Y:(客户ID,远端N-PE下行端口的本地标记值)
表项Z:(发送报文远端N-PE的VC,本地N-PE下行端口的局部端口编号)
上述表项的关系为:
表项X与表项Y的关系为映射关系,这个两个表项的映射关系是N-PE收到远端N-PE报文时使用;
表项Y与表项Z的关系为映射关系,这个两个表项的映射关系是N-PE收到U-PE报文时使用。
上述表项是逻辑上的表项,在实际应用中,我们可以将上述表项存放与一个表中,也可以分别存放。
由于上述采用局部端口编号和分配本地标记值的方法,因此在报文转发时报文封装的格式有所变化,下面详细说明本发明中封装的报文格式。
U-PE和N-PE之间发送报文的封装格式:
参见图4,图4为本发明U-PE和N-PE之间发送报文的封装格式示意图。图4中原始报文携带目的MAC和源MAC,以及客户ID(client-id)和端口ID(port-id)。
图4中0x8100、client-id、port-id各占2字节,client-id、port-id按照通常的802.1Q标准的Vlan-tag字段编码。port-id字段的值为远端N-PE下行端口的本地标记值,在U-PE发给N-PE的报文中表明报文目的远端N-PE接的U-PE端口;如果此时port-id的值是4095,则表明这是一个广播报文,需要N-PE针对客户进行广播。port-id在N-PE发给U-PE的报文中表明报文远端N-PE连接的源端U-PE的端口。client-id字段表明这个报文属于哪个客户。其中报文需广播时将port-id的值设置为4095,为本发明的一种举例,在该方案中约定的4095表明广播,使用者可以根据具体情况设置、约定一个数值来在此处表明该报文需要广播。
N-PE和N-PE之间发送报文的封装格式:
参见图5,图5为本发明N-PE和N-PE之间发送报文的封装格式示意图。图5中原始报文携带目的MAC、源MAC、VC1和V-C2。由于本发明中N-PE之间需要4个维度的信息,为了每一个维度足够大的容量并避免复杂的区间值划分,因此在通过两个VC来划分信息,每个VC包含两个维度的信息。其中,VC1包含两个维度信息,客户ID和远端N-PE,客户ID这个标签表明报文所属客户,远端N-PE这个标签表明这个报文去往哪个远端N-PE。V-C2包含两个维度的信息,携带两个N-PE的局部端口编号,V-C2的第一个维度信息为目的N-PE的局部端口编号,第二个维度信息为源N-PE的局部端口编号。
图5中,VC1、V-C2各占32bit,全部按照MPLS格式编码。V-C2携带的两个N-PE的局部端口编号各占10bit,第一个10bit是目的N-PE局部端口编号,当该目的N-PE局部端口编号为1023时,标识广播给所有的下接U-PE。此处用到的“1023”是本发明实现时用的标识值,在实际应用中,使用者可以根据具体情况,定义一个值来约定这个广播功能。
下面继续以图3为例,通过CE-A1发给CE-A3一个报文为例,来详细说明报文在本发明解耦合VPLS框架中是如何实现报文转发的。
参见图6,图6为本发明CE-A1发给CE-A3报文的流程图。其具体步骤为:
步骤601,U-PE1收到CE-A1的报文,通过U-PE1的入端口确定报文属于客户A。
U-PE1收到CE-A1的报文后,进行源MAC学习,学习过程同现有技术,不再赘述。
步骤602,查找客户A的MAC表,在该MAC表中是否查找到收到报文的目的MAC,如果是,执行步骤603,否则,执行步骤606。
步骤603,通过查找到的目的MAC,确定将报文发送给N-PE1,给报文封装port-id和client-id发送给N-PE1。
当MAC表中存在目的MAC,则说明曾经有CE-A3的报文发过来,并进行了源MAC学习,在MAC表中目的MAC对应出接口,通过该出接口知道报文应该发给N-PE1。
发送之前给报文封装的client-id,表明报文的VSI,即该报文属于哪个客户,如现在图3中举例,该处填入的是A,表明该报文是属于客户A的;封装的port-id,port-id的值为N-PE1为远端N-PE2下行端口(接U-PE3)分配的编号1,表明报文目的远端N-PE接的U-PE端口。
步骤604,N-PE1收到U-PE1发来的报文,根据报文携带的port-id和client-id,给该报文封装发送报文的VC、目的N-PE和源N-PE局部端口编号并发送给N-PE2。
步骤604中,发送报文的VC包括的信息为:A和N-PE2,表明发给客户A的报文,且是连接N-PE2的VC发送。目的N-PE局部端口编号为N-PE2下行端口(接U-PE3)局部端口编号1;源N-PE局部端口编号为N-PE1下行端口(接U-PE1)局部端口编号1。
在该步骤中,用到上文提到的表项Y与表项Z的映射关系。相当于我们收到的报文可以获得Y表项中的元素,通过该映射关系,我们可以查到Z表项中的元素信息,将查到的元素信息根据报文封装格式封装报文,将报文转发出去。
步骤605,N-PE2收到N-PE1发来的报文,根据报文携带的目的N-PE局部端口编号,给报文封装port-id和client-id发送给U-PE3。转至步骤609。
步骤605中封装的port-id的值为N-PE2给N-PE1下行端口(接U-PE1)分配的本地标记值1,表明报文的源端。
该步骤中,用到上文提到的表项X与表项Y的映射关系。相当于我们收到的报文获得X表项中的元素,通过该映射关系,我们可以查到Y表项中的元素信息,将查到的元素信息根据报文的封装格式封装报文,将报文转发出去。
步骤606,给报文封装port-id和client-id广播给N-PE1,其中port-id的值填入4095。
在本实施例中,port-id填入4095表明该报文的目的MAC未查找到,需要广播。
步骤607,N-PE1收到U-PE1发来的报文,发现收到的报文携带4095这个特殊标记值,封装源N-PE局部端口编号和目的N-PE的局部端口编号1023,将该报文广播出去。
在本实施例中,目的N-PE的局部端口编号填入1023表明该报文要广播,源N-PE局部端口编号为N-PE1下行端口(接U-PE1)局部端口编号1。在该步骤中,该报文同时广播给N-PE3和N-PE2。由于本实施例是主要描述CE-A1发给CE-A3报文的流程,因此广播给N-PE3的报文的后续处理不再描述。
步骤608,N-PE2收到报文后,发现收到的报文携带1023这个特殊标记值,封装port-id和client-id广播给N-PE1。
步骤608中,1023表示广播该报文,因此,将报文广播给U-PE3。port-id的值为N-PE2为N-PE1下行端口(接U-PE1)分配的本地标记值1,表明报文的来源。
步骤609,U-PE3收到N-PE2发来的报文,进行源MAC学习,将封装的port-id和client-id去掉,根据目的MAC查找客户A的目的MAC表,将该报文发送给CE-A3。
U-PE3收到这个报文后进行源MAC学习,客户A的MAC表中建立一个表项,该表项包括:出接口和本地N-PE为远端N-PE分配的本地标记值。在本步骤中,出接口为U-PE3接N-PE3的上行口,本地N-PE为远端N-PE分配的本地标记值为N-PE2为N-PE1下行端口(接U-PE1)分配的标记值1在MAC表中建立的该表项以备CE-A3向CE-A1发送报文时查找目的MAC。
U-PE3收到报文时向CE-A3转发,查找本地MAC表,找到目的MAC直接转发,未找到,则广播给本地CE,该实现方法和现有技术一致,不再赘述。
当有CE-A3的报文要转发给CE-A1时,实现过程同上述流程,在这里不再赘述。
在本发明的实施例中,详细描述了U-PE和N-PE之间通过VLAN-tag通信,还可以用MPLS通信,但是需约定的MPLS标签某个特殊值标识这个报文需要广播。
N-PE之间也可以利用其它的隧道技术保证接收端知道报文所属的隧道的源端,例如通用路由封装协议(GRE)、IP安全协议(IPSec)均可以,只是N-PE之间的报文格式可能略有不同,特殊数值的广播标识也根据具体协议来约定。
基于同上述方法同样的发明构思,本发明还提出了一种基于解耦合VPLS转发框架的报文转发设备,参见图7,图7为本发明基于解耦合VPLS框架报文转发设备结构示意图。该设备包括:配置模块701、存储模块702、第一接收模块703,第一查找模块704,第一封装模块705、第一发送模块706、第二接收模块707、第二查找模块708、第二封装模块709和第二发送模块710。
配置模块701,与存储模块702相连,为配置模块701所在的设备下行端口分配局部端口编号,收到远端N-PE设备发来的所述远端N-PE为自身下行端口分配的局部端口编号,并为所述远端N-PE的下行端口分配对应的本地标记值;将收到的和配置的相关信息发送给存储模块702。
存储模块702,与第一查找模块704和第二查找模块708相连,将配置模块701发来的所在设备的局部端口号、远端N-PE的局部端口号和为远端N-PE分配的对应本地标记值存储。
第一接收模块703,与第一查找模块704相连,接收到U-PE发来的报文,将接收到的报文转发给第一查找模块704。
第一查找模块704,与第一封装模块705相连,接收到第一接收模块703转发来的U-PE发来的报文,根据报文携带的所述U-PE事先通过源MAC学习学习到的本地标记值,从存储模块702中查找到对应的远端N-PE下行端口的局部端口编号,将要发送的报文,和查找到的局部端口编号发送给第一封装模块705。
第一封装模块705,与第一发送模块706相连,收到第一查找模块704发来的要发送的报文和局部端口编号,将所述局部端口编号封装在报文中,发送给第一发送模块706。
第一发送模块706,收到第一封装模块705发来的封装后的报文,并将所述封装后的报文转发给远端N-PE。
第二接收模块707,与第二查找模块708相连,收到远端N-PE发来的报文,将收到的报文转发给第二查找模块708。
第二查找模块708,与第二封装模块709相连,收到第二接收模块707发来的报文,根据报文携带的所述远端N-PE下行端口的局部端口编号,从存储模块702中查找到对应的本地N-PE分配的本地标记值,将所述查找到的标记值和报文发送给第二封装模块709。
第二封装模块709,与第二发送模块710相连,收到第二查找模块708发来要发送的报文和本地标记值,将所述本地标记值封装在要发送的报文中,发送给第二发送模块710。
第二发送模块710,收到第二封装模块709发来的封装后的报文,将所述封装报文转发给本地U-PE。
较佳地,第二封装模块709用于将本地标记值封装在报文中能够被U-PE学习到的位置。
或者,将本地标记值以Vlan-tag字段形式封装在报文中。
较佳地,配置模块701进一步用于建立表项X、Y和Z;将配置的局部端口编号保存在表项X和表项Z中,将配置的对应本地标记值保存在表项Y中,同时将客户ID分别保存在表项X、Y和Z中,接收远端N-PE保存在表项X中,发送远端N-PE保存在表项Z中;所述表项X与所述表项Y为映射关系;所述表项Y与所述表项Z为映射关系。将表项X、Y和Z和它们的映射关系发送给存储模块702。
存储模块702进一步用于收到配置模块701发来的表项X、Y和Z和它们的映射关系,并存储。
第一查找模块704收到第一接收模块703发来的报文还携带客户ID,从存储模块702查找到包含客户ID和本地标记值的表项Y,并从与表项Y有映射关系的表项Z中查找到对应的远端N-PE下行端口的局部端口编号。
第二查找模块708收到第二接收模块707发来的报文还携带客户ID和远端N-PE,从存储模块702查找到包含客户ID、远端N-PE和局部端口编号的表项X,并从与表项X有映射关系的表项Y中查找到对应的本地N-PE分配的本地标记值。
较佳地,配置模块701进一步用于配置N-PE之间转发报文时表示广播的特殊标记值,以及N-PE和U-PE之间转发报文时表示广播的特殊标记值,并将配置的这两个特殊标记值发送给存储模块702。
存储模块702进一步用于存储配置模块701发来的N-PE之间表示广播的特殊标记值,以及U-PE和N-PE之间转发报文时表示广播的特殊标记值。
第一查找模块704,进一步用于收到第一接收模块703发来的报文携带表示广播报文的特殊标记值时,向存储模块查找到表示N-PE之间表示广播报文的标记值发送给第一封装模块705。
第一封装模块705,进一步用于收到第一查找模块704发来的标记值,并将该标记值封装在要发送的报文中。
第二查找模块708,进一步用于收到第二接收模块707发来的报文携带表示广播报文的特殊标记值时,从存储模块702中查找到对应的本地N-PE分配的本地标记值发送给第二封装模块709;
第二封装模块709,进一步用于收到第二查找模块708发来的本地标记值,并将该本地标记值封装在要发送的报文中,发送给第二发送模块709。
综上所述,本发明通过每个N-PE对自身下行端口分配局部端口编号,并为远端N-PE分配本地标记值,在报文需要广播时,约定N-PE之间,U-PE和N-PE之间表示广播的特殊标记值。实现基于解耦合VPLS转发框架的报文转发,至少具有以下优点:
1)VC端点放在了N-PE,因此U-PE不会基于VC进行广播,不会加重U-PE和N-PE之间接入带宽的负荷。
2)简化了N-PE和U-PE之间的通信复杂度,U-PE无需任何控制平面协议。
3)减少了网络中广播流量带来的负荷,如图3中CE-A3发送广播报文给其余CE-A时,U-PE提交给N-PE2仅广播一份报文即可,N-PE2提交N-PE1进一份报文即可。解耦合VPLS应用环境中U-PE和N-PE之间图4形式的嵌套Vlan-tag报文封装格式并约定4095表示广播;解耦合VPLS应用环境中N-PE和N-PE之间图5形式的增加MPLS V2标签报文封装格式,并约定第一个特殊的10bit值1023代表广播。
4)简化了N-PE本身的软件复杂度,N-PE无需划分VC数值区间,进一步简化N-PE之间控制平面协议的复杂度,提高网络可扩展性,例如新增U-PE时,只需通知其余N-PE相应的客户和端口编号即可降低网络维护管理复杂度,N-PE接U-PE的端口编号无需全局唯一配置,局部配置唯一的功能甚至可以软件自动化处理。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。