具体实施方式
下面结合说明书附图,对本发明的具体实施方式进行详细的说明。
运营商网络将不同地域的用户网络连接起来,形成一个规模更大的桥接网络。实质上,从用户的角度看,运营商网络提供了透明网桥的功能,用户不会关心运营商网络内部拓扑。基于此事实,将运营商网络抽象成一个逻辑网桥,为不同地域上用户内部孤立网络提供桥接功能,实现用户网络间的互联。相应的,将用户网络接入侧的PE端口为抽象为逻辑网桥上的逻辑端口。
如图6所示,通过逻辑网桥,将三个孤立的用户内部网络桥接起来,形成一个规模更大的桥接网络。值得注意的是,PE是物理上的网桥/交换机,在本文所论述的环境下,除去生成的的协议控制,PE设备的其他属性与网桥/交换机设备相同。(此处给出了PE的功能定位,PE在逻辑网桥内的功能)。
桥接网络的规模发生了变化,解决桥接网络内部环回问题的方法,相应的也有所变更。
逻辑网桥上运行生成树,而不是在PE设备上运行生成树。此时,生成树的管理域包括此逻辑网桥以及用户内部各孤立的网络。管理域的变化,使得生成树可以避免“现有技术一”的缺陷。
如同透明网桥一样,逻辑网桥内部的结构,对外部网络是透明的。用户在进行自身网络的管理时,不需要考虑运营商网络内部的拓扑。同样,运营商网络内部的拓扑变更,也不会对用户网络产生影响。“现有技术二”的缺陷同样得以避免。
现在参考图7至图9,对生成树控制器、生成树代理的结构进行说明。传统的生成树实现方式,仅仅对同一单板、网元上的端口进行管理,但是,逻辑网桥所管理的端口在地域上是很分布的,将跨越多个网元。因此,在运营商网络内部需要有一个组件完成相关的端口管理、协议处理等,我们称之为——生成树控制器(在下文中,简称控制器)。
如图7所示,生成树控制器包括一生成树协议处理模块、一信令处理模块、一信令接收/发送模块、一逻辑网桥端口信息数据库。该生成树协议处理模块:标准的生成树处理。该逻辑网桥端口信息数据库:存放逻辑网桥各端口信息,包括逻辑端口在哪个PE,对应于PE上的具体哪个物理端口,通过此信息,信令处理模块决定将生成树协议报文发到哪个PE上的生成树代理上。该信令接收/发送模块:从生成树代理接收/发送信令。该信令处理模块:解析生成树代理发送的信令,维护逻辑网桥端口信息;将信令中所携载的生成树协议报文(BPDU),交给生成树协议处理模块;同时,接收到生成树协议处理模块的报文发送请求后,查询端口信息数据库,决定报文发往哪个生成树代理。
在每个网元/单板上,运行生成树代理(在下文中,简称代理)——捕获用户内部网络的生成树配置信息(Configruation Message,下文中简称配置信息),提交控制器进行处理;接收控制器发送的配置信息,发送到用户内部网络;监测用户内部网络拓扑是否发生更改,上报控制器进行处理等等。
如图8所示,生成树代理结构包括:一生成树报文发送/接收模块、一信令接收/发送模块、一信令处理模块、以及一物理端口状态控制模块。该生成树报文发送/接收模块同CE设备之间发送/接收生成树报文。该信令接收/发送模块同生成树控制器之间发送/接收信令;该信令处理模块维护生成树控制器地址信息;接收生成树报文后,映射成信令,发送到生成树控制器;从控制器收到信令后,解析出生成树报文,通过生成树报文发送/接收模块发送;同时通过物理端口状态控制模块控制物理端口的生成树相关属性;该物理端口状态控制模块控制端口的状态(阻塞Blocking、监听学习Listening、转发Forwarding)。
如图9所示,控制器、代理共同完成了逻辑网桥上生成树相关的处理。
在一个逻辑网桥上,仅有一个控制器,允许有多个代理。可以使用控制器/代理所在网元/单板的MAC地址标志控制器/代理。值得注意的是控制器、代理仅仅是逻辑上的概念。通常,PE设备上实现生成树代理,P设备实现生成树控制器。但是,也可以在PE设备上实现控制器,此时,会有一个PE设备同时担当控制器和代理的角色。通常,运营商会向多个用户提供服务。对于每个用户,创建一个逻辑网桥,可以避免一个用户内部网络拓扑的更改对其他用户产生影响。在运营商网络内部将有多个控制器,每个控制器管理自身的代理。
现在对网桥信息、端口信息进行详细的说明。
在运营商网络内部,每个PE设备作为一个独立的网桥/交换机存在,相应的对于每个PE设备,均会有生成树相关的一些网桥信息以及端口信息。对于逻辑网桥,生成树相关的信息存放在控制器上。控制器依附于哪个PE设备,逻辑网桥的网桥信息从此PE设备继承,但是,端口相关信息属于整个逻辑网桥,需要从其他PE设备获取。
生成树控制器保存逻辑网桥相关的静态信息,包括BridgePriority(网桥优先级)、BridgeHelloTime(网桥握手时间)、BridgeForwardDelay(网桥转发延迟)、BridgeMaxAge(网桥最大老化时间)等参数;以及生成树动态信息——DesignatedRoot(指定根网桥)、RootPathCost(根路径花费)、RootPort(根端口)、MaxAge(最大老化时间)、HelloTime(握手时间)、ForwardDelay(转发延迟)、TopologyChangeDetected(拓扑变更检测)、TopologyChange(拓扑更改)等。生成树代理同样保存网桥相关静态、动态信息,这些信息同生成树控制器相关信息一致。通常,由生成树控制器通过生成树配置信息(Configuration Message)传递网桥信息到生成树代理,生成树代理收到此信息后,完成本地数据的更新。网桥相关计时器----HelloTimer(握手计时器)、TopologyChangeNotificationTimer(拓扑更改认证计时器)以及TopologyChangeTimer(拓扑更改计时器)----在生成树控制器上运行。相对于普通网桥/交换机,逻辑网桥引入了更多的延时。相对于标准的生成树协议,如下参数的建议值做更改:
参数 | 标准中的推荐值 | 推荐值 | 最大取值 |
Maximum Bridge Transmit Delay | 1.0 | 2.0 | 4.0 |
Maximum BPDU transmission delay | 1.0 | 2.0 | 4.0 |
Maximum Message Age IncrementOverestimate | 1.0 | 3.0 | 4.0 |
逻辑网桥上的逻辑端口跨越多个网元,因此,必须提供一种机制完成网元上端口(简称网元端口)同逻辑网桥上端口(简称逻辑端口)之间的映射。一种可以选的方案——由控制器完成映射处理,通常采用如下公式:逻辑端口号=f(网元ID)+g(网元上端口号),其中f(x)、g(y)为映射规则。必须保证逻辑端口同网元端口的一一对应映射关系。
逻辑端口信息,包括PortPriority(端口优先级)、PathCost(端口路径花费)、ChangeDetectionEnable(端口检测使能)等静态信息,以及DesignatedRoot(指定根网桥)、DesignatedCost(指定花费)、DesignatedBridge(指定网桥)、DesignatedPort(指定端口)、TopologyChangeAcknowledge(拓扑更新认证)等动态信息。相应的计时器也在逻辑端口实现。
现在对网元之间的信息交互进行说明。
网元端口收到配置信息之后,需要将配置信息发送到控制器;同时,控制器发送配置信息时,需要通过具体的网元端口发出去。因此,控制器同代理之间必须提供一种通信机制,完成配置信息的交换。
一个控制器可能对应多个代理,要求控制器在接收到代理发送过来的配置信息时,能够判断此信息是从哪个代理发过来的。有两种可选的方案:1、在代理上保存网元端口同逻辑端口的映射表,收到用户内部网络发送过来的配置信息之后,将此信息以及对应的逻辑端口信息同时发送到控制器,因为网元端口同逻辑端口是一一对应的,所以控制器能够判断配置信息的来源;2、代理收到用户内部网络发送过来的生成树信息之后,将此信息以及网元ID、网元端口号同时发送到控制器。方案1要求代理知道网元端口同逻辑端口的映射规则,或者从控制器获取一份网元端口同逻辑端口的映射表,在实现上相对复杂一些。因此,倾向于采用第二种实现方案。
控制器和代理之间的交互信息,通过802.3以太网帧承载。如下所示:
DA | SA | Length | Type | Data | FCS |
其中,DA、SA分别表示接收信息的控制器/代理、发送信息的代理/控制器。
根据PDU报文中,Type字段的取值不同,具有不同的PDU报文类型。在本文中,将Type=n(n:0~255)的PDU报文,称为信令n。目前,定义了7种信令,用于网元之间的通信。
下面对控制器的选择进行详细的说明。
在运营商网络内部,提供单独的设备完成控制器的功能,其他所有的代理均知道其控制器的位置,有相应的通信机制。
另外一种可选的方案,在运营商网络内部选择一个网元完成控制器的功能。这种方案,必须保证所有的参与生成树管理的网元都能够及时知道生成树控制器的位置,并且,如果控制器所在网元失效,能够提供一种恢复机制,选择其他的网元实现控制器。要求这种机制下,运营商内部网络更改不影响用户内部网络,或者说不会引起生成树的拓扑重整。
对于第一种方案,实现相对简单,本文不做描述。如下给出方案2的实现方法。
为了便于对本发明进行说明,现在对一些基本概念进行介绍。
1)网元的角色
主控节点:担当控制器角色的网元
非主控节点:担当代理角色的网元
2)网元状态
网元之间通过信令的交互,进行协商,完成主控节点以及非主控节点的选择。在协商的过程中,网元会经过一系列的状态切换。
网元具有6种状态:
(A)初始化状态、等待状态——完成主控节点的选择,保证逻辑网桥内部仅仅有一个主控节点。
(B)端口信息收集状态、端口信息发送状态——完成逻辑网桥端口信息的统计以及端口的逻辑映射。
(C)主控状态、监视状态——完成BPDU的报文收发以及端口信息的维护。
3)信令
网元间的交互信息,完成控制器的选择以及控制器同代理之间的生成树信息交互。
(a)信令1
功能:用于保证环上只有一个主控节点
数据:类型标识0x01+主控节点ID(Priority+MAC)
信源:主控节点
发送时机:主控节点启动后,定时广播发送
信宿:
·非主控节点接收
目的:用于跟踪主控节点,保证只有一个主控节点
·主控节点接收
目的:用于保证在同一时间只有一个主控节点
(b)信令2
功能:主控节点用于维护非主控节点的信息以及异常处理
数据:类型标识0x02+非主控节点MAC
信源:非主控节点
发送时机:非主控节点进入等待状态以后定时向主控节点发送
信宿:主控节点(进入端口信息收集状态以后接收
(c)信令3
功能:主控节点发送信令3对某一非主控节点进行端口状态查询
数据:类型标识0x03+主控节点ID(Priority+MAC)
信源:主控节点
发送时机:
·主控节点在端口信息收集状态和主控状态时,接收到信令2中的节点MAC在端口信息数据库中没有对应的数据项,则向此节点回发信令3
·主控节点在主控状态接收到上层模块的端口查询命令,经过端口映射后,发现目的端口并不在本节点,此时,将向目的端口所在的节点发送信令3
(d)信令4
功能:非主控节点向主控节点发送信令4上报本节点端口信息
数据:类型标识0x04+节点MAC+端口数
+端口编号(本地)+端口参数
+端口编号(本地)+端口参数
+...
信源:非主控节点
发送时机:
·非主控节点在端口信息发送状态和监视状态接收到主控节点发来的信令3
·非主控节点在端口信息发送状态和监视状态接收到本地节点的端口配置命令信息
·非主控节点在端口信息发送状态和监视状态接收到功能驱动模块发来的端口异常信息
信宿:主控节点
(e)信令5
功能:非主控节点端口参数设置
数据:类型标识0x05+目的节点ID+端口编号(本地编号)+端口参数
信源:主控节点
发送时机:主控节点在主控状态接收到生成数驱动模块发来的端口参数配置命令,都端口进行映射和,发现目的端口不在本节点,将对端口配置命令进行封装(信令5),发送对目的节点
信宿:非主控节点
(f)信令6
功能:控制非主控节点由端口信息发送状态转移到监视状态
数据:类型标识0x06
信源:主控节点
发送时机:主控节点在端口信息收集状态或监视状态收到非主控节点发来的信令4,如果信令4中到节点MAC在端口信息数据库中没有相应数据项,将回发信令6
信宿:非主控节点
(g)信令7
功能:环上各节点与主控节点间BPDU报文交换
数据:类型标识0x07+节点MAC+端口号+BPDU报文
注:对于发往主控节点的信令7,端口号为0;
对于发往非主控节点的信令7,端口号为正整数(1~255)
信源:主控节点、非主控节点
发送时机:
·非主控节点从Ethernet端口接收到BPDU报文,将会把BPDU报文封装成信令7的格式,发往主控节点
·主控节点从生成树驱动模块接收到BPDU报文,在对端口进行映射后,如果发现目的端口并不在主控节点,将会把BPDU报文封装成信令7的格式,发往目的端口所在的非主控节点
信宿:非主控节点、主控节点
现在对配置信息进行说明。本地节点的生成树相关的配置,包括网桥配置、端口配置。
(a)网桥配置命令
功能:配置本地节点的网桥参数:
网桥优先级Priority
网桥MAC
HoldTime
MaxAge
HelloTime
网桥转发延迟ForwardingDelay
……
(b)端口配置命令
功能:配置本地节点某一端口的参数
端口优先级Priority
端口路径花费PathCost
端口编号PortNo
……
定时信息是用于控制节点状态的转换,由定时器产生。
下面对整个处理流程进行详细的描述。步骤1,初始时,各节点均认为自己是主控节点,均定时向其他节点发送信令1;步骤2,节点收到信令1中的主控ID比本节点的ID小,则进入等待状态,保存收到的主控节点ID,在等待状态发送信令2,并开始对主控节点信息进行老化;步骤3,节点在收到本节点的定时信息前没有收到节点ID更小的信息,收到定时信息后转入端口信息收集状态。此时,主控节点已经确定,开始对环上的端口信息进行统计;步骤4,节点A(主控节点)在端口信息收集状态收到信令2,发现信令2中的节点MAC在本地的端口信息数据库中没有对应的数据项,则回发信令3;步骤5,否则,更新此节点的老化标志;非主控节点B在等待状态收到主控节点的信令3后,进入端口信息发送状态;步骤6,非主控节点B进入端口信息发送状态后,向主控节点发送本节点的端口信息(信令4);步骤7,主控节点A收到节点B信令4后,判断在端口信息数据库中有没有对应的节点MAC,如果没有为之建立数据项,同时回发信令6通知节点B进入监视状态;否则,更新端口信息数据库中对应的数据项;步骤8,非主控节点B在等待状态收到信令6后,进入监视状态,开始收发BPDU报文;步骤9,主控节点在端口信息收集状态收到本地的定时信息后,转入主控状态;步骤10,主控节点进入主控状态后,激活生成树模块,开始收发BPDU报文。
图10给出了节点的状态迁移图,并且图11给出了节点在每个状态下对外部事件的响应规则。
图12给出了初始化状态的流程图。步骤A1,开始即接收到信令和命令;步骤A2,依次判断是网络配置命令、端口配置命令、信令1、还是定时信息,若以上均不是则结束;步骤A3,若是网络配置命令,则重新运行生成树控制算法并结束;步骤A4,若是端口配置命令,则判断端口操作是否成功,若成功则改变所保存的端口参数表并结束,若不成功则返回出错信息并结束;步骤A5,若是信令1,则判断信令1中的节点ID优选级是否比本节点高,若高则改变本节点保存的主控节点ID、失去主控资格跳转到等待状态、并且结束,若不比本节点高则直接结束;步骤A6,若是定时信息,则转移到端口信息收集状态并结束。
图13给出了端口信息收集状态的流程图。步骤B1,开始即接收到信令和命令;步骤B2,依次判断是网络配置命令、端口配置命令、信令1、信令2、信令4、还是定时信息,若以上均不是则结束;步骤B3,若是网络配置命令,则重新运行生成树控制算法并结束;步骤B4,若是端口配置命令,则判断端口操作是否成功,若成功则改变所保存的端口参数表、改变节点信息数据库中主控节点的信息、并结束,若不成功则返回出错信息并结束;步骤B5,若是信令1,则判断信令1中的节点ID优选级是否比本节点高,若高则改变本节点保存的主控节点ID、失去主控资格跳转到等待状态、并且结束,若不比本节点高则直接结束;步骤B6,若是信令2,则判断节点信息数据库中是否已有此信令中包含的非主控节点包含的非主控节点ID,若已有则刷新此非主控节点对应的老化标志并且结束,否则向此非主控节点回发信令3并且结束;步骤B7,若是信令4,则判断节点信息数据库中是否已有信令1中的非主控信息,若已有则为此节点创建在节点信息数据库中创建一个数据项、回发信令6通知节点进行状态转移、并且结束,否则判断此非主控节点端口信息是否改变,若已改变则更新节点端口映射表中的相应表项并且结束;步骤B7,若是定时信息,则转移到主控状态。
图14和15给出了主控状态的流程图。步骤C1,开始即接收到信令和命令;步骤C2,依次判断是网络配置命令、端口配置命令、信令1、信令2、信令4、还是A处理,若以上均不是则结束;步骤C3,若是网络配置命令,则重新运行生成树控制算法并结束;步骤C4,若是端口配置命令,则判断端口操作是否成功,若成功则改变所保存的端口参数表、改变节点信息数据库中主控节点的信息、并结束,若不成功则返回出错信息并结束;步骤C5,若是信令1,则判断信令1中的节点ID优选级是否比本节点高,若高则改变本节点保存的主控节点ID、失去主控资格跳转到等待状态、并且结束,若不比本节点高则直接结束;步骤C6,若是信令2,则判断节点信息数据库中是否已有此信令中包含的非主控节点包含的非主控节点ID,若已有则刷新此非主控节点对应的老化标志并且结束,否则向此非主控节点回发信令3并且结束;步骤C7,若是信令4,则判断节点信息数据库中是否已有信令1中的非主控信息,若已有则为此节点创建在节点信息数据库中创建一个数据项、回发信令6通知节点进行状态转移、并且结束,否则判断此非主控节点端口信息是否改变,若已改变则更新节点端口映射表中的相应表项、通知并且结束生成树模块某个或多个端口参数改变、并且结束;步骤C8,若是A处理,则进行BPDU报文处理以进入B。
其中A处理的具体流程为,步骤a,判断是否为信令;步骤b,若是信令,则拆离信令7中的BPDU、对端口进行映射、将BPDU报文交给生成树模块、并进入上述B;步骤c,若不是信令,则依次判断是从Ehernet端口接收BPDU还是从生成树模块接收BPDU,若这两者均不是则进入B;步骤d,若是从Ehernet端口接收BPDI,则对端口进行映射、将BPDU报文交给生成树模块、并进入B;步骤e,若是从生成树模块接收BPDU,则对端口进行映射并判断BPDU是否是发往本地端口,若是则通过本地端口发送,若不是则将BPDU封装成信令7发往目的节点。
图16给出了等待状态的流程图。步骤D1,开始即接收信令和命令;步骤D2,依次判断是否为网络配置命令、端口配置命令、信令3或者定时信息,若以上均不是则结束;步骤D3,若是网络配置命令,则重新运行生成树控制算法并结束;步骤D4,若是端口配置命令,则判断端口操作是否成功,若成功则改变所保存的端口参数表并结束,若不成功则返回出错信息并结束;步骤D5,若是信令1,则判断信令1中的节点ID优选级是否比本节点高,若高则改变本节点保存的主控节点ID、失去主控资格跳转到等待状态、并且结束,若不比本节点高则直接结束;步骤D6,若是信令3或者定时信息,则转移到端口信息发送状态并且结束。
图17给出了端口信息发送状态的流程图。步骤E1,开始即接收到信令和命令;步骤E2,依次判断是网络配置命令、端口配置命令、信令1、信令3、信令6或者定时信息,若以上均不是则结束;步骤E3,若是网络配置命令,则重新运行生成树控制算法并结束;步骤E4,若是端口配置命令,则判断端口操作是否成功,若成功则改变所保存的端口参数表、发信令通知主控节点端口信息改变、并结束,若不成功则返回出错信息并结束;步骤E5,若是信令1,则判断信令1中的节点ID优选级是否比本节点高,若高则改变本节点保存的主控节点ID、失去主控资格跳转到等待状态、并且结束,若不比本节点高则直接结束;步骤E6,若是信令4,则回发信令4并且结束;步骤E7,若是信令6或者定时信息,则转移到端口信息发送状态。
图18给出了监视状态的流程图。步骤F1,开始,即接收到信令和命令;步骤F2,依次判断是网络配置命令、端口配置命令、信令1、信令3、信令5、信令7、还是从Ehernet端口收到BPDU,若以上均不是则结束;步骤F3,若是网络配置命令,则重新运行生成树控制算法并结束;步骤F4,若是端口配置命令,则判断端口操作是否成功,若成功则改变所保存的端口参数表、发信令通知主控节点端口信息改变、并结束,若不成功则返回出错信息并结束;步骤F5,若是信令1,则判断信令1中的节点ID优选级是否比本节点高,若高则改变本节点保存的主控节点ID、失去主控资格跳转到等待状态、并且结束,若不比本节点高则直接结束;步骤F6,若是信令3,则回发信令4并且结束;步骤F7,若是信令5,则判断对端口操作是否成功,若成功则改变所保存的端口参数表并且结束,若不成功则直接结束;步骤F8,若是信令7,则拆除信令7中的BPDU、通过本地端口发送BPDU报文、并且结束;步骤F9,若是从Ehernet端口收到BPDU,则将BPDU报文封装成信令7发送给主控节点、将BPDU报文交给生成树模块、并且结束。
控制器内部生成树协议,可以选择STP、RSTP以及MSTP,实现细节请参见IEEE 802.1D、IEEE 802.1W、IEEE 802.1S等标准。本文不做详细描述。
当运营商向多个用户提供EoS服务时,每个用户对应一个逻辑网桥,相应的对应一个控制器。每个控制器参与控制具体一个用户的网络管理,对其他用户的网络不会产生影响。