分布式链路聚合网络中的数据流处理方法和装置
技术领域
本申请涉及网络通信技术领域,特别涉及一种分布式链路聚合网络中的数据流处理方法和装置。
背景技术
IRF(Intelligent Resilient Framework,智能弹性架构)技术可以将多台交换设备组合成一个高性能的整体,目的是以尽可能少的开销,获得尽可能高的网络性能和网络可用性。支持IRF技术的设备都具备三个重要特性:分布式设备管理(DDM)、分布式链路聚合(Distributed Link Aggregation,DLA;或Distributed Trunking,DT)和分布式弹性路由(DRR)。这三项技术是完成IRF技术目标不可缺少的环节。其中,DT用于提高传输链路的可用性和容量。
普通的链路聚合技术中,只有位于同一设备的端口才能加入同一聚合组中。与普通的链路聚合技术不同,分布式链路聚合技术通过使用私有协议可以实现将两台设备上的端口加入到同一分布式聚合组中,即跨设备聚合。相对于普通的链路聚合所提供的链路级故障保护,分布式链路聚合提供了设备级冗余保护。
如图1所示,是一种采用了分布式链路聚合的网络的组网示意图,为了描述方便,可以将该种网络称为分布式链路聚合网络。图1中,交换机SW2上的端口Port1和Port2,以及SW3上的端口Port4和Port5加入到了同一个分布式聚合组中;SW2上的端口Port3和SW3上的端口Port6加入到了同一个分布式聚合组中。分布式聚合的两台设备(即,用于实现分布式链路聚合的两台设备),例如,SW2和SW3,或,SW4和SW5之间需要提供以下两个专用链路:
a、数据同步链路(ISC链路):用于设备间交互控制报文,同时还用于跨设备数据流的转发;两台设备之间只能配置一条ISC链路;ISC链路两端的端口称为ISC端口,ISC端口可以是普通端口,也可以是聚合组。
b、保活链路(Layer3peer-keepalive链路):用于在ISC链路发生故障时,通过发送保活消息来判断故障类型是ISC链路故障还是对端设备故障。
分布式链路聚合网络的二层转发模型是将分布式聚合的两台设备看作同一台设备,共享MAC(Media Access Control,媒体访问控制)转发表和影响转发的数据(例如,DHCP Snooping(Dynamic Host Configuration Protocol Snooping,动态主机配置协议窥探)表项等)。对于出接口是一个分布式聚合组的DT端口的数据流,优先从本地DT端口转发,只有当本地没有属于该分布式聚合组的UP(可用)的DT端口时,才通过ISC端口转发给对端设备实现跨设备转发。分布式链路聚合网络中禁止运行STP(Spanning Tree Protocol,生成树协议)协议,保证无环路,同时通过私有的环路检测协议来检测网络中的环路。
其中,分布式聚合组中的每一个成员端口称为DT端口。对于分布式聚合的两台设备中的任意一台设备而言,若该设备上属于某一个分布式聚合组的DT端口有多个,则会将这多个DT端口加入到一个聚合组中,为了区别于分布式聚合组,可以称该聚合组为本地聚合组,该本地聚合组的ID与该分布式聚合组的ID无关。
在分布式链路聚合技术中,非单播数据流的转发所遵循的原则是:从ISC端口收到的非单播数据报文禁止在DT端口转发,避免出现一份报文被复制多份转发的情况。而,单播数据流的转发所遵循的原则是:
a、分布式聚合的两台设备互相同步学习到的MAC地址信息;
具体的,设备1从分布式聚合组中的一个DT端口(记为DT端口1)上学习到一个MAC地址信息(记为MAC1)后,在MAC转发表中添加一个包含有MAC1及其对应的出接口的表项,其中,当本设备上属于该分布式聚合组的DT端口只有DT端口1这一个时,该出接口即为DT端口1(具体为DT端口1的端口ID),当本设备上属于该分布式聚合组的DT端口有多个时,该出接口即为这多个DT端口组成的本地聚合组(具体为这多个DT端口所属的本地聚合组的ID);然后,将MAC1携带在MAC同步消息中通过保活链路发送给设备2,其中,该MAC同步消息中还携带有分布式聚合组1的ID:1。
设备2收到该MAC同步消息后,根据该消息中的分布式聚合组的ID:1,确定出本设备上属于分布式聚合组1的DT端口;在MAC转发表中添加一个包含有MAC1及其对应的出接口的表项,其中,当本设备上属于分布式聚合组1的DT端口只有一个时,该出接口即为该DT端口,当本设备上属于分布式聚合组1的DT端口有多个时,该出接口即为这多个DT端口组成的本地聚合组。如果设备2发现本设备上属于分布式聚合组1的所有DT端口均处于DOWN(不可用)状态,则将MAC1学习到ISC端口上。
b、出接口是一个分布式聚合组的DT端口的数据流,优先从本地DT端口转发,只有当本地没有属于该分布式聚合组的UP的DT端口时,才从ISC端口发送给对端设备,由对端设备转发出去。
例如,SW2接收到单播数据报文后,根据该单播数据报文的目的MAC地址,在MAC转发表中查找对应的出接口,假设查找到的出接口为分布式聚合组1的DT端口Port3,那么,若Port3处于UP状态,则优先通过Port3转发该单播数据报文,若Port3处于DOWN状态,且本设备上属于分布式聚合组1的端口只有Port3这一个,则将该单播数据报文通过ISC端口转发给SW3,由SW3查表转发该单播数据报文。
在现有技术中,当分布式聚合的两台设备中的一台设备(为了便于描述,记为设备1)上的属于某一个分布式聚合组的所有DT端口均变为DOWN状态时,即,若本设备上属于该分布式聚合组的DT端口只有一个,且该DT端口处于DOWN状态,或,本设备上属于该分布式聚合组的DT端口有多个,且这多个DT端口均处于DOWN状态,此时,需要执行以下操作流程:
步骤S102,设备1将MAC转发表中包含有该故障的DT端口的表项删除,然后,通过ISC端口向对端设备(为了便于描述,记为设备2)发送携带有该故障的DT端口所属的分布式链路聚合组ID(为了便于描述,记为分布式链路聚合组1)的通知消息;
步骤S104,设备2收到该通知消息后,确定出本设备上属于分布式链路聚合组1的DT端口(为了便于描述,记为DT端口1),将MAC转发表中包含有该DT端口1的表项中的MAC地址信息携带在MAC同步消息中并通过ISC端口发送给设备1;
步骤S106,设备1收到该MAC同步消息后,将该消息中的MAC地址信息添加到MAC转发表中,并且,将这些MAC地址信息对应的出接口均设置为ISC端口。
经过以上流程后,设备1才能够将原本应该从故障的DT端口转发的数据流,通过ISC端口转发给设备2,由设备2转发出去。
上述流程存在以下几个问题:
(1)设备1需要删除MAC转发表中包含有该故障的DT端口的所有表项,删除表项的过程比较耗费时间,影响数据流切换性能;
(2)在删除了MAC转发表中包含有该故障的DT端口的所有表项之后,以及在收到设备2同步过来的MAC同步消息之前的这段时间内,由于在MAC转发表中查找不到匹配表项,设备1会将单播报文做广播处理,浪费了网络带宽资源;
(3)如果DT端口在UP状态和DOMN状态之间多次切换,则会导致MAC转发表项来回震荡,影响CPU(Central Processing Unit,中央处理器)的处理性能和数据的正常转发。
发明内容
本申请提供了一种分布式链路聚合网络中的数据流处理方法和装置,以解决现有技术中存在的比较耗费时间,影响数据流切换性能,浪费网络带宽资源,影响CPU的处理性能和数据的正常转发的问题。
本申请的技术方案如下:
一方面,提供了一种分布式链路聚合DT网络中的数据流处理方法,该分布式链路聚合网络中分布式聚合的两个网络设备通过ISC链路相连,且这两个网络设备中的每一个网络设备上至少有一个端口加入到同一个分布式聚合组中,该方法应用于这两个网络设备中的任一个,该方法包括:
将本设备上属于该分布式聚合组的所有DT端口加入到本地聚合组中;
接收到单播报文之后,根据MAC转发表确定该单播报文的出接口;
若确定出该单播报文的出接口为本地聚合组,则从聚合组信息表中查找到与该本地聚合组对应的成员端口列表,根据成员端口列表转发该单播报文;其中,当本设备上属于该分布式聚合组的DT端口只有一个第一DT端口时,成员端口列表为第一DT端口;当本设备上属于该分布式聚合组的DT端口有至少两个时,成员端口列表为该至少两个DT端口;
当本地聚合组变为DOWN状态时,将该成员端口列表修改为本设备上连接ISC链路的ISC端口。
另一方面,还提供了一种分布式链路聚合DT网络中的数据流处理装置,该分布式链路聚合网络中分布式聚合的两个网络设备通过ISC链路相连,且这两个网络设备中的每一个网络设备上至少有一个端口加入到同一个分布式聚合组中,该装置应用于这两个网络设备中的任一个,该装置包括:
本地聚合组加入模块,用于将本设备上属于该分布式聚合组的所有DT端口加入到本地聚合组中;
接收模块,用于接收单播报文;
出接口确定模块,用于在接收模块接收到单播报文之后,根据MAC转发表确定该单播报文的出接口;
执行模块,用于若出接口确定模块确定出该单播报文的出接口为本地聚合组,则从聚合组信息表中查找到与该本地聚合组对应的成员端口列表,根据成员端口列表转发该单播报文;其中,当本设备上属于该分布式聚合组的DT端口只有一个第一DT端口时,成员端口列表为第一DT端口;当本设备上属于该分布式聚合组的DT端口有至少两个时,成员端口列表为该至少两个DT端口;
修改模块,用于当本地聚合组变为DOWN状态时,将成员端口列表修改为本设备上连接ISC链路的ISC端口。
通过本申请的以上技术方案,在分布式聚合的两台网络设备中的任意一台上,将本设备上属于一个分布式聚合组的所有DT端口(一个或至少两个)加入到本地聚合组中,这样,从任一DT端口学习到的MAC地址对应的出接口均为本地聚合组;在接收到单播报文,并确定出该单播报文的出接口为本地聚合组后,从聚合组信息表中查找到与该本地聚合组对应的成员端口列表,根据该成员端口列表转发该单播报文,其中,当本设备上属于该分布式聚合组的DT端口只有一个第一DT端口时,该成员端口列表为第一DT端口,当本设备上属于该分布式聚合组的DT端口有至少两个时,该成员端口列表为该至少两个DT端口;这样,对于出接口为本地聚合组的单播报文,仍然会通过本地聚合组中的一个DT端口转发出去,即,通过第一DT端口或该至少两个DT端口中的一个转发出去。另外,当本地聚合组变为DOWN状态时,即,第一DT端口DOWN或该至少两个DT端口均DOWN,将该成员端口列表修改为本设备上连接ISC链路的ISC端口,这样,在接收到单播报文,并确定出该单播报文的出接口为本地聚合组后,从聚合组信息表中查找到与该本地聚合组对应的成员端口列表,根据该成员端口列表转发该单播报文,由于该成员端口列表已经修改为ISC端口,从而可以将该单播报文通过ISC端口转发给对端设备,实现了数据流切换到ISC链路的跨设备转发。通过以上技术方案,由于无论本设备上属于该分布式聚合组的DT端口只有一个还是有至少两个,都将本设备上属于该分布式聚合组的所有DT端口加入到本地聚合组中,从而MAC地址要学习到该本地聚合组上,接收到的单播报文确定出出接口是该本地聚合组后,对于本设备上属于该分布式聚合组的DT端口只有一个第一DT端口的情况,仍然会通过第一DT端口转发该单播报文,对于有至少两个的情况,仍然会从该至少两个DT端口中选择一个,通过选中的DT端口转发该单播报文;在本地聚合组中的全部DT端口都DOWN后,无需删除该本地聚合组对应的MAC转发表项,也无需等待对端设备同步MAC地址信息,而且,DT端口的状态改变也无需影响到MAC转发表项,只需将聚合组信息表中与该本地聚合组对应的成员端口列表修改为ISC端口就可以实现单播报文的出接口的变更,从而节约了时间和网络带宽资源,提高了设备故障时的切换性能,满足了设备高可靠性的需求;另外,该方法设置简单,可以满足10ms的链路快速切换性能。
附图说明
图1是分布式链路聚合网络的组网示意图;
图2是本申请实施例一的分布式链路聚合网络中的数据流处理方法的流程图;
图3是本申请实施例二的分布式链路聚合网络中分布式聚合的两个网络设备中的任一个网络设备以及该网络设备中的数据流处理装置的结构示意图。
具体实施方式
为了解决现有技术中存在的比较耗费时间,影响数据流切换性能,浪费网络带宽资源,影响CPU的处理性能和数据的正常转发的问题,本申请以下实施例中提供了一种分布式链路聚合网络中的数据流处理方法,以及一种可以应用该方法的装置。
本申请以下实施例的分布式链路聚合网络中分布式聚合的两个网络设备通过ISC链路相连,例如,这两个网络设备可以是图1中的SW2和SW3,或者是SW4和SW5,且这两个网络设备中的每一个网络设备上至少有一个端口加入到同一个分布式聚合组中。
并且,以下实施例中以这两个网络设备中的任一个网络设备上的一个分布式聚合组为例进行说明,显然,当存在多个分布式聚合组时,这多个分布式聚合组中的每一个均按照以下实施例的方法来执行即可。
实施例一
本申请实施例一的分布式链路聚合网络中的数据流处理方法可以应用于分布式聚合的两台设备中的任一个。如图2所示,该方法包括以下步骤:
步骤S202,将本设备上属于该分布式聚合组的所有DT端口加入到本地聚合组中;
在实际实施过程中,对于一个分布式聚合组,网络设备上属于该分布式聚合组的DT端口可能只有一个(该种情况称为情况一),也可能有多个(该种情况称为情况二),无论是情况一还是情况二,都将本设备上属于该分布式聚合组的所有DT端口加入到一个本地聚合组中,该本地聚合组的聚合组ID与该分布式聚合组的聚合组ID无关。这样,本设备通过DT端口接收到的单播报文的源MAC地址就会学习到本地聚合组上。
这样,在情况一中,本设备上属于该分布式聚合组的DT端口只有一个第一DT端口,会将第一DT端口加入到本地聚合组中,从而,在聚合组信息表中会添加一个包含有该本地聚合组的聚合组ID及其对应的成员端口列表的表项,其中,该成员端口列表为第一DT端口。后续,在通过第一DT端口接收到单播报文之后,在MAC转发表中添加包含有该单播报文的源MAC地址及其对应的出接口的表项,其中,该出接口为该本地聚合组,即,第一DT端口所属的本地聚合组。
在情况二中,本设备上属于该分布式聚合组的DT端口有至少两个,会将该至少两个DT端口加入到本地聚合组中,从而,在聚合组信息表中会添加一个包含有该本地聚合组的聚合组ID及其对应的成员端口列表的表项,其中,该成员端口列表为该至少两个DT端口。后续,在通过该至少两个DT端口中的任一DT端口接收到单播报文之后,在MAC转发表中添加包含有该单播报文的源MAC地址及其对应的出接口的表项,其中,该出接口为该本地聚合组,即,该至少两个DT端口所属的本地聚合组。
步骤S204,接收到单播报文之后,根据MAC转发表确定该单播报文的出接口;
在步骤S204中,当接收到单播报文之后,可以根据该单播报文的目的MAC地址等信息,在MAC转发表中查找对应的出接口。该步骤为现有技术,这里不再赘述。
步骤S206,若确定出该单播报文的出接口为本地聚合组,则从聚合组信息表中查找到与该本地聚合组对应的成员端口列表,根据该成员端口列表转发该单播报文;
在实际实施时,本地聚合组以聚合组ID标识。
在情况一中,若确定出该单播报文的出接口为以聚合组ID标识的本地聚合组,则从聚合组信息表中查找到与该本地聚合组对应的成员端口列表:第一DT端口,通过第一DT端口转发该单播报文。
在情况二中,若确定出该单播报文的出接口为以聚合组ID标识的本地聚合组,则从聚合组信息表中查找到与该本地聚合组对应的成员端口列表:该至少两个DT端口,根据预定算法从该至少两个DT端口中选择一个DT端口,通过选中的DT端口转发该单播报文。该方式为现有技术,这里不再赘述。
步骤S208,当本地聚合组变为DOWN(不可用)状态时,将该成员端口列表修改为本设备上连接ISC链路的ISC端口。
在步骤S208中,当为情况一时,由于本地聚合组中就只有第一DT端口这一个成员端口,因此,本地聚合组变为DOWN状态,即为第一DT端口变为DOWN状态;当为情况二时,由于本地聚合组中的成员端口有至少两个,因此,本地聚合组变为DOWN状态,即为该至少两个DT端口全部变为DOWN状态。
下面分别情况一和情况二加以详细地介绍。
(1)情况一
当本设备上属于该分布式聚合组的DT端口只有一个第一DT端口时,分布式链路聚合网络中的数据流处理方法包括以下步骤:
步骤S302,将第一DT端口加入到本地聚合组中;
该步骤对应于步骤S202。
在实际实施时,本地聚合组以聚合组ID标识。通过步骤S302,会在聚合组信息表中会添加一个包含有该本地聚合组的聚合组ID及其对应的成员端口列表的表项,其中,该成员端口列表为第一DT端口,如表1-1所示:
表1-1
在表1-1中,假设本地聚合组的聚合组ID为1。
后续,在通过第一DT端口接收到单播报文之后,在MAC转发表中添加包含有该单播报文的源MAC地址及其对应的出接口的表项,其中,该出接口为该本地聚合组,即,第一DT端口所属的本地聚合组。
步骤S304,同步骤S204;
步骤S306,若确定出该单播报文的出接口为本地聚合组,则从聚合组信息表中查找到与该本地聚合组对应的成员端口列表,如表1-1所示,该成员端口列表为第一DT端口,通过第一DT端口转发该单播报文;
该步骤对应于步骤S206。
步骤S308,当第一DT端口变为DOWN状态,即,本地聚合组变为DOWN状态时,将该成员端口列表修改为本设备上连接ISC链路的ISC端口,如表1-2所示:
表1-2
此时,在接收到单播报文之后,仍然按照步骤S304-S306执行,其中,在步骤S306中会根据如表1-2所示的成员端口列表转发该单播报文,即,通过本设备上连接ISC链路的ISC端口转发该单播报文,从而可以通过ISC链路转发给对端设备,由对端设备对该单播报文进行查表转发,实现了跨设备转发。这样,当本地DT端口DOWN时,可以将数据流切换到ISC链路,避免了数据流的中断。
这样,当第一DT端口变为DOWN状态时,通过将ISC端口加入到本地聚合组中,出接口是本地聚合组的单播报文仍会向该本地聚合组转发,经负荷分担选择ISC端口转发出去。
另外,在步骤S308之后,当第一DT端口从DOWN状态变为UP(可用)状态时,将如表1-2所示的成员端口列表修改为第一DT端口,此时,该成员端口列表恢复为如表1-1所示。之后,在接收到单播报文后,仍然按照步骤S304-S306进行转发,其中,在步骤S306中会根据如表1-1所示的成员端口列表转发该单播报文,即,通过第一DT端口转发该单播报文,实现本地转发。这样数据流就从ISC链路切换回了本地DT端口。
(2)情况二
当本设备上属于该分布式聚合组的DT端口有至少两个时,分布式链路聚合网络中的数据流处理方法包括以下步骤:
步骤S402,将该至少两个DT端口加入到本地聚合组中;
该步骤对应于步骤S202。
在实际实施时,本地聚合组以聚合组ID标识。通过步骤S402,会在聚合组信息表中添加一个包含有该本地聚合组的聚合组ID及其对应的成员端口列表的表项,其中,该成员端口列表为该至少两个DT端口。
例如,本设备上属于该分布式聚合组的DT端口有M(M≥2)个,记为:Port1,Port2,Port3,…,PortM,这M个DT端口加入到了一个本地聚合组(该本地聚合组的聚合组ID记为1)中,则,聚合组信息表中包含有该本地聚合组的聚合组ID(为1)及其对应的成员端口列表的表项如表2-1所示:
表2-1
聚合组ID |
成员端口列表 |
1 |
Port1,Port2,Port3,…,PortM |
后续,在通过该至少两个DT端口中的任一DT端口接收到单播报文之后,在MAC转发表中添加包含有该单播报文的源MAC地址及其对应的出接口的表项,其中,该出接口为该本地聚合组,即,该至少两个DT端口所属的本地聚合组。
步骤S404,同步骤S204;
步骤S406,若确定出该单播报文的出接口为本地聚合组,则从聚合组信息表中查找到与该本地聚合组对应的成员端口列表,此时,该成员端口列表为该至少两个DT端口,根据该成员端口列表转发该单播报文,即,根据预定算法从该至少两个DT端口中选择一个DT端口,通过选中的DT端口转发该单播报文;
该步骤对应于步骤S206。
例如,该成员端口列表如表2-1所示,则根据如表2-1所示的成员端口列表转发该单播报文的方式具体为:对该单播报文的报文头中的相关信息进行Hash(哈希)运算得到一个运算值(记为KEY),然后,计算S=KEY%M(%表示求模运算符)的值,根据S的值(S=0,1,…(M-1))从M个DT端口中选择一个DT端口,通过选择的DT端口转发该单播报文。例如,当S=0时,选择成员端口列表中的第一个DT端口,当S=1时,选择成员端口列表中的第二个DT端口,以此类推,即,S的值决定了所选的DT端口在成员端口列表中的相对位置。其中,相关信息可以是以下一种或多种的组合:源MAC地址、目的MAC地址、VLAN等。
在步骤S406中,若确定出单播报文的出接口为聚合组ID1所标识的本地聚合组,则从聚合组信息表中查找到与该聚合组ID1对应的成员端口列表,如表2-1所示,然后,按照以上转发方式从Port1,Port2,Port3,…,PortM中选择一个DT端口,通过选中的DT端口转发该单播报文。
步骤S408,当本设备上属于该分布式聚合组的一个DT端口变为DOWN状态时,即,本地聚合组中的一个DT端口变为DOWN状态时,判断本设备上属于该分布式聚合组的DT端口中是否还有处于UP状态的其他DT端口,即,判断本地聚合组中是否还有处于UP状态的其他DT端口,若有,则执行步骤S410,否则,执行步骤S412;
步骤S410,从该成员端口列表中删除该变为DOWN状态的DT端口;
假设,在步骤S408中变为DOWN状态的DT端口记为Port2,在Port2变为DOWN状态时的成员端口列表如表2-1所示,则,从Port1,Port2,Port3,…,PortM中删除Port2。此时,该成员端口列表更新为如表2-2所示:
表2-2
聚合组ID |
成员端口列表 |
1 |
Port1,Port3,…,PortM |
在接收到单播报文后,仍然按照步骤S404-S406进行转发,其中,在步骤S406中会根据如表2-2所示的成员端口列表转发该单播报文,即,按照以上转发方式从Port1,Port3,…,PortM中选择一个DT端口,通过选中的DT端口转发该单播报文。这样,数据流会自动从DOWN状态的DT端口移除,转移到UP状态的DT端口上。
步骤S412,说明本设备上属于该分布式聚合组中的所有DT端口(即本地聚合组中的所有DT端口)都变为DOWN状态了,则,将该成员端口列表修改为本设备上连接ISC链路的ISC端口;
假设,本地聚合组中的Port2在变为DOWN状态之前,只有Port2处于UP状态,而在步骤S408中,Port2也变为DOWN状态,在Port2变为DOWN状态时的成员端口列表如表2-3所示,则,将如表2-3所示的成员端口列表修改为本设备上连接ISC链路的ISC端口,此时,该成员端口列表更新为如表2-4所示:
表2-3
表2-4
步骤S408和步骤S412对应于步骤S208。
此时,在接收到单播报文之后,仍然按照步骤S404-S406执行,其中,在步骤S406中会根据如表2-4所示的成员端口列表转发该单播报文,即,通过本设备上连接ISC链路的ISC端口转发该单播报文,从而可以通过ISC链路转发给对端设备,由对端设备对该单播报文进行查表转发,实现了跨设备转发。这样,当本地DT端口全部DOWN时,可以将数据流切换到ISC链路,避免了数据流的中断。
这样,当本地聚合组中的所有成员端口均变为DOWN状态时,通过将ISC端口加入到本地聚合组中,出接口是本地聚合组的单播报文仍会向该本地聚合组转发,经负荷分担选择ISC端口转发出去。
另外,上述方法中还包括以下步骤:
步骤S502,当本设备上属于该分布式聚合组的一个DT端口从DOWN状态变为UP状态(为了描述方便,将该变为UP状态的DT端口记为PortM)时,即,本地聚合组中的一个DT端口从DOWN状态变为UP状态时,判断本设备上属于该分布式聚合组的DT端口中是否还有处于UP状态的其他DT端口,即,判断本地聚合组中是否还有处于UP状态的其他DT端口,若没有,则执行步骤S504,否则,执行步骤S506;
步骤S504,说明在PortM从DOWN状态变为UP状态之前,Port1,Port2,Port3,…,PortM全部变为了DOWN状态,此时的成员端口列表如表2-4所示;PortM是第一个变为UP状态的DT端口,则,将如表2-4所示的成员端口列表修改为PortM,该成员端口列表更新为如表2-5所示:
表2-5
此时,在接收到单播报文之后,仍然按照步骤S404-S406执行,其中,在步骤S406中会根据如表2-5所示的成员端口列表转发该单播报文,即,通过唯一处于UP状态的PortM转发该单播报文,从而数据流就从ISC链路切换回了本地DT端口。
步骤S506,说明在PortM从DOWN状态变为UP状态之前,已经有一些DT端口变为了UP状态或一直保持UP状态,假设,此时的成员端口列表如表2-6所示,则,在成员端口列表中添加PortM后,该成员端口列表更新为如表2-7所示:
表2-6
聚合组ID |
成员端口列表 |
1 |
Port1,Port2,Port3,Port4 |
表2-7
聚合组ID |
成员端口列表 |
1 |
Port1,Port2,Port3,Port4,PortM |
此时,在接收到单播报文之后,仍然按照步骤S404-S406执行,其中,在步骤S406中会根据如表2-7所示的成员端口列表转发该单播报文,即,按照以上转发方式从本地聚合组中所有处于UP状态的DT端口Port1,Port2,Port3,Port4,PortM中选择一个DT端口,通过选中的DT端口转发该单播报文。
在本申请以上实施例的技术方案中,在分布式聚合的两台网络设备中的任意一台上,将本设备上属于一个分布式聚合组的所有DT端口(一个或至少两个)加入到本地聚合组中,这样,从任一DT端口学习到的MAC地址对应的出接口均为本地聚合组;在接收到单播报文,并确定出该单播报文的出接口为本地聚合组后,从聚合组信息表中查找到与该本地聚合组对应的成员端口列表,根据该成员端口列表转发该单播报文,其中,当本设备上属于该分布式聚合组的DT端口只有一个第一DT端口时,该成员端口列表为第一DT端口,当本设备上属于该分布式聚合组的DT端口有至少两个时,该成员端口列表为该至少两个DT端口;这样,对于出接口为本地聚合组的单播报文,仍然会通过本地聚合组中的一个DT端口转发出去,即,通过第一DT端口或该至少两个DT端口中的一个转发出去。另外,当本地聚合组变为DOWN状态时,即,第一DT端口DOWN或该至少两个DT端口均DOWN,将该成员端口列表修改为本设备上连接ISC链路的ISC端口,这样,在接收到单播报文,并确定出该单播报文的出接口为本地聚合组后,从聚合组信息表中查找到与该本地聚合组对应的成员端口列表,根据该成员端口列表转发该单播报文,由于该成员端口列表已经修改为ISC端口,从而可以将该单播报文通过ISC端口转发给对端设备,实现了数据流切换到ISC链路的跨设备转发。通过以上技术方案,由于无论本设备上属于该分布式聚合组的DT端口只有一个还是有至少两个,都将本设备上属于该分布式聚合组的所有DT端口加入到本地聚合组中,从而MAC地址要学习到该本地聚合组上,接收到的单播报文确定出出接口是该本地聚合组后,对于本设备上属于该分布式聚合组的DT端口只有一个第一DT端口的情况,仍然会通过第一DT端口转发该单播报文,对于有至少两个的情况,仍然会从该至少两个DT端口中选择一个,通过选中的DT端口转发该单播报文;在本地聚合组中的全部DT端口都DOWN后,无需删除该本地聚合组对应的MAC转发表项,也无需等待对端设备同步MAC地址信息,而且,DT端口的状态改变也无需影响到MAC转发表项,只需将聚合组信息表中与该本地聚合组对应的成员端口列表修改为ISC端口就可以实现单播报文的出接口的变更,从而节约了时间和网络带宽资源,提高了设备故障时的切换性能,满足了设备高可靠性的需求;另外,该方法设置简单,可以满足10ms的链路快速切换性能。
在以上实施例中,当本设备上属于该分布式聚合组的DT端口有至少两个,这至少两个DT端口均变为DOWN状态时,这至少两个DT端口组成的本地聚合组才变为DOWN状态;当这至少两个DT端口中有至少一个DT端口处于UP状态时,该本地聚合组仍为UP状态。
实施例二
以图1所示的分布式链路聚合网络中的SW2为例,说明以上实施例一中的方法。在图1中,交换机SW2上的端口Port1和Port2,以及SW3上的端口Port4和Port5加入到了同一个分布式聚合组1中;SW2上的端口Port3和SW3上的端口Port6加入到了同一个分布式聚合组2中。SW2与SW3之间连接有ISC链路,SW2上连接该ISC链路的ISC端口为ISCPort1,SW3上连接该ISC链路的ISC端口为ISCPort2。
针对分布式聚合组1,SW2执行的方法包括:
步骤S602,将Port1和Port2加入到一个本地聚合组中,该本地聚合组的ID记为3;具体的,在聚合组信息表中添加一个包含有聚合组ID3及其对应的成员端口列表的表项,如表3-1所示:
表3-1
聚合组ID |
成员端口列表 |
3 |
Port1,Port2 |
步骤S604,在接收到单播报文,并确定出该单播报文的出接口为以聚合组ID3标识的本地聚合组后,从聚合组信息表中查找到聚合组ID3对应的成员端口列表,如表3-1所示,从该成员端口列表中的Port1,Port2中选择一个,将该单播报文通过选中的DT端口转发出去。
步骤S606,当Port1变为DOWN状态后,由于此时Port2仍然为UP状态,则将如表3-1所示的成员端口列表更新为如表3-2所示:
表3-2
此时,若接收到为以聚合组ID3标识的本地聚合组的单播报文,该单播报文就只能通过Port2转发出去。
之后,若是Port2也变为了DOWN状态,则,将如表3-2所示的成员端口列表更新为如表3-3所示:
表3-3
此时,若接收到出接口为以聚合组ID3标识的本地聚合组的单播报文,该单播报文就会通过ISCPort1转发给SW3,由SW3转发出去。
步骤S608,当Port1变为UP状态后,如果此时Port2处于DOWN状态,则将如表3-3所示的成员端口列表更新为如表3-4所示:
表3-4
此时,若接收到出接口为以聚合组ID3标识的本地聚合组的单播报文,该单播报文就会通过Port1转发出去。
之后,当Port2也变为UP状态时,将如表3-4所示的成员端口列表更新为如表3-1所示。此时,若接收到出接口为以聚合组ID3标识的本地聚合组的单播报文,就会从Port1和Port2中选择一个DT端口,该单播报文会通过选中的DT端口转发出去。
针对分布式聚合组2,SW2执行的方法包括:
步骤S702,将Port3加入到一个本地聚合组中,该本地聚合组的聚合组ID记为4;具体的,在聚合组信息表中添加一个包含有聚合组ID4及其对应的成员端口列表的表项,如表4-1所示:
表4-1
步骤S704,在接收到单播报文,并确定出该单播报文的出接口为以聚合组ID4标识的本地聚合组后,从聚合组信息表中查找到与聚合组ID4对应的成员端口列表,如表4-1所示,将该单播报文通过Port3转发出去。
步骤S706,当Port3变为DOWN状态后,由于本地聚合组4中只有Port3这一个成员端口,因此,将如表4-1所示的成员端口列表更新为如表4-2所示:
表4-2
此时,若接收到出接口为以聚合组ID4标识的本地聚合组的单播报文,该单播报文就会通过ISCPort1转发给SW3,由SW3转发出去。
步骤S708,当Port3变为UP状态后,将如表4-2所示的成员端口列表更新为如表4-1所示。
此时,接收到出接口为以聚合组ID4标识的本地聚合组的单播报文,该单播报文就会通过Port3转发出去。
实施例三
本申请实施例提出一种数据流处理方案,来实现本设备上属于一个分布式聚合组的所有DT端口DOWN时的数据流快速切换,并且,解决现有技术中存在的比较耗费时间,影响数据流切换性能,浪费网络带宽资源,影响CPU的处理性能和数据的正常转发的问题。
以软件实现为例,在一种优选的实施方式中,本申请实施例提供了一种可应用于分布式链路聚合网络中分布式聚合的两个网络设备中的任一个网络设备上的数据流处理装置。
如图3所示,该数据流处理装置10中包括以下模块:本地聚合组加入模块101、接收模块102、出接口确定模块103、执行模块104和修改模块105,其中:
本地聚合组加入模块101,用于将本设备上属于该分布式聚合组的所有DT端口加入到本地聚合组中;具体的,本地聚合组加入模块101在聚合组信息表中添加一个包含有该本地聚合组的聚合组ID和对应的成员端口列表的表项,该成员端口列表为本设备上属于该分布式聚合组的所有DT端口的端口ID;
接收模块102,用于接收单播报文;
出接口确定模块103,用于在接收模块102接收到单播报文之后,根据MAC转发表确定该单播报文的出接口;
执行模块104,用于若出接口确定模块104确定出该单播报文的出接口为本地聚合组,则从聚合组信息表中查找到与该本地聚合组对应的成员端口列表,根据该成员端口列表转发该单播报文;其中,当本设备上属于该分布式聚合组的DT端口只有一个第一DT端口时,该成员端口列表为第一DT端口;当本设备上属于该分布式聚合组的DT端口有至少两个时,该成员端口列表为该至少两个DT端口;
修改模块105,用于当本地聚合组变为DOWN状态时,将成员端口列表修改为本设备上连接ISC链路的ISC端口。
其中,本设备上属于该分布式聚合组的DT端口只有一个第一DT端口,则,当第一DT端口变为DOWN状态时,本地聚合组变为DOWN状态;或者,本设备上属于该分布式聚合组的DT端口有至少两个,则,当该至少两个DT端口均变为DOWN状态时,本地聚合组变为DOWN状态。
其中,本设备上属于该分布式聚合组的DT端口只有一个第一DT端口,则,修改模块,还用于当第一DT端口从DOWN状态变为UP状态时,将该成员端口列表修改为第一DT端口。
其中,本设备上属于该分布式聚合组的DT端口只有一个第一DT端口,则,该装置中还包括:MAC表项添加模块,用于在接收模块接收到单播报文之后,在MAC转发表中添加包含有该单播报文的源MAC地址及其对应的出接口的表项,其中,该出接口为本地聚合组。
其中,本设备上属于该分布式聚合组的DT端口有至少两个,则,该装置中还包括:判断模块和删除模块,其中:
判断模块,用于当本地聚合组中的一个DT端口变为DOWN状态时,判断本地聚合组中是否还有处于UP状态的其他DT端口;
删除模块,用于若判断模块在本地聚合组中的一个DT端口变为DOWN状态时,判断出本地聚合组中还有处于UP状态的其他DT端口,则从成员端口列表中删除该变为DOWN状态的DT端口。
其中,本设备上属于该分布式聚合组的DT端口有至少两个,则,该装置中还包括:添加模块,其中:
判断模块,还用于当本地聚合组中的一个DT端口从DOWN状态变为UP状态时,判断本地聚合组中是否还有处于UP状态的其他DT端口;
修改模块,还用于若判断模块在本地聚合组中的一个DT端口从DOWN状态变为UP状态时,判断出本地聚合组中没有处于UP状态的其他DT端口,则将成员端口列表修改为该变为UP状态的DT端口;
添加模块,用于若判断模块在本地聚合组中的一个DT端口从DOWN状态变为UP状态时,判断出本地聚合组中还有处于UP状态的其他DT端口,则在成员端口列表中添加该变为UP状态的DT端口。
本申请实施例并不排除硬件或者软硬件结合的实施方式。请参考图3所示,该数据流处理装置作为一个逻辑意义上的装置,其是通过所述网络设备的CPU将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,除了CPU、内存以及非易失性存储器之外,该网络设备通常还包括一些负责处理报文处理的硬件,比如转发芯片等等;从硬件结构上来讲,该网络设备还可能是分布式的设备,其可能包括多个接口卡以在硬件层面进行报文处理的扩展。
综上,本申请以上实施例可以达到以下技术效果:
在分布式聚合的两台网络设备中的任意一台上,将本设备上属于一个分布式聚合组的所有DT端口(一个或至少两个)加入到本地聚合组中,这样,从任一DT端口学习到的MAC地址对应的出接口均为本地聚合组;在接收到单播报文,并确定出该单播报文的出接口为本地聚合组后,从聚合组信息表中查找到与该本地聚合组对应的成员端口列表,根据该成员端口列表转发该单播报文,其中,当本设备上属于该分布式聚合组的DT端口只有一个第一DT端口时,该成员端口列表为第一DT端口,当本设备上属于该分布式聚合组的DT端口有至少两个时,该成员端口列表为该至少两个DT端口;这样,对于出接口为本地聚合组的单播报文,仍然会通过本地聚合组中的一个DT端口转发出去,即,通过第一DT端口或该至少两个DT端口中的一个转发出去。另外,当本地聚合组变为DOWN状态时,即,第一DT端口DOWN或该至少两个DT端口均DOWN,将该成员端口列表修改为本设备上连接ISC链路的ISC端口,这样,在接收到单播报文,并确定出该单播报文的出接口为本地聚合组后,从聚合组信息表中查找到与该本地聚合组对应的成员端口列表,根据该成员端口列表转发该单播报文,由于该成员端口列表已经修改为ISC端口,从而可以将该单播报文通过ISC端口转发给对端设备,实现了数据流切换到ISC链路的跨设备转发。通过以上技术方案,由于无论本设备上属于该分布式聚合组的DT端口只有一个还是有至少两个,都将本设备上属于该分布式聚合组的所有DT端口加入到本地聚合组中,从而MAC地址要学习到该本地聚合组上,接收到的单播报文确定出出接口是该本地聚合组后,对于本设备上属于该分布式聚合组的DT端口只有一个第一DT端口的情况,仍然会通过第一DT端口转发该单播报文,对于有至少两个的情况,仍然会从该至少两个DT端口中选择一个,通过选中的DT端口转发该单播报文;在本地聚合组中的全部DT端口都DOWN后,无需删除该本地聚合组对应的MAC转发表项,也无需等待对端设备同步MAC地址信息,而且,DT端口的状态改变也无需影响到MAC转发表项,只需将聚合组信息表中与该本地聚合组对应的成员端口列表修改为ISC端口就可以实现单播报文的出接口的变更,从而节约了时间和网络带宽资源,提高了设备故障时的切换性能,满足了设备高可靠性的需求;另外,该方法设置简单,可以满足10ms的链路快速切换性能。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。