发明内容
本发明所要解决的技术问题是解决在复杂的以太网状拓扑结构中,规划比较困难、对配置人员要求较高,尤其是在网络拓扑因节点增加而改变时需要重新对拓扑进行规划配置的问题。
为了解决上述技术问题,本发明所采用的技术方案是提供一种以太环网自动发现及生成环的方法,依据生成树机制自动发现及生成环,包括以下步骤:
A、依据生成树算法选举网络拓扑根节点并设置各节点的端口状态,节点上每一个被置为阻塞状态的端口定义为一个环的环端口,环端口的宿主节点定义为环主节点;
B、环主节点从环端口向外发送环发现报文,环发现报文中携带环主节点的节点标识和环端口标识;
C、收到环发现报文的节点判断该环发现报文中的环主节点标识与自身的节点标识是否相同,如果不同就从每一个非阻塞端口分别转发出去,并且在报文中加入该节点的自身标识、入端口和出端口;如果相同,就停止向下一个节点转发,完成环发现和生成环并由环主节点开始从环端口向其他节点发送轮询包Keepalive通告整个环信息,其它环节点根据该通告更新该节点的环信息。
上述方案中,所述步骤A包括以下步骤:
A1、每一个节点阻塞使能端口,即配置了需要进行环发现、生成及保护的端口,初始化该节点的优先级向量、端口优先级向量及节点反向优先级向量,启动端口发送定时器,并以自身为根节点通过使能端口向其他节点发送配置消息,进入到到根状态;
A2、处于根状态的节点周期性发送配置消息,如果超过该端口发送定时器3倍以上的时间,该端口未收到配置消息则设置该端口打开,当收到配置消息时进行生成树选举操作,如果获胜则保持状态不变,设置端口打开,并向对方发送配置消息,如果失败则选择距离根最近的端口为根端口,更新节点向量,设置根端口打开,设置其他接收配置消息后选举失败的端口阻塞,并启动定时器WTF,进入到枝状态;
A3、处于枝状态的节点周期性发送配置消息,如果超过该端口发送定时器3倍以上的时间,该端口未收到配置消息则设置端口打开,当收到配置消息时进行生成树选举操作,如果获胜则向对方发送配置消息,设置端口打开,状态不变,如果失败则选择距离根最近的端口为根端口,更新节点向量,设置根端口打开,设置其他接收配置消息后选举失败的端口阻塞,启动定时器WTF,返回枝状态;如果端口发送定时器超时,则向其他节点发送配置消息,返回枝状态;当WTF超时时,向其他节点发送FAREST消息,声称本节点到根的最近距离最远,同时启动定时器WTF和FEXP;当该节点收到其他节点的FAREST消息时,进行反向根选举操作,如果反向根选举获胜,则向对方发送FAREST消息,启动WTF及FEXP,返回枝状态;如果反向根选举失败,则更新反向根向量,停止WTF和FEXP并转发FAREST,返回枝状态;如果FEXP超时仍然没有其他节点反对,则树生成操作完成,该节点为反向根节点,周期性发送TOK消息;在反向根选举操作中比较的内容为反向根节点优先级向量,如根节点不同就丢弃,否则,根端口路径开销大则优;如果根端口路径开销相同,指定节点ID大则优;如果指定节点ID相同,则端口ID大则优;其中优表示距离根更远,距离反向根更近。
进一步地,环自动发现及生成由环主节点发起,首先以节点标识+环端口组成RingID生成一个环,仅从环端口发送环发现报文RTRACE,并启动定时器WTT,转到环发现及生成状态;当节点收到环发现报文RTRACE后,检查该报文是否是由自身发起的,如果不是就从每一个非阻塞端口分别转发出去,并且在每一份转发报文中加入该节点的NodeID、入端口和对应出端口;如果是则完成一个环的发现过程,此时该环发现报文RTRACE记录了该环的所有节点信息及端口信息,环生成后从环端口周期性向其他节点通告环信息,其它环节点根据该通告更新该节点的环信息。
本发明还提供了一种用上述以太环网自动发现及生成环的方法为基础进行环保护的方法,该环保护的方法以轮询机制检查环完整性并结合端口状态监测进行故障检测,采用组播方式从一个节点转发到下一个节点,即环主节点从环端口发送携带有整个环信息的轮询包Keepalive,环传输节点转发,当主节点能够周期性收到Keepalive时,环处于正常状态,当一段时间不能收到Keepalive则认为环故障,通告故障并进行保护倒换;当链路故障时,节点端口状态监测将检测到故障,以中断形式触发故障通告,收到故障通告的节点刷新转发表并转发,环主节点收到故障通告,开放环端口,完成保护倒换;当故障链路状态恢复时,环主节点收到Keepalive检测到环路完整,阻塞环端口,并通告故障恢复,收到故障恢复通告的节点开放阻塞端口并刷新转发表。
在上述环保护的方法中,对于相交环拓扑结构,根据环标识确定环优先级,比较原则是RingID小则优。
对于相交环拓扑结构共享链路故障,优先级最高的环完成保护倒换后,共享链路边缘节点处理其他环的Keepalive消息时,发现下一跳直连端口故障,将以单播的形式转发到下一跳,低优先级环通过高优先级环的链路维持其环链路的完整性。
本发明,综合了生成树协议和现有环网协议原理,运用一种全新的智能环方法,改变了现有环网协议遵循的规划-配置-保护的模式,在解决复杂网络拓扑时能够完成自动环发现、自动环配置及自动环保护,故障保护切换在50ms时间内,满足运营级以太网要求,而且能够解决网络拓扑动态变化问题,从而实现环网规划和维护的自动化,适应环网的进一步演进和发展。
具体实施方式
本发明涉及生成树及环网协议的相关定义,对其中的部分定义进行了重新定义,如下:
节点标识(NodeID):用于标识节点,其结构为优先级+节点MAC,占用8字节,其中优先级占2字节;
端口标识(PortID):用于标识端口,其结构这优先级+端口号,占用4字节,其中优先级2字节;
端口优先级向量:四元组<根节点,根路径开销,指定节点,指定端口>;
反向根节点:到根节点最近距离最远的节点;
节点反向优先级向量:四元组<根节点,根端口路径开销,指定节点,根端口>;
环(Ring):物理上对应一个环形连接的以太网拓扑,在这种拓扑里,每个节点都有两个端口接入到环;
环端口(Ring Port):依据生成树机制设置的阻塞端口,环工作状态时阻塞防止环路产生,环保护状态时放开完成保护切换;
环标识(RingID):用于标识一个环,环检测发起节点标识+环端口标识,占用12字节;
域(Domain):域由整数表示的ID来标识,一组配置了相同的域ID和VLAN映射关系节点群体构成一个域;
域标识(DomainID):标识一个域,通过配置产生,4字节;
域摘要(Domain Digest):类似MSTP中配置摘要计算方法,标识域VLAN映射配置,16字节;
环主节点(Main Node):存在阻塞端口的节点,环主节点是环上的主要决策和控制节点,环发现的发起节点,环端口存在于环主节点上;
环传输节点(Transmission Node):环上除主节点之外的其它节点都可以称为传输节点。
需要说明的是,环主节点和传输节点是相对于某一个环来讲的,某一环主节点可能是另一个环的传输节点,而传输节点可能是另一个环的主节点。
本发明所提供的以太环网自动发现及生成环的方法,包括两个步骤:树生成和环自动发现及生成,上述两个步骤作为结合环网原理实现环保护的基础。
图1为一种网络拓扑示意图,图2为根据图1中的网络拓扑进行生成树示意图,图12为树生成过程状态图,下面结合图1、图2和图12为例说明树生成的过程。
图1中,以节点序号代替节点标识,端口号代替端口标识对网络拓扑结构进行了简化标识,树生成的过程如下,首先对网络拓扑结构中的所有节点进行优先级配置,节点优先级顺序依次是节点1>2>3>4>5>6,然后,假定链路开销相同,依据生成树算法,选举节点1为根节点,阻塞成环接口,节点3的端口2、节点5的端口2和3、节点6的端口2阻塞,如图2所示。在树生成稳定情况下才能进行环发现,否则,临时环会导致不可预期的环发现错误。因此,在树生成的过程中首先定义一个过程判断树生成是否已经完成,这个过程的目的是选举反向根节点,由反向根节点通告TOK(Tree-spanning is OK)消息,宣告树生成完成,拓扑稳定,具体步骤如下:
A1、每一个节点阻塞使能端口,即配置了需要进行环发现、生成及保护的端口,初始化该节点的优先级向量、端口优先级向量及节点反向优先级向量,启动端口发送定时器,并以自身为根节点通过使能端口向其他节点发送配置消息,进入到根状态;
A2、处于根状态的节点周期性发送配置消息,如果超过该端口发送定时器3倍以上的时间,未收到配置消息则设置端口状态为打开,当收到配置消息时进行生成树选举操作,如果获胜则保持状态不变,设置端口状态为打开,并向对方发送配置消息;如果失败则选择距离根最近的端口为根端口,更新节点向量,设置根端口状态为打开,设置其他接收配置消息后选举失败的端口状态为阻塞,并启动定时器WTF,进入到枝状态;
A3、处于枝状态的节点周期性发送配置消息,如果超过该端口发送定时器3倍以上的时间,未收到配置消息则设置端口状态为打开,当收到配置消息时进行生成树选举操作,如果获胜则向对方发送配置消息,设置端口状态为打开,保持枝状态不变;如果失败则选择距离根最近的端口为根端口,更新节点向量,设置根端口状态为打开,设置其他接收配置消息后选举失败的端口阻塞,启动定时器WTF,返回枝状态;如果端口发送定时器超时,则向其他节点发送配置消息,返回枝状态;当WTF超时时,向其他节点发送FAREST消息,声称本节点到根的最近距离最远,同时启动定时器WTF和FEXP(Farest-timer expired,5s);当该节点收到其他节点的FAREST消息时,进行反向根选举操作,与生成树协议根选举操作类似,比较的内容为反向根节点优先级向量,如根节点不同就丢弃,否则,端口路径开销大则优;如果根端口路径开销相同,指定节点ID大则优;如果指定节点ID相同,则端口ID大则优;其中优表示距离根更远,距离反向根更近;如果反向根选举获胜,则向对方发送FAREST消息,启动WTF及FEXP(如果已经启动则无操作),如果反向根选举失败,则更新反向根向量,停止WTF和FEXP并转发FAREST,返回枝状态;如果FEXP超时仍然没有其他节点反对,则树生成操作完成,该节点为反向根节点,周期性发送TOK。
经过上述步骤,树生成操作完成,拓扑已经稳定,此后可以开始进行环的自动发现及生成。下面以图3~图7为例并结合图13说明环自动发现及生成的过程。
环自动发现及生成由存在阻塞端口的节点即环主节点发起,该节点上的每一个阻塞端口即为一个环的环端口,对应一个环。当节点收到反向根节点发送的TOK后检查是否存在阻塞端口,如果不存在则直接转到环发现及生成状态,如果存在则开始环发现,每一个环端口发起一个环发现,首先以节点标识+环端口组成RingID生成一个环,仅从环端口发送环发现报文RTRACE(Ring-trace),并启动定时器WTT(wait-to-trace,5s),转到环发现及生成状态。当节点收到环发现报文RTRACE后,检查该报文是否是由自身发起的,如果不是由自身发起的,则首先确定出端口,每一个非阻塞端口都是一个出端口,然后从每一个出端口转发RTRACE,在RTRACE中加入自身的NodeID、入端口和对应出端口,环主节点收到自身发出的环发现报文RTRACE后,记录接收端口,完成一个环发现,该环发现报文RTRACE记录了环上的所有节点的信息,包括每一个环节点的节点标识、入端口和出端口,发现环后,环主节点开始发送轮询包Keepalive消息通告整个环信息。其中,WTT的目的在于周期性的进行环拓扑收集,当环拓扑变化时仍然能够更新环。如果WTT超时,重新开始环发现,当环主节点完成环发现后,根据环标识更新环信息。环传输节点根据Keepalive生成环,更新环信息。
如图3所示,节点3有一个阻塞端口即环端口2,要生成环3:2,从端口2发送报文RTRACE,节点2收到报文后发现端口1、2、3均处于打开状态,需要分别从端口1、2、3转发一个RTRACE的副本,转发给节点1的报文中加入自己ID、入端口4、出端口1,转发给节点4的报文中加入自己ID、入端口4、出端口2,转发给节点5的报文中加入自己ID、入端口4、出端口3,节点1接收报文后加入自身ID、入端口1、出端口2转发给节点3,节点3收到报文后发现环3-2-1-3即环3:2,更新整个环信息;节点4收到来自节点2发出的报文后加入自身ID、入端口1、出端口2转发给节点5,节点5发现从阻塞端口接收直接丢弃;节点5收到节点2转发来的报文后加入自身的ID、入端口1、出端口4转发给节点6,节点6发现从阻塞端口接收直接丢弃,至此,由节点3发起的环检测结束。
节点5有两个阻塞端口即环端口2和3,则生成环5:2和5:3,分别从端口2和3向2个方向发起环检测如图4和图5所示:
环5:2(5-4-2-5);
环5:3(5-3-1-2-5)。
节点6发起环检测如图6所示:
环6:2(6-5-2-1-3-6)
示例拓扑依据生成树机制产生4个阻塞接口,对应4个环:3:2(3-2-1-3)、5:2(5-4-2-5)、5:3(5-3-1-2-5)和6:2(6-5-2-1-3-6),如图7所示。
本发明还提供了一种环保护方法,该方法在上述方案的基础上,结合环网协议原理实现,在环正常状态下,主节点阻塞其环端口防止非控制帧形成环路并通过环轮询检测机制检测环的完整性,辅以节点端口状态监测机制进行故障检测,链路故障时,故障链路连接节点发送故障通告,主节点收到故障通告或检测到链路故障将放开环端口进行保护倒换,环中节点收到故障通告刷新转发表并转发,环工作在保护状态下;在故障消除时,主节点收到轮询包,检测到链路完整,待延时超时后,重新将环端口阻塞,并通告故障恢复,环中节点收到故障恢复通告放开阻塞端口,更新转发表并转发,环恢复到正常状态。
主节点通过周期性发送轮询包(Keepalive)检测环的完整性,主节点收到自身发送的Keepalive表明链路完整,一段时间不能收到Keepalive表明链路故障。Keepalive携带整个环信息,以组播方式转发,环传输节点收到Keepalive消息后,如果不存在对应环信息则创建环,如果已经存在则更新环信息。同时,所有环节点通过监测端口状态检测邻接链路状态,当链路故障时通告故障,收到故障通告的节点转发。任一环节点发现链路故障时都要进行故障通告,但链路故障恢复时,只有环主节点检测到环完整时才通告故障恢复。
环节点的状态与环的状态保持一致,当环工作在正常状态时,所有环节点也工作在正常状态,当环工作在保护状态时,环节点也工作在保护状态。
环主节点在整个环保护过程中状态转换及处理参见图14,在环发现及生成完成时,主节点收到自身发送的环发现报文RTRACE,创建环、启动定时器Hold、KeepaliveTimer,发送轮询包Keepalive,通告环信息,转到环主节点正常状态。
环主节点在正常状态下的转换如下:
1)KeepaliveTimer超时时,发送轮询包Keepalive,重启KeepaliveTime,状态不变;
2)收到自身发送的Keepalive消息,确定环链路是完整的,重启Hold定时器,发送轮询包Keepalive,重启KeepaliveTime,状态不变;
3)当检测到连接链路故障时,阻塞故障端口,停止Hold定时器,打开环端口,发送RNOTIFY消息通告故障,刷新转发表,转到环主节点保护状态;
4)Hold定时器超时,表示接收Keepalive消息的接口方向链路故障,打开环端口,发送RNOTIFY消息通告故障,刷新转发表,转到环主节点保护状态;
5)当收到其他节点的RNOTIFY故障通告时,停止Hold定时器,打开环端口,转发RNOTIFY通告故障、刷新转发表,转到环主节点保护状态;
环主节点在保护状态下的转换如下:
1)收到自身发送的Keepalive报文,表示链路故障恢复,启动WTR,状态不变;
2)KeepaliveTimer超时,发送Keepalive消息,重启KeepaliveTimer,状态不变;
3)WTR超时,阻塞环端口,打开阻塞端口,发送RNOTIFY通告故障恢复,刷新转发表,重启Hold,重发Keepalive,重启KeepaliveTimer,转到主节点正常状态;
环传输节点在整个环保护过程中状态转换及处理参见图15,节点第一次收到环RingID的Keepalive消息,根据RingID创建环,转发Keepalive,转到传输节点正常状态;
环传输节点正常状态下的转换如下:
1)收到Keepalive消息,转发Keepalive消息,状态不变;
2)检测到连接链路故障,阻塞故障端口,发送RNOTIFY通告故障,刷新转发表,转到传输节点保护状态;
3)收到RNOTIFY通告故障,转发RNOTIFY通告故障,刷新转发表,转到传输节点保护状态;
环传输节点保护状态下的转换如下:
1)收到Keepalive,转发Keepalive,状态不变;
2)收到RNOTIFY通告故障恢复,转发RNOTIFY,打开阻塞端口,刷新转发表,转到传输节点正常工作状态;
在相交环拓扑结构共享链路故障时,为避免保护倒换形成新的环,规定仅优先级最高的环处理故障通告进行保护倒换,其他环不进行保护倒换,但共享链路端节点收到低优先级环的Keepalive消息时发现出端口故障,而最高优先级的环处于保护状态,将Keepalive单播发送到下一跳,并对报文中的Bridge置位,这时低优先级环的报文将以高优先环链路为桥连接故障链路端节点,整个环仍然维持完整性,而且低优先级环的节点收到Bridge置位的Keepalive消息,即使不是从环入端口收到,仍然处理,而对于不是从环入端口收到的没有置位Bridge的Keepalive报文直接丢弃。环主节点根据Keepalive的Bridge标志判断该环是否通过高优先级环保持链路的完整性。这里根据环标识确定优先级,比较原则是RingID小则优,如环3:2>5:2>5:3>6:2。
如图8所示,以节点2和5之间的链路故障为例说明如下:
节点2和5之间的链路为环5:2、5:3和6:2共享,节点2和5检测到故障后,选择优先级最高的环5:2进行处理,发送故障通告,节点2阻塞链路2-5上的端口,刷新转发表,环5:2主节点打开环5:2上的阻塞端口2,设置故障链路端口1阻塞,刷新转发表,节点收到故障通告后刷新转发表并从环上另一端口转发,如图9所示:
环5:2处于保护状态,环3:2、5:3和6:1仍然处于正常工作状态。
环状态及Keepalive包路线如表1所示:
环ID |
环状态 |
Keepalive路线 |
3:2 |
工作状态 |
3-2-1-3 |
5:2 |
保护状态 |
5-4-2(不完整环) |
5:3 |
工作状态 |
5-3-1-2(-4)-5 |
6:2 |
工作状态 |
6-5(-4)-2-1-3-6 |
表1环状态及Keepalive包的路线
共享链路故障时,最高优先级环的Keepalive报文在故障链路端节点处停止转发,而低优先级环的Keepalive此时采用单播方式转发到下一跳,表4中环5:3的Keepalive报文转发到节点2时发现下一跳出口故障,而最高优先级环5:2处于保护状态,将报文改为单播转发并置位Bridge,报文经过节点4到达节点5,环主节点5从端口2收到Keepalive报文,而端口2不是环5:3的端口本应当丢弃,但报文中Bridge置位表明因共享链路故障而通过高优先级链路收到,仍然处理维持环链路的完整性;同样的道理,环6:2的报文Keepalive转发到节点5时置位Bridge并单播到下一跳2,最终节点6仍然能够收到Keepalive报文,环链路完整。
节点2和5之间的链路故障消除时,节点2和节点5仍然设置链路5-2上的端口阻塞状态,但允许Keepalive报文通过,最高优先级环5:2的主节点5收到自身发送的Keepalive表示链路状态恢复,启动恢复延时定时器WTR(Wait-to-restore),待WTR超时,阻塞环端口2,刷新转发表,发送故障恢复通告消息,同时打开故障阻塞端口,节点4收到故障恢复通告消息,刷新转发表并转发,节点2收到通告消息打开链路5-2上的端口,刷新转发表并转发,整个环重新恢复到工作状态。其他环的Keepalive消息在共享链路端节点处转发时发现出端口链路恢复,不再对Bridge置位,改为组播转发。
本发明的优点还在于在不改变整个拓扑根节点前提下,增加节点并不会引起拓扑震荡,也无需额外配置操作。由于树生成过程中消息是周期性发送的,而环发现、环保护是依次发生的,增加的节点并不改变原拓扑的逻辑关系,如图10所示:
当节点7加入后,会收到来自节点4、5的配置消息,通过选举,阻塞链路7-5之间的端口,同时通告FAREST,经过反向根节点选举,节点7成为反向根节点,负责通告TOK,收到TOK的节点根据端口角色设置端口状态,发送RTRACE收集拓扑信息,而这个过程本来就在周期性进行,只是TOK的发送节点不同,原有节点逻辑关系并不因为增加节点引起变化。节点7发起环发现及生成如图11所示:
环7:2(7-5-2-4-7)
为了更好地理解,本发明的消息均以TLV(Type Length Value)的格式承载,格式如下:
Configuration TLV
FAREST TLV
TOK TLV
RTRACE TLV
KEEPALIVE TLV
RNOTIFY TLV
本发明不局限于上述最佳实施方式,任何人应该得知在本发明的启示下作出的结构变化,凡是与本发明具有相同或相近的技术方案,均落入本发明的保护范围之内。