堆叠系统拓扑管理方法及拓扑改变通知方法转让专利

申请号 : CN200710175962.0

文献号 : CN101141404B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 魏月华

申请人 : 中兴通讯股份有限公司

摘要 :

本发明公开了一种堆叠系统拓扑管理方法,基于状态机的受控式,堆叠系统中的堆叠成员通过一定触发方式,各自独立发送拓扑发现报文,并同时平行转发来自于其他堆叠成员的拓扑发现报文,经过一次堆叠系统中各堆叠成员拓扑发现报文的洪泛过程来建立拓扑信息表。进一步地,通过发送一跳的邻居发现报文来建立邻居信息表,监控邻居堆叠成员的变化,邻居堆叠成员变化时,通过拓扑改变通知机制,触发新的拓扑发现过程。根据本发明提供的方案,能够动态计算和跟踪堆叠系统的拓扑结构变化,实时更新拓扑结构表,拓扑计算收敛速度非常快。通过属主信息的控制能够解决多堆叠系统互联的情况下不同堆叠系统之间的自动区分、识别和隔离,保证堆叠系统的稳定性。

权利要求 :

1.一种堆叠系统拓扑管理方法,其特征在于,该方法包含:

A0、设置堆叠系统中的各堆叠成员的初始状态机均为待加入状态,确定堆叠系统的主成员,将该主成员的状态机切换至主成员状态,其他堆叠成员通过加入删除策略确定各自的状态机为已加入状态或待加入状态;

A、堆叠系统中的堆叠成员根据自身的状态机各自独立发送拓扑发现报文,并转发来自于其他堆叠成员的拓扑发现报文,经过一次堆叠系统中各堆叠成员拓扑发现报文的洪泛过程来建立拓扑信息表。

2.根据权利要求1所述的方法,其特征在于,步骤A中所述根据自身的状态机各自独立发送拓扑发现报文,包括:状态为主成员状态或已加入状态的堆叠成员构建拓扑发现报文,该拓扑发现报文中携带有该堆叠成员的属主信息、成员信息表、途经成员数量和发送次数计数器。

3.根据权利要求1所述的方法,其特征在于,步骤A中所述建立拓扑信息表,包括:

A11、确定自身状态为主成员状态或已加入状态且拓扑发现报文中携带的属主信息与堆叠成员自身的属主信息一致,获取拓扑发现报文中携带的途经成员数量;

A12、判断针对接收到拓扑发现报文的堆叠口是否已存在拓扑信息表,如果已存在,则继续执行步骤A13,如果未存在,则针对接收到拓扑发现报文的堆叠口建立拓扑信息表,转发所述拓扑发现报文;

A13、根据拓扑信息表确定相应堆叠口上已存在存储的途经成员数量,然后比较获取的途经成员数量与存储的途经成员数量的大小,如果获取的途经成员数量小于存储的途经成员数量,则转发所述拓扑发现报文,如果获取的途经成员数量与存储的途经成员数量相等,则判断拓扑发现报文中携带的成员信息表与自身存储的拓扑信息表是否一致,如果一致,则转发所述拓扑发现报文,如果不一致,则丢弃所述拓扑发现报文,如果获取的途经成员数量大于存储的途经成员数量,则对针对接收到拓扑发现报文的堆叠口的拓扑信息表进行更新,并根据拓扑发现报文中携带的途经成员数量对存储的途经成员数量进行更新,转发所述拓扑发现报文。

4.根据权利要求3所述的方法,其特征在于,所述转发所述拓扑发现报文之前,进一步包括:对拓扑发现报文携带的发送次数计数器进行操作,然后根据发送次数计数器的取值判断拓扑发现报文的发送次数是否已达到最大,如果已达到,则丢弃所述拓扑发现报文;如果未达到,则确定拓扑发现报文携带的成员信息表中不包含自身信息时,在拓扑发现报文携带的成员信息表中添加堆叠成员的自身信息,并将拓扑发现报文携带的途经成员数量加

1。

5.根据权利要求1所述的方法,其特征在于,该方法进一步包括:

B、堆叠成员确定邻居信息发生变化时,通过发送拓扑改变通知报文触发各堆叠成员对堆叠系统的拓扑结构进行更新。

6.根据权利要求5所述的方法,其特征在于,步骤B中所述发送拓扑改变通知报文,包括:确定堆叠成员自身及邻居的状态为主成员状态或已加入状态、并且二者属主信息一致时,对自身存储的拓扑信息表进行更新,填写拓扑改变通知报文的基本内容,根据事件类型和堆叠口信息确定事件索引,然后将事件索引添加至拓扑改变通知报文中,将堆叠成员自身的成员标识、状态机、角色、属主信息添加至拓扑改变通知报文中,发送该拓扑改变通知报文。

7.根据权利要求5所述的方法,其特征在于,步骤B中所述触发各堆叠成员对堆叠系统的拓扑结构进行更新,包括:接收到拓扑改变通知报文,确定堆叠成员自身状态为主成员状态或已加入状态、且拓扑改变通知报文中携带的属主信息与堆叠成员自身的属主信息一致时,提取拓扑改变通知报文中携带的事件索引,判断是否在缓存的事件索引中搜索到提取的事件索引,如果搜索到,则直接转发所述拓扑改变通知报文;如果未搜索到,则对提取的事件索引进行缓存,转发所述拓扑改变通知报文,并对自身存储的拓扑信息表进行更新。

8.根据权利要求7所述的方法,其特征在于,所述转发所述拓扑改变通知报文之前,进一步包括:对拓扑改变通知报文携带的发送次数计数器进行操作,然后根据发送次数计数器的取值判断拓扑改变通知报文的发送次数是否已达到最大,如果已达到,则丢弃所述拓扑改变通知报文;如果未达到,则转发所述拓扑改变通知报文。

9.根据权利要求5所述的方法,其特征在于,所述邻居信息发生变化为:发现新邻居、或邻居信息老化、或邻居的状态机发生变化。

10.根据权利要求5所述的方法,其特征在于,所述步骤B之前进一步包括:堆叠成员发送和接收邻居发现报文,通过接收邻居发现报文建立邻居信息表,监控邻居堆叠成员的变化。

11.根据权利要求10所述的方法,其特征在于,所述发送邻居发现报文,包括:将堆叠成员自身的成员标识、状态机、角色、属主信息添加至邻居发现报文中。

12.根据权利要求10所述的方法,其特征在于,所述接收邻居发现报文建立邻居信息表,包括:

B1、判断针对接收到邻居发现报文的堆叠口是否已存在邻居信息表,如果已存在,则确定针对接收到邻居发现报文的堆叠口的邻居信息表已改变时,针对所述堆叠口的邻居信息表进行更新,启动拓扑改变通知;如果未存在,则针对所述堆叠口建立邻居信息表。

13.根据权利要求12所述的方法,其特征在于,所述步骤B1之后进一步包括:设置并启动用于检测邻居堆叠成员在老化周期内是否正常的老化定时器。

14.根据权利要求10所述的方法,其特征在于,所述监控邻居堆叠成员的变化,包括:

判断邻居信息与自身信息是否一致,如果一致,则结束当前流程;如果不一致,则确定自身及邻居的状态是否为主成员状态或已加入状态、并且二者属主信息一致时,启动拓扑改变通知。

15.一种拓扑改变通知的方法,其特征在于,该方法包含:

p0、堆叠成员发送和接收邻居发现报文,通过接收邻居发现报文建立邻居信息表,监控邻居堆叠成员的变化;

p、堆叠成员确定邻居信息发生变化时,通过发送拓扑改变通知报文触发各堆叠成员对堆叠系统的拓扑结构进行更新;

步骤p中所述发送拓扑改变通知报文,包括:确定堆叠成员自身及邻居的状态为主成员状态或已加入状态、并且二者属主信息一致时,对自身存储的拓扑信息表进行更新,填写拓扑改变通知报文的基本内容,根据事件类型和堆叠口信息确定事件索引,然后将事件索引添加至拓扑改变通知报文中,将堆叠成员自身的成员标识、状态机、角色、属主信息添加至拓扑改变通知报文中,发送该拓扑改变通知报文。

16.根据权利要求15所述的方法,其特征在于,步骤p中所述触发各堆叠成员对堆叠系统的拓扑结构进行更新,包括:接收到拓扑改变通知报文,确定堆叠成员自身状态为主成员状态或已加入状态、且拓扑改变通知报文中携带的属主信息与堆叠成员自身的属主信息一致时,提取拓扑改变通知报文中携带的事件索引,判断是否在缓存的事件索引中搜索到提取的事件索引,如果搜索到,则直接转发所述拓扑改变通知报文;如果未搜索到,则对提取的事件索引进行缓存,转发所述拓扑改变通知报文,并对自身存储的拓扑信息表进行更新。

17.根据权利要求16所述的方法,其特征在于,所述转发所述拓扑改变通知报文之前,进一步包括:对拓扑改变通知报文携带的发送次数计数器进行操作,然后根据发送次数计数器的取值判断拓扑改变通知报文的发送次数是否已达到最大,如果已达到,则丢弃所述拓扑改变通知报文;如果未达到,则转发所述拓扑改变通知报文。

18.根据权利要求15所述的方法,其特征在于,所述邻居信息发生变化为:发现新邻居、或邻居信息老化、或邻居的状态机发生变化。

19.根据权利要求15所述的方法,其特征在于,所述发送邻居发现报文,包括:将堆叠成员自身的成员标识、状态机、角色、属主信息添加至邻居发现报文中。

20.根据权利要求15所述的方法,其特征在于,所述接收邻居发现报文建立邻居信息表,包括:

p1、判断针对接收到邻居发现报文的堆叠口是否已存在邻居信息表,如果已存在,则确定针对接收到邻居发现报文的堆叠口的邻居信息表已改变时,针对所述堆叠口的邻居信息表进行更新,启动拓扑改变通知;如果未存在,则针对所述堆叠口建立邻居信息表。

21.根据权利要求20所述的方法,其特征在于,所述步骤p1之后进一步包括:设置并启动用于检测邻居堆叠成员在老化周期内是否正常的老化定时器。

22.根据权利要求15所述的方法,其特征在于,所述监控邻居堆叠成员的变化,包括:

判断邻居信息与自身信息是否一致,如果一致,则结束当前流程;如果不一致,则确定自身及邻居的状态是否为主成员状态或已加入状态、并且二者属主信息一致时,启动拓扑改变通知。

说明书 :

堆叠系统拓扑管理方法及拓扑改变通知方法

技术领域

[0001] 本发明涉及交换机领域,特别是指一种交换机的堆叠系统拓扑管理方法及一种拓扑改变通知方法。

背景技术

[0002] 随着信息技术的飞速发展,网络规模急剧扩大,往往在当前的网络规划中很难对未来的网络规模进行非常准确的预期,当规划的交换机端口数量不足以满足网络应用需求时,最好能在不改变原有网络拓扑结构的情况下增加交换机的端口数,同时又不增加网络管理的负担。此时,交换机的堆叠技术应运而生,正好能够满足这样的要求。交换机的堆叠是指,用线缆通过堆叠接口将多台可交换机堆叠连接起来,实现单台交换机端口数量的扩充。堆叠技术不同于交换机的简单级联,因为级联的交换机在逻辑上是相互独立的设备,而多台交换机堆叠在一起,从逻辑上来看,组成一个堆叠系统的这些交换机相当于一台设备。因此,堆叠技术能够增加交换机的端口密度,并且,一个堆叠系统只需要一个管理入口,通过堆叠技术增加端口后,可以无须改变原有的网络拓扑结构和配置,进而能够实现交换机间的高效互联和统一管理,对于实际的网络维护和管理具有非常重大的意义。 [0003] 堆叠系统最常见的堆叠方式是单环型,即每台设备有两个接口作为堆叠口,设备间通过“手拉手”的方式组成一个圆形单环,其中如果有一条链路断开,则形成的单链型结构作为单环型结构的一种特殊情况来处理。堆叠系统中的每一个堆叠成员都有一个唯一的成员标识(DeviceID),用于堆叠系统内的配置管理和转发控制等。由于堆叠系统在逻辑上相当于一台设备,因此存在跨设备芯片级报文转发和协议管理,堆叠成员之间传输的信息主要包括两大类:一类为堆 叠系统管理控制信息,负责维护堆叠系统芯片级通信和管理;
另一类为堆叠系统之间、即跨交换机的用户数据信息。这两类信息均可能需要从一个堆叠成员传送到堆叠系统拓扑上的另一个堆叠成员或几个堆叠成员,即存在单播和多播两种类型的数据包。这种跨设备的芯片级数据转发由拓扑结构决定,并受芯片控制。 [0004] 在单环型的堆叠拓扑结构下,单播报文的转发取决于目的堆叠系统和端口,如果目的堆叠系统不是当前堆叠系统自身,则该单播报文需要在堆叠口上进行转发,单环型堆叠系统的堆叠口有两个,从不同的堆叠口上转发,单播到目的堆叠系统的路径消耗是不一样的。因此单播存在传送最优路径问题。
[0005] 在单环型的堆叠拓扑结构下,多播存在多播最优阻断点的问题,也就是说,多播报文除了要按照最优路径传送到所有堆叠成员处以外,每一个堆叠成员对于收到的多播报文需要根据源成员标识确定是继续传送还是终止传送,以防止环路。
[0006] 为了达到配置管理和转发控制的目的,需要一种高效的实现方式,控制堆叠系统的建立,动态跟踪堆叠系统内堆叠成员间的拓扑变化,保证一个堆叠系统对外是一个完整的、准确的、稳定的“高端口密度的单一交换机”,能够完成一台普通交换机的报文转发、网管等各种功能。但是,目前却没有相应的实现方案来提供这样的保证,这成为一个急待解决的问题。
[0007] 发明内容
[0008] 有鉴于此,本发明的一个主要目的在于提供一种堆叠系统拓扑管理方法,保证堆叠系统对外的统一完整性。
[0009] 本发明的另一主要目的在于提供一种拓扑改变通知方法,使堆叠成员及时获知堆叠系统拓扑结构已改变。
[0010] 为达到上述目的,本发明的技术方案是这样实现的:
[0011] 一种堆叠系统拓扑管理方法,该方法包含:
[0012] A0、设置堆叠系统中的各堆叠成员的初始状态机均为待加入状态,确定堆 叠系统的主成员,将该主成员的状态机切换至主成员状态,其他堆叠成员通过加入删除策略确定各自的状态机为已加入状态或待加入状态;
[0013] A、堆叠系统中的堆叠成员根据自身的状态机各自独立发送拓扑发现报文,并转发来自于其他堆叠成员的拓扑发现报文,经过一次堆叠系统中各堆叠成员拓扑发现报文的洪泛过程来建立拓扑信息表。
[0014] 步骤A中所述根据自身的状态机各自独立发送拓扑发现报文,包括:状态为主成员状态或已加入状态的堆叠成员构建拓扑发现报文,该拓扑发现报文中携带有该堆叠成员的属主信息、成员信息表、途经成员数量和发送次数计数器。
[0015] 步骤A中所述建立拓扑信息表,包括:
[0016] A11、确定自身状态为主成员状态或已加入状态且拓扑发现报文中携带的属主信息与堆叠成员自身的属主信息一致,获取拓扑发现报文中携带的途经成员数量; [0017] A12、判断针对接收到拓扑发现报文的堆叠口是否已存在拓扑信息表,如果已存在,则继续执行步骤A13,如果未存在,则针对接收到拓扑发现报文的堆叠口建立拓扑信息表,转发所述拓扑发现报文;
[0018] A13、根据拓扑信息表确定相应堆叠口上已存在存储的途经成员数量,然后比较获取的途经成员数量与存储的途经成员数量的大小,如果获取的途经成员数量小于存储的途经成员数量,则转发所述拓扑发现报文,如果获取的途经成员数量与存储的途经成员数量相等,则判断拓扑发现报文中携带的成员信息表与自身存储的拓扑信息表是否一致,如果一致,则转发所述拓扑发现报文,如果不一致,则丢弃所述拓扑发现报文,如果获取的途经成员数量大于存储的途经成员数量,则对针对接收到拓扑发现报文的堆叠口的拓扑信息表进行更新,并根据拓扑发现报文中携带的途经成员数量对存储的途经成员数量进行更新,转发所述拓扑发现报文。
[0019] 所述转发所述拓扑发现报文之前,进一步包括:对拓扑发现报文携带的发送次数计数器进行操作,然后根据发送次数计数器的取值判断拓扑发现报文的发送次数是否已达到最大,如果已达到,则丢弃所述拓扑发现报文;如果未达 到,则确定拓扑发现报文携带的成员信息表中不包含自身信息时,在拓扑发现报文携带的成员信息表中添加堆叠成员的自身信息,并将拓扑发现报文携带的途经成员数量加1。
[0020] 该方法进一步包括:
[0021] B、堆叠成员确定邻居信息发生变化时,通过发送拓扑改变通知报文触发各堆叠成员对堆叠系统的拓扑结构进行更新。
[0022] 步骤B中所述发送拓扑改变通知报文,包括:确定堆叠成员自身及邻居的状态为主成员状态或已加入状态、并且二者属主信息一致时,对自身存储的拓扑信息表进行更新,填写拓扑改变通知报文的基本内容,根据事件类型和堆叠口信息确定事件索引,然后将事件索引添加至拓扑改变通知报文中,将堆叠成员自身的成员标识、状态机、角色、属主信息添加至拓扑改变通知报文中,发送该拓扑改变通知报文。
[0023] 步骤B中所述触发各堆叠成员对堆叠系统的拓扑结构进行更新,包括:接收到拓扑改变通知报文,确定堆叠成员自身状态为主成员状态或已加入状态、且拓扑改变通知报文中携带的属主信息与堆叠成员自身的属主信息一致时,提取拓扑改变通知报文中携带的事件索引,判断是否在缓存的事件索引中搜索到提取的事件索引,如果搜索到,则直接转发所述拓扑改变通知报文;如果未搜索到,则对提取的事件索引进行缓存,转发所述拓扑改变通知报文,并对自身存储的拓扑信息表进行更新。
[0024] 所述转发所述拓扑改变通知报文之前,进一步包括:对拓扑改变通知报文携带的发送次数计数器进行操作,然后根据发送次数计数器的取值判断拓扑改变通知报文的发送次数是否已达到最大,如果已达到,则丢弃所述拓扑改变通知报文;如果未达到,则转发所述拓扑改变通知报文。
[0025] 所述邻居信息发生变化为:发现新邻居、或邻居信息老化、或邻居的状态机发生变化。
[0026] 所述步骤B之前进一步包括:堆叠成员发送和接收邻居发现报文,通过接收邻居发现报文建立邻居信息表,监控邻居堆叠成员的变化。
[0027] 所述发送邻居发现报文,包括:将堆叠成员自身的成员标识、状态机、角色、属主信息添加至邻居发现报文中。
[0028] 所述接收邻居发现报文建立邻居信息表,包括:
[0029] B1、判断针对接收到邻居发现报文的堆叠口是否已存在邻居信息表,如果已存在,则确定针对接收到邻居发现报文的堆叠口的邻居信息表已改变时,针对所述堆叠口的邻居信息表进行更新,启动拓扑改变通知;如果未存在,则针对所述堆叠口建立邻居信息表。 [0030] 所述步骤B1之后进一步包括:设置并启动用于检测邻居堆叠成员在老化周期内是否正常的老化定时器。
[0031] 所述监控邻居堆叠成员的变化,包括:判断邻居信息与自身信息是否一致,如果一致,则结束当前流程;如果不一致,则确定自身及邻居的状态是否为主成员状态或已加入状态、并且二者属主信息一致时,启动拓扑改变通知。
[0032] 一种拓扑改变通知的方法,该方法包含:
[0033] p0、堆叠成员发送和接收邻居发现报文,通过接收邻居发现报文建立邻居信息表,监控邻居堆叠成员的变化;
[0034] p、堆叠成员确定邻居信息发生变化时,通过发送拓扑改变通知报文触发各堆叠成员对堆叠系统的拓扑结构进行更新。
[0035] 步骤p中所述发送拓扑改变通知报文,包括:确定堆叠成员自身及邻居的状态为主成员状态或已加入状态、并且二者属主信息一致时,对自身存储的拓扑信息表进行更新,填写拓扑改变通知报文的基本内容,根据事件类型和堆叠口信息确定事件索引,然后将事件索引添加至拓扑改变通知报文中,将堆叠成员自身的成员标识、状态机、角色、属主信息添加至拓扑改变通知报文中,发送该拓扑改变通知报文。
[0036] 步骤p中所述触发各堆叠成员对堆叠系统的拓扑结构进行更新,包括:接收到拓扑改变通知报文,确定堆叠成员自身状态为主成员状态或已加入状态、且拓扑改变通知报文中携带的属主信息与堆叠成员自身的属主信息一致时,提取拓扑改变通知报文中携带的事件索引,判断是否在缓存的事件索引中搜索到 提取的事件索引,如果搜索到,则直接转发所述拓扑改变通知报文;如果未搜索到,则对提取的事件索引进行缓存,转发所述拓扑改变通知报文,并对自身存储的拓扑信息表进行更新。
[0037] 所述转发所述拓扑改变通知报文之前,进一步包括:对拓扑改变通知报文携带的发送次数计数器进行操作,然后根据发送次数计数器的取值判断拓扑改变通知报文的发送次数是否已达到最大,如果已达到,则丢弃所述拓扑改变通知报文;如果未达到,则转发所述拓扑改变通知报文。
[0038] 所述邻居信息发生变化为:发现新邻居、或邻居信息老化、或邻居的状态机发生变化。
[0039] 所述发送邻居发现报文,包括:将堆叠成员自身的成员标识、状态机、角色、属主信息添加至邻居发现报文中。
[0040] 所述接收邻居发现报文建立邻居信息表,包括:
[0041] p1、判断针对接收到邻居发现报文的堆叠口是否已存在邻居信息表,如果已存在,则确定针对接收到邻居发现报文的堆叠口的邻居信息表已改变时,针对所述堆叠口的邻居信息表进行更新,启动拓扑改变通知;如果未存在,则针对所述堆叠口建立邻居信息表。 [0042] 所述步骤p1之后进一步包括:设置并启动用于检测邻居堆叠成员在老化周期内是否正常的老化定时器。
[0043] 所述监控邻居堆叠成员的变化,包括:判断邻居信息与自身信息是否一致,如果一致,则结束当前流程;如果不一致,则确定自身及邻居的状态是否为主成员状态或已加入状态、并且二者属主信息一致时,启动拓扑改变通知。
[0044] 根据本发明提供的方案,能够动态计算和跟踪堆叠系统的拓扑结构变化, 实时更新拓扑结构表,拓扑计算收敛速度非常快。通过属主信息的控制能够解决多堆叠系统互联的情况下不同堆叠系统之间的自动区分、识别和隔离,保证堆叠系统的稳定性。通过状态机和属主信息的控制能够有效减少堆叠成员间相关报文的发起和转发数量,节省CPU和带宽资源,并能够有效避免报文的环路和广播风暴。

附图说明

[0045] 图1为本发明的一种应用环境示意图;
[0046] 图2为本发明中堆叠成员确定堆叠系统拓扑结构流程图;
[0047] 图3A为本发明中邻居发现报文发送端处理流程图;
[0048] 图3B为本发明中邻居发现报文接收端处理流程图;
[0049] 图4A为本发明中拓扑改变通知报文发送端处理流程图;
[0050] 图4B为本发明中拓扑改变通知报文接收端处理流程图。

具体实施方式

[0051] 本发明中,基于状态机的受控式,堆叠系统中的堆叠成员通过一定触发方式,各自独立发送拓扑发现报文,并同时平行转发来自于其他堆叠成员的拓扑发现报文,经过一次堆叠系统中各堆叠成员拓扑发现报文的洪泛过程来建立拓扑信息表。进一步地,通过发送一跳的邻居发现报文来建立邻居信息表,监控邻居堆叠成员的变化,邻居堆叠成员变化时,通过拓扑改变通知机制,触发新的拓扑发现过程。一定触发方式为定时触发的方式或事件触发的方式。
[0052] 堆叠系统中,各堆叠成员充当不同的角色,具体可为主成员(Master)、从成员(Slave)和备成员(Backup)。主成员是在堆叠系统中充当控制者和管理者的堆叠成员;从成员是在堆叠系统中被控制和管理的堆叠成员;备成员是充当主成员的备份的堆叠成员,堆叠系统中存在主成员时,该堆叠成员以从成员的身份运行,当堆叠系统中的主成员失效或缺失时,备成员自动切换成主成员。一个堆叠系统中,主成员只能有一个;从成员可以是任意多个,极限情况也可 为0;备成员的数量小于或等于1。
[0053] 在本发明的具体实现中,首先需要为堆叠系统中的每一个堆叠成员分配一个唯一的成员标识,并设置堆叠成员可处于三种状态,分别为主成员状态(IamMaster)、已加入状态(FoundMaster)和待加入状态(SeekingMaster)。“主成员状态”表示相应堆叠成员为堆叠系统中的主堆叠网元,“已加入状态”表示相应堆叠成员已经加入堆叠系统,“待加入状态”表示相应堆叠成员正在等待加入堆叠系统。
[0054] 受控式拓扑信息发现需要堆叠成员确定堆叠系统的属主信息。属主信息是指相应堆叠成员所属的堆叠系统的主成员的信息。状态为“主成员状态”的堆叠成员的属主信息是该堆叠成员自身的信息,状态为“已加入状态”的堆叠成员在加入某堆叠系统的过程存储该堆叠系统的主成员信息,该主成员信息即为状态为“已加入状态”的堆叠成员的属主信息。状态为“待加入状态”的堆叠成员属主信息为空,没有存储任何属主信息。 [0055] 本发明的处理中,堆叠系统中的各堆叠成员根据自身的状态机,确定拓扑发现(TP_DISCOVER)报文的洪泛发送和转发策略,根据拓扑算法确定堆叠系统的拓扑结构。 [0056] 此前,设置堆叠系统中的各堆叠成员的初始状态机均为“待加入状态”,通过人工指定或主备竞争来确定堆叠系统的主成员,将该主成员的状态机切换至“主成员状态”,其他堆叠成员通过一定的加入删除策略,确定各自的状态机为“已加入状态”或“待加入状态”。
[0057] 所谓洪泛发送和转发策略是指所有堆叠成员无论充当什么角色,只要状态机符合设定条件,就能够平等的发起拓扑发现报文或转发收到的来自其他堆叠成员的拓扑发现报文。
[0058] 拓扑发现报文的洪泛发送策略为:自身状态为“主成员状态”或“已加入状态”的堆叠成员可以定时或根据事件触发向堆叠口发送拓扑发现报文,在该拓扑发现报文中需携带该堆叠成员的属主信息。堆叠成员收到邻居发送或转发过来的拓扑发现报文时的转发策略为:如果堆叠成员的状态为“主成员状态” 或“已加入状态”,则该堆叠成员判断拓扑发现报文携带的成员信息表(DevInfoList)中是否包含自身信息,如果包含,则为了防止报文环路和报文风暴,直接丢弃该拓扑发现报文,如果不包含,则进一步判断该拓扑发现报文中携带的属主信息是否与自身的属主信息一致,如果不一致,则直接丢弃该拓扑发现报文,如果一致,则根据成员信息表确定堆叠系统的拓扑结构,然后将自身信息添加到成员信息表的末尾,并向其他堆叠口转发该拓扑发现报文;如果堆叠成员的状态为“待加入状态”,则直接丢弃所述报文。
[0059] 拓扑算法可以通过增量式计算来实现,增量式计算是指每个堆叠成员均会根据拓扑发现报文确定堆叠系统中最完整的拓扑结构。由于依次转发拓扑发现报文的各堆叠成员会将自身信息添加至该拓扑发现报文携带的成员信息表中,因此接收拓扑发现报文的堆叠成员能够根据拓扑发现报文携带的、最完整的成员信息表来确定堆叠系统的拓扑结构、即拓扑信息表。如果堆叠系统的拓扑结构发生变化,则根据拓扑改变事件重新根据增量式计算对拓扑信息表进行更新。
[0060] 进一步地,堆叠成员定时发送和接收邻居发现报文,通过接收邻居发现报文建立邻居信息表,通过接收邻居发现报文监控邻居堆叠成员的变化,邻居信息发生变化时,通过拓扑改变通知机制,触发新的拓扑发现过程,使堆叠系统中的堆叠成员对拓扑结构进行更新。邻居信息发生变化可以指发现新邻居、邻居信息老化、邻居的状态机发生变化等。 [0061] 堆叠成员通过发送邻居发现报文通知邻居堆叠成员自身处于正常状态及自身信息,通过接收来自邻居堆叠成员的邻居发现报文来确定邻居堆叠成员处于正常状态及邻居堆叠成员的信息。邻居发现报文的收发不受状态机的限制。邻居发现报文中可以至少携带发送该邻居报文的堆叠成员的成员标识、设备类型、Mac地址、状态机和属主信息。接收邻居发现报文的堆叠成员根据该邻居发现报文中携带的信息建立邻居信息表。邻居发现报文只有1跳,不能进行转发。
[0062] 邻居信息发生变化时,堆叠成员根据邻居堆叠成员和自身的状态机,启动拓扑改变通知,收到拓扑改变通知报文的堆叠成员向堆叠口转发该拓扑改变通知报文,并可删除自身存储的拓扑结构,重新根据自身的状态机确定拓扑发现 报文的洪泛发送和转发策略,根据拓扑算法更新堆叠系统的拓扑结构。
[0063] 堆叠口启动连接时,连接于堆叠口的相应堆叠成员立即发送邻居发送报文。堆叠成员在堆叠口上接收到来自新邻居堆叠成员的邻居发现报文时,将该邻居堆叠成员的信息添加至邻居信息表;并且,如果该堆叠成员和邻居堆叠成员的状态机为“主成员状态”或“已加入状态”、且属主信息一致,则启动拓扑改变通知。发现新的邻居堆叠成员时,如果该邻居堆叠成员的状态机为“待加入状态”,则无需启动拓扑改变通知。堆叠成员需要针对各堆叠口上的邻居信息表维护各堆叠邻居成员的老化定时器,如果在老化周期内接收到某个邻居堆叠成员发送的邻居发现报文,则重置针对该邻居堆叠成员的老化定时器;如果老化周期内没有收到某个邻居堆叠成员发送的邻居发现报文,即老化定时器超时,则该邻居堆叠成员的邻居信息自动老化,即在邻居信息表中删除相应邻居堆叠成员的信息,此时,如果堆叠成员和邻居堆叠成员的状态机为“主成员状态”或“已加入状态”、且属主信息一致,则启动拓扑改变通知,否则不启动拓扑改变通知。
[0064] 只有状态为“主成员状态”或“已加入状态”的堆叠成员才能够发起拓扑改变通知,发送的拓扑改变通知报文中需要携带属主信息。接收到拓扑改变通知报文的堆叠成员,确定属主信息与拓扑改变通知报文携带的属主信息一致时,才对拓扑结构进行更新。 [0065] 拓扑改变通知报文在传送过程中可以进行事件标记,如堆叠口启动、堆叠口异常或收发包异常等事件。为保证堆叠系统中堆叠成员不会因为同一次事件频繁进行拓扑结构更新,设置事件索引(TcnIndex),每个事件索引用于唯一标识一种事件类型,事件索引被携带在拓扑改变通知报文中。首次接收到拓扑改变通知报文的堆叠成员,缓存该拓扑改变通知报文中携带的事件索引,后续收到拓扑改变通知报文时,判断是否在缓存的事件索引中搜索到拓扑改变通知报文中携带的事件索引,如果搜索到,则不再对拓扑结构进行更新;如果未搜索到,则对拓扑结构进行更新。这样,可以有效防止由于拓扑改变通知报文重传导致各堆叠成员针对同一次事件进行多次重复的拓扑收集过程,从而影响拓扑 收集洪泛过程的收敛速度。事件索引也可以进行定时老化。
[0066] 以上提到的各种报文、除邻居发现报文均可以携带有发送次数计数器,发送次数计数器的初始值设置为堆叠系统能够支持的堆叠成员的最大数量,报文每被发送或转发一次,发送次数计数器的值就减1,当发送次数计数器的值为零时,则停止转发并丢弃报文。当然,实际应用中,也可以通过对发送次数计数器的加1操作来实现该机制。以上所述各种报文均为单播报文,由堆叠成员的CPU负责转发,并具有延时重传机制。
[0067] 图1为本发明的一种应用环境示意图,该应用环境为一个单环形结构,每个堆叠成员有两个堆叠口,分别连接上游堆叠成员和下游堆叠成员,每一个堆叠成员具有一个唯一的成员标识,如图中所示的A、B、C、D、E、F即可为每个堆叠成员的唯一的成员标识。堆叠成员B两侧的P25和P11表示堆叠成员B的两个堆叠口的编号分别为25和11。实际的堆叠系统中,堆叠成员的成员标识通常也可以为数字。
[0068] 下面通过对具体流程图的描述,对本发明的实现进行更为详细的描述。 [0069] 堆叠系统内的各堆叠成员各自独立发送拓扑发现报文,具体处理为:构建拓扑发现报文,该拓扑发现报文中携带有该堆叠成员的属主信息、
[0070] 成员标识、状态机、角色、属主信息
[0071] 图2为本发明中堆叠成员确定堆叠系统拓扑结构流程图,如图2所示,堆叠成员确定堆叠系统拓扑结构的具体处理过程包括以下步骤:
[0072] 步骤201:堆叠成员在堆叠口上接收到拓扑发现报文。
[0073] 步骤202:该堆叠成员判断自身状态是否为“待加入状态”,如果是,则继续执行步骤218;如果不是,则继续执行步骤203。
[0074] 步骤202的实现也可以为该堆叠成员判断自身状态是否为“主成员状态”或“已加入状态”,如果是,则继续执行步骤203;如果不是,则继续执行步骤218。 [0075] 步骤203:该堆叠成员判断拓扑发现报文中携带的属主信息与自身的属主信息是否一致,如果一致,则继续执行步骤204;如果不一致,则表明拓扑发 现报文来自于该堆叠成员所属的堆叠系统之外,继续执行步骤218。
[0076] 步骤204~步骤205:该堆叠成员获取拓扑发现报文中携带的途经成员数量,然后判断针对接收到拓扑发现报文的堆叠口是否已存在拓扑信息表,如果已存在,则继续执行步骤206;如果未存在,则继续执行步骤210。
[0077] 步骤206~步骤207:该堆叠成员根据拓扑信息表确定相应堆叠口上已存在的途经成员数量,然后比较获取的途经成员数量与存储的途经成员数量的大小,如果途经成员数量小于存储的途经成员数量,则继续执行步骤212;如果途经成员数量与存储的途经成员数量相等,则继续执行步骤208;如果途经成员数量大于存储的途经成员数量,则继续执行步骤211。
[0078] 步骤208:该堆叠成员判断拓扑发现报文中携带的成员信息表与自身存储的拓扑信息表是否一致,如果一致,则继续执行步骤212;如果不一致,则继续执行步骤209。成员信息表用于说明拓扑发现报文所经过的各堆叠成员的信息,具体可包括:成员标识、状态机、角色等信息。
[0079] 步骤209:该堆叠成员对针对接收到拓扑发现报文的堆叠口的拓扑信息表进行更新,例如,使用拓扑发现报文中携带的成员信息表覆盖存储的拓扑信息表,将成员信息表作为拓扑信息表,然后继续执行步骤212。
[0080] 步骤210:该堆叠成员针对接收到拓扑发现报文的堆叠口建立拓扑信息表,然后继续执行步骤212。
[0081] 步骤211:该堆叠成员对针对接收到拓扑发现报文的堆叠口的拓扑信息表进行更新,并根据拓扑发现报文中携带的途经成员数量对存储的途经地址成员数量进行更新。 [0082] 步骤212~步骤213:该堆叠成员对拓扑发现报文携带的发送次数计数器进行操作,然后根据发送次数计数器的取值判断拓扑发现报文的发送次数是否已达到最大,如果已达到,则继续执行步骤218;如果未达到,则继续执行步骤214。实际应用中,可以将拓扑发现报文的发送次数计数器的初始值设置为堆叠系统能够支持的堆叠成员的最大数量,拓扑发现报文每被发送或转发一次,发送次数计数器的值就减1,当发送次数计数器的值为零时,则停止转发并丢弃 拓扑发现报文。另外,也可以将拓扑发现报文的发送次数计数器的初始值设置为0,拓扑发现报文每被发送或转发一次,发送次数计数器的值就加1,当发送次数计数器的值达到堆叠系统能够支持的堆叠成员的最大数量时,则停止转发并丢弃拓扑发现报文。
[0083] 步骤214:该堆叠成员判断拓扑发现报文携带的成员信息表中是否包含自身信息,如果包含,则继续执行步骤218;如果不包含,继续执行步骤215。
[0084] 步骤215~步骤217:该堆叠成员在拓扑发现报文携带的成员信息表中添加自身信息,并将拓扑发现报文携带的途经成员数量加1,然后向另一堆叠口转发该拓扑发现报文,结束当前流程。
[0085] 步骤218:该堆叠成员直接丢弃接收到的拓扑发现报文。
[0086] 图3A为本发明中邻居发现报文发送端处理流程图,如图3A所示,堆叠成员发送邻居发现报文的处理过程包括以下步骤:
[0087] 步骤301A~步骤302A:堆叠口启动连接或定时触发,该堆叠口上的相应堆叠成员填写邻居发现报文的基本内容,如报文类型、校验和等。
[0088] 步骤303A~步骤304A:该堆叠成员将自身的成员标识、状态机、角色、属主信息等信息添加至邻居发现报文中,完成邻居发现报文主体内容的构建后,再添加一些必要的以太网包头,向堆叠口发送该邻居发现报文。
[0089] 图3B为本发明中邻居发现报文接收端处理流程图,如图3B所示,堆叠成员接收到邻居发现报文的处理过程包括以下步骤:
[0090] 步骤301B:堆叠成员在堆叠口上接收到邻居发现报文。
[0091] 步骤302B:该堆叠成员判断针对接收到邻居发现报文的堆叠口是否已存在邻居信息表,如果已存在,则继续执行步骤303B;如果未存在,则继续执行步骤305B。 [0092] 步骤303B:该堆叠成员判断针对接收到邻居发现报文的堆叠口的邻居信息表是否已改变,如果已改变,则继续执行步骤304B;如果未改变,则继续执行步骤310B。 [0093] 步骤304B:该堆叠成员对针对接收到邻居发现报文的堆叠口的邻居信息表 进行更新,然后执行步骤306B。邻居信息表用于说明堆叠成员的邻居堆叠成员的信息,具体可包括:邻居堆叠成员的成员标识、状态机、角色等信息。
[0094] 步骤305B:该堆叠成员针对接收到邻居发现报文的堆叠口建立邻居信息表。 [0095] 步骤306B:该堆叠成员针对相应堆叠邻居成员设置并启动老化定时器。 [0096] 步骤307B:为避免堆叠成员接收到自身发送的邻居发现报文,该堆叠成员判断邻居信息与自身信息是否一致,如果一致,则结束当前流程;如果不一致,则继续执行步骤308B。
[0097] 步骤308B:该堆叠成员判断自身及邻居的状态是否为“主成员状态”或“已加入状态”、并且二者属主信息一致,如果是,即该堆叠成员的状态为“主成员状态”或“已加入状态”、邻居的状态为“主成员状态”或“已加入状态”、自身与邻居的属主信息一致,则继续执行步骤309B;否则,结束当前流程。
[0098] 步骤309B:启动拓扑改变通知,即构建拓扑改变通知报文,通知其他堆叠成员重新确定堆叠系统的拓扑结构,结束当前流程。
[0099] 收到拓扑改变通知报文的堆叠成员构建并发送拓扑发现报文,后续实现过程与图2描述的过程相同。
[0100] 步骤310B:该堆叠成员对针对相应堆叠邻居成员的老化定时器进行重置。 [0101] 图4A为本发明中拓扑改变通知报文发送端处理流程图,如图4A所示,堆叠成员发送拓扑改变通知报文的处理过程包括以下步骤:
[0102] 步骤401A:堆叠成员根据接收到的邻居发现报文或老化定时器超时确定邻居信息发生变化。邻居信息发生变化可以指发现新邻居、邻居信息老化、邻居的状态机发生变化等。
[0103] 步骤402A:该堆叠成员判断发生变化的邻居的状态是否为“主成员状态”或“已加入状态”,如果是,则继续执行步骤403A;如果不是,则结束当前流程。 [0104] 步骤402A的实现也可以为该堆叠成员判断自身状态是否为“待加入状态”,如果是,则结束当前流程;如果不是,则继续执行步骤403A。
[0105] 步骤403A:该堆叠成员判断自身的状态是否为“主成员状态”或“已加入状态”,如果是,则继续执行步骤404A;如果不是,则结束当前流程。
[0106] 步骤403A的实现也可以为该堆叠成员判断自身状态是否为“待加入状态”,如果是,则结束当前流程;如果不是,则继续执行步骤404A。
[0107] 步骤404A:该堆叠成员判断自身与发生变化的邻居的属主信息是否一致,如果一致,则继续执行步骤405A;如果不一致,则表明发生变化的邻居的位于该堆叠成员所属的堆叠系统之外,结束当前流程。
[0108] 步骤402~步骤404A的处理就是确定自身及邻居的状态是否为“主成员状态”或“已加入状态”、并且二者属主信息一致,执行上没用严格的前后顺序,先执行哪一具体步骤都可以。
[0109] 步骤405A:该堆叠成员对自身存储的拓扑信息表进行更新,具体处理为:该堆叠成员构建并发送拓扑发现报文,通知堆叠系统内的其他堆叠成员对拓扑结构进行更新,并等待来自于堆叠系统内的其他堆叠成员的拓扑发现报文,重新确定堆叠系统的拓扑结构,具体处理见图2描述的过程。
[0110] 步骤406A:该堆叠成员填写拓扑改变通知报文的基本内容,如报文类型、校验和等。
[0111] 步骤407A~步骤408A:该堆叠成员根据事件类型和堆叠口信息确定事件索引,然后将事件索引添加至拓扑改变通知报文中。
[0112] 步骤409A~步骤410A:该堆叠成员将自身的成员标识、状态机、角色、属主信息等信息添加至拓扑改变通知报文中,完成拓扑改变通知报文主体内容的构建后,再添加一些必要的以太网包头,向堆叠口发送该拓扑改变通知报文。
[0113] 图4B为本发明中拓扑改变通知报文接收端处理流程图,如图4B所示,堆叠成员接收到拓扑改变通知报文的处理过程包括以下步骤:
[0114] 步骤401B:堆叠成员在堆叠口上接收到拓扑改变通知报文。
[0115] 步骤402B:该堆叠成员判断自身状态是否为“主成员状态”或“已加入状态”,如果是,则继续执行步骤403B;如果不是,则继续执行步骤411B。
[0116] 步骤402B的也可以为该堆叠成员判断自身状态是否为“待加入状态”,如 果是,则继续执行步骤411B;如果不是,则继续执行步骤403B。
[0117] 步骤403B:该堆叠成员判断拓扑改变通知报文中携带的属主信息与自身的属主信息是否一致,如果一致,则继续执行步骤404B;如果不一致,则表明拓扑发现报文来自于该堆叠成员所属的堆叠系统之外,继续执行步骤411B。
[0118] 步骤404B~步骤405B:该堆叠成员提取拓扑改变通知报文中携带的事件索引,判断是否在缓存的事件索引中搜索到提取的事件索引,如果搜索到,则继续执行步骤408B;如果未搜索到,则继续执行步骤406B。
[0119] 步骤406B~步骤407B:该堆叠成员对提取的事件索引进行缓存,并对自身存储的拓扑信息表进行更新,具体处理为:该堆叠成员构建并发送拓扑发现报文,通知堆叠系统内的其他堆叠成员对拓扑结构进行更新,并等待来自于堆叠系统内的其他堆叠成员的拓扑发现报文,重新确定堆叠系统的拓扑结构,具体处理见图2描述的过程。
[0120] 步骤408B~步骤409B:该堆叠成员对拓扑改变通知报文携带的发送次数计数器进行操作,然后根据发送次数计数器的取值判断拓扑改变通知报文的发送次数是否已达到最大,如果已达到,则继续执行步骤411B;如果未达到,则继续执行步骤410B。实际应用中,可以将拓扑改变通知报文的发送次数计数器的初始值设置为堆叠系统能够支持的堆叠成员的最大数量,拓扑改变通知报文每被发送或转发一次,发送次数计数器的值就减1,当发送次数计数器的值为零时,则停止转发并丢弃拓扑改变通知报文。另外,也可以将拓扑改变通知报文的发送次数计数器的初始值设置为0,拓扑改变通知报文每被发送或转发一次,发送次数计数器的值就加1,当发送次数计数器的值达到堆叠系统能够支持的堆叠成员的最大数量时,则停止转发并丢弃拓扑改变通知报文。
[0121] 步骤410B:该堆叠成员向另一堆叠口转发该拓扑改变通知报文,结束当前流程。 [0122] 步骤411B:该堆叠成员直接丢弃接收到的拓扑改变通知报文。
[0123] 以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。