发明内容
本发明提供TRILL网络中的未知单播报文转发方法及RB,以减少TRILL网络中的未知单播流量。
本发明的技术方案是这样实现的:
一种未知单播报文转发方法,应用于多链接透明互联TRILL网络,预先将路由桥RB上与其他RB互联的端口都配置为TRILL混合端口,同时,对于任一TRILL混合端口,将以本RB和与本端口直连的对端RB为分发树根桥的用户虚拟局域网CVLAN都配置为本端口允许VLAN,该方法包括:
当RB从自己的TRILL接入端口接收到未知单播报文时,查找该报文中的CVLAN ID对应的TRILL分发树的根桥,判断该根桥是否为本RB的点对点P2P邻居,若是,不为该报文封装TRILL头,直接将该报文转发给所述根桥;
当RB从自己的TRILL混合端口接收到MAC表项和对应的CVLAN ID时,若判定发送者为该CVLAN的TRILL分发树的根桥,则根据该CVLANID,将该MAC表项下发到驱动和软件中,
其中,所述MAC表项和对应的CVLAN ID为:所述根桥从TRILL混合端口接收到所述RB发来的未封装TRILL头的单播报文时,根据报文中的CVLAN ID和目的MAC地址,在驱动中查找到对应的MAC表项,将该MAC表项和对应的CVLAN ID发送给所述RB的。
当RB从自己的TRILL接入端口接收到未知单播报文时,所述判断该根桥是否为本RB的P2P邻居之后进一步包括:
RB判定该根桥不为本RB的P2P邻居,则为该报文封装组播TRILL头,TRILL头中的入口RB为本RB,出口RB为该CVLAN的TRILL分发树的根桥RB,将该报文发送出去,以使得:当对端RB从自己的TRILL混合端口接收到该封装了组播TRILL头的单播报文时,根据报文内部的CVLAN ID和目的MAC地址,在驱动和软件中查找对应的MAC表项,判断是否查找到,若是,按照查找到的MAC表项将该报文转发出去,同时,根据报文的TRILL头中的入口RB,将该MAC表项和对应的CVLAN ID发送给该入口RB。
所述方法进一步包括:
当RB从自己的TRILL混合端口接收到未封装TRILL头的单播报文时,根据报文中的CVLAN ID和目的MAC地址,在驱动中查找对应的MAC表项,判断是否查找到,若是,按照查找到的MAC表项为该报文封装单播TRILL头,其中,TRILL头中的入口RB为该报文的入TRILL混合端口对应的P2P邻居RB,报文中的跳数值为默认值减1,将该报文发送出去,同时,将该MAC表项和对应的CVLAN ID发送给所述P2P邻居RB。
当RB从自己的TRILL混合端口接收到未封装TRILL头的单播报文时,所述在驱动中查找对应的MAC表项,判断是否查找到之后进一步包括:
当RB判定未查找到时,则为该报文封装组播TRILL头,将该报文发送出去;同时,RB在软件中查找对应的MAC表项,若查找到,则查找该报文的入TRILL混合端口对应的P2P邻居,将该MAC表项和对应的CVLAN ID发送给该P2P邻居。
所述方法进一步包括:
当RB从自己的TRILL混合端口接收到封装了组播TRILL头的单播报文时,根据报文内部的CVLAN ID和目的MAC地址,在驱动和软件中查找对应的MAC表项,判断是否查找到,若查找到,则按照查找到的MAC表项将该报文转发出去,同时,根据报文的TRILL头中的入口RB,将该MAC表项和对应的CVLAN ID发送给该入口RB
所述RB将该MAC表项下发到驱动和软件中之后进一步包括:
RB从自己的TRILL接入端口接收到单播报文,根据报文中的CVLANID和目的MAC地址,在驱动中查找对应的MAC表项,若查找到且发现该表项中的出口RB的下一跳RB有多个、且其中一个为报文中的CVLAN ID对应的TRILL分发树的根桥RB,则将该报文的下一跳定为该根桥RB进行转发。
所述方法进一步包括:
预先在RB上配置各类MAC表项配置优先级为:本地MAC表项最高、CVLAN的TRILL分发树的根桥发来的MAC表项次之、全网洪泛得来的以本RB为根桥的CVLAN的MAC表项再次之、全网洪泛得来的不以本RB为根桥的CVLAN的MAC表项最低;
且,当RB同时学习到多条新MAC表项时,按照各条MAC表项的优先级的从高到低,依次将各条新MAC表项下发到软件和驱动中;
且,当RB要向软件和驱动下发新MAC表项时,若发现驱动已满,则判断驱动中是否存在优先级低于该新MAC表项的表项,若是,则在驱动中选择优先级最低且剩余老化时长最小的表项,将所选择的表项从驱动中删除,将该新MAC表项下发到软件和驱动中;否则,只将该新MAC表项下发到软件中。
一种未知单播报文转发方法,应用于TRILL网络,预先将RB上与其他RB互联的端口都配置为TRILL混合端口,同时,对于任一TRILL混合端口,将以本RB和与本端口直连的对端RB为分发树根桥的CVLAN都配置为本端口允许VLAN,该方法包括:
当RB从自己的TRILL混合端口接收到未封装TRILL头的单播报文时,根据报文中的CVLAN ID和目的MAC地址,在驱动中查找对应的MAC表项,判断是否查找到,若是,按照查找到的MAC表项为该报文封装单播TRILL头,其中,TRILL头中的入口RB为该报文的入TRILL混合端口对应的P2P邻居RB,报文中的跳数值为默认值减1,将该报文发送出去,同时,将该MAC表项和对应的CVLAN ID发送给所述P2P邻居RB;
其中,所述未封装TRILL头的单播报文为:所述P2P邻居RB从自己的TRILL接入端口接收到未知单播报文时,在判定该报文中的CVLAN ID对应的TRILL分发树的根桥为本RB的P2P邻居的情况下发送给本RB的。
当RB从自己的TRILL混合端口接收到未封装TRILL头的单播报文时,所述在驱动中查找对应的MAC表项,判断是否查找到之后进一步包括:
当RB判定未查找到时,则为该报文封装组播TRILL头,将该报文发送出去;同时,RB在软件中查找对应的MAC表项,若查找到,则查找该报文的入TRILL混合端口对应的P2P邻居,将该MAC表项和对应的CVLAN ID发送给该P2P邻居。
所述方法进一步包括:
当RB从自己的TRILL混合端口接收到封装了组播TRILL头的单播报文时,根据报文内部的CVLAN ID和目的MAC地址,在驱动和软件中查找对应的MAC表项,判断是否查找到,若是,按照查找到的MAC表项将该报文转发出去;同时,根据报文的TRILL头中的入口RB,将该MAC表项和对应的CVLAN ID发送给该入口RB。
一种RB,位于TRILL网络中,本RB上与其他RB互联的端口被配置为TRILL混合端口,同时对于任一TRILL混合端口,以本RB和与本端口直连的对端RB为分发树根桥的CVLAN都被配置为本端口允许VLAN,该RB包括:
接入端口报文处理模块:当从本设备的TRILL接入端口接收到未知单播报文时,查找该报文中的CVLAN ID对应的TRILL分发树的根桥,判断该根桥是否为本RB的P2P邻居,若是,不为该报文封装TRILL头,直接将该报文转发给所述根桥;
表项下发模块:当从本设备的TRILL混合端口接收到MAC表项和对应的CVLAN ID时,若判定发送者为该CVLAN的TRILL分发树的根桥,则根据该CVLAN ID,将该MAC表项下发到驱动和软件中。
所述接入端口报文处理模块进一步用于,当从本设备的TRILL接入端口接收到未知单播报文、且判定报文中的CVLAN ID对应的TRILL分发树的根桥不为本RB的P2P邻居,则为该报文封装组播TRILL头,TRILL头中的入口RB为本RB,出口RB为该CVLAN的TRILL分发树的根桥RB,将该报文发送出去。
所述RB进一步包括混合端口报文处理模块:当从本设备的TRILL混合端口接收到未封装TRILL头的单播报文时,根据报文中的CVLAN ID和目的MAC地址,在驱动中查找对应的MAC表项,判断是否查找到,若是,按照查找到的MAC表项为该报文封装单播TRILL头,其中,TRILL头中的入口RB为该报文的入TRILL混合端口对应的P2P邻居RB,报文中的跳数值为默认值减1,将该报文发送出去,同时,将查找到的MAC表项和对应的CVLAN ID发送给所述P2P邻居RB。
所述混合端口报文处理模块进一步用于,当从本设备的TRILL混合端口接收到未封装TRILL头的单播报文时,若在驱动中未查找到对应的MAC表项,则为该报文封装组播TRILL头,将该报文发送出去,同时,在软件中查找对应的MAC表项,若查找到,则查找该报文的入TRILL混合端口对应的P2P邻居,将该MAC表项和对应的CVLAN ID发送给该P2P邻居。
所述混合端口报文处理模块进一步用于,当从本设备的TRILL混合端口接收到封装了组播TRILL头的单播报文时,根据报文内部的CVLAN ID和目的MAC地址,在驱动和软件中查找对应的MAC表项,判断是否查找到,若是,按照查找到的MAC表项将该报文转发出去;同时,根据报文的TRILL头中的入口RB,将该MAC表项和对应的CVLAN ID发送给该入口RB。
所述接入端口报文处理模块进一步用于,当从本设备的TRILL接入端口接收到单播报文,根据报文中的CVLAN ID和目的MAC地址,在驱动中查找对应的MAC表项,若查找到且发现该表项中的出口RB的下一跳RB有多个,且其中一个为报文中的CVLAN ID对应的TRILL分发树的根桥RB,则将该报文的下一跳定为该根桥RB进行转发。
所述表项下发模块进一步用于,记录各类MAC表项的配置优先级:本地MAC表项最高、CVLAN的TRILL分发树的根桥发来的MAC表项次之、全网洪泛得来的以本RB为根桥的CVLAN的MAC表项再次之、全网洪泛得来的不以本RB为根桥的CVLAN的MAC表项最低;当要向软件和驱动下发新MAC表项时,按照MAC表项的优先级的从高到低,将MAC表项下发到软件和驱动中;且,当要向软件和驱动下发新MAC表项时,若发现驱动已满,则判断驱动中是否存在优先级低于该新MAC表项的表项,若是,则在驱动中选择优先级最低且剩余老化时长最小的表项,将所选择的表项从驱动中删除,将该新MAC表项下发到软件和驱动中;否则,只将该新MAC表项下发到软件中。
一种RB,位于TRILL网络中,本RB上与其他RB互联的端口被配置为TRILL混合端口,同时对于任一TRILL混合端口,以本RB和与本端口直连的对端RB为分发树根桥的CVLAN都被配置为本端口允许VLAN,该RB包括:
混合端口报文处理模块:当从本设备的TRILL混合端口接收到封装了组播TRILL头的单播报文时,根据报文内部的CVLAN ID和目的MAC地址,在驱动和软件中查找对应的MAC表项,判断是否查找到,若是,按照查找到的MAC表项将该报文转发出去;同时,根据报文的TRILL头中的入口RB,将该MAC表项和对应的CVLAN ID发送给该入口RB。
所述混合端口报文处理模块进一步用于,当从TRILL混合端口接收到未封装TRILL头的单播报文时,若未在驱动中查找到对应的MAC表项,则为该报文封装组播TRILL头,将该报文发送出去;同时,在软件中查找对应的MAC表项,若查找到,则查找该报文的入TRILL混合端口对应的P2P邻居,将该MAC表项和对应的CVLAN ID发送给该P2P邻居。
所述混合端口报文处理模块进一步用于,当从TRILL混合端口接收到封装了组播TRILL头的单播报文时,根据报文内部的CVLAN ID和目的MAC地址,在驱动和软件中查找对应的MAC表项,判断是否查找到,若是,按照查找到的MAC表项将该报文转发出去;同时,根据报文的TRILL头中的入口RB,将该MAC表项和对应的CVLAN ID发送给该入口RB。
可见,本发明中,在保证未知单播流量成功转发的同时,降低了TRILL网络中的未知单播流量。
具体实施方式
下面结合附图及具体实施例对本发明再作进一步详细的说明。
本发明中,将RB分为接入层RB和根桥RB。这里,接入层RB和根桥RB是针对某个用户VLAN(CVLAN,Customer VLAN)而言的即,对于一个CVLAN,根桥RB指的是作为该CVLAN的TRILL分发树的根桥的RB,相对地,接入层RB指的是不为该CVLAN的TRILL分发树的根桥的RB。可以看出,对于一个RB来说,针对这个CVLAN,该RB可能是接入层RB,针对另一个CVLAN,该RB可能就是根桥RB了。
图2为本发明实施例提供的TRILL网络中的RB学习MAC表项的方法流程图,如图2所示,其具体步骤如下:
步骤201:将RB上与其他RB互联的端口都配置为TRILL混合(Hybrid)端口,同时,对于RB的任一TRILL Hybrid端口,将以本RB和本端口直连的对端RB为分发树根桥的CVLAN都配置为本端口允许VLAN。
这里,将一个RB上与其他RB互联的端口都配置为TRILL Hybrid端口即,对于一个RB来说,若一个端口直接或间接连接了另一个RB,则该端口要被配置为TRILL Hybrid端口。
步骤202:对于任一RB,预先为该RB上的各类MAC表项配置优先级为:本地MAC表项最高、CVLAN的TRILL分发树的根桥发来的MAC表项次之、全网洪泛得来的以自己为根桥的CVLAN的MAC表项再次之、全网洪泛得来的不以自己为根桥的CVLAN的MAC表项最低。
本地MAC表项,即针对本地MAC地址的表项。
步骤203:对于任一RB,当该RB同时学习到多条新MAC表项时,按照各条MAC表项的优先级的从高到低,依次将各条新MAC表项下发到软件和驱动中;且,当向软件和驱动下发新MAC表项时,若发现驱动已满,且驱动中存在优先级低于该新MAC表项的表项,则在驱动中选择优先级最低且剩余老化时长最小的表项,将所选择的表项从驱动中删除(软件中的该表项仍然保留),将该新MAC表项下发到软件和驱动中;且,当向软件和驱动下发新MAC表项时,若发现驱动已满,且驱动中不存在优先级低于该新MAC表项的表项,则只将该新MAC表项下发到软件中。
这里,RB学习到的新MAC表项指的是:本地MAC表项、CVLAN的TRILL分发树的根桥发来的MAC表项、全网洪泛得来的MAC表项之一。
可见,对于RB来说,驱动和软件中的MAC表项并不一定保持同步。
对于RB来说,当由于老化或者表项内容更新而需要删除一条MAC表项时,要将该表项从驱动和软件中同时删除。
图3为本发明实施例一提供的TRILL网络中的未知单播报文转发方法流程图,本实施例针对接入层RB与根桥RB全连接即,中间不跨接其他RB的场景,如图3所示,其具体步骤如下:
步骤301:接入层RB从自己的TRILL access端口接收到单播报文,根据报文中的CVLAN ID和目的MAC地址,在驱动中查找对应的MAC表项,未查找到,则确定为未知单播报文,查找该报文中的CVLAN ID对应的TRILL分发树的根桥,若发现该根桥为本RB的P2P邻居,则不为该报文封装TRILL头,直接将该报文转发给该CVLAN的TRILL分发树的根桥RB。
步骤302:根桥RB从自己的TRILL Hybrid端口接收到该未封装TRILL头的单播报文,根据报文中的CVLAN ID和目的MAC地址,在驱动中查找对应的MAC表项。
这里,若一个汇聚层RB从自己的TRILL Hybrid端口接收到了未封装TRILL头的单播报文,且发现自己不为该报文中的CVLAN的TRILL分发树的根桥,则直接丢弃该报文即可。
步骤303:根桥RB判断是否查找到,若是,执行步骤304;否则,执行步骤306。
步骤304:根桥RB按照查找到的MAC表项为该报文封装单播TRILL头,其中,TRILL头中的Egress RB为该MAC表项中的Egress RB,TRILL头中的Ingress RB为该报文的入TRILL Hybrid端口对应的P2P邻居RB,跳数(HopCount)为默认值减一,将该报文发送出去;同时,根桥RB查找该报文的入TRILL Hybrid端口对应的P2P邻居,将该MAC表项和对应的CVLAN ID发送给该P2P邻居,即步骤301中的接入层RB。
本步骤中,根桥RB可将MAC表项和对应的CVLAN ID通过终端地址分发信息(ESADI,End Station Address Distribution Information)或TRILL中间系统到中间系统(ISIS,Intermediate System to Intermediate System)协议报文发送给接入层RB。
由于接入层RB发来的是未封装TRILL头的单播报文,因此,根桥RB无法从报文得知发送者是谁,此时,根桥RB可查找该报文的入TRILLHybrid端口对应的P2P邻居,该P2P邻居即为该报文的发送者。
本步骤中,在根桥RB将MAC表项和CVLAN ID发送给接入层RB后,在一定时间内,如:1分钟内,根桥RB不会再将该MAC表项和CVLAN ID以任何方式发送给该接入层RB。
步骤305:接入层RB接收根桥RB发来的该MAC表项和CVLAN ID,发现发送者为该CVLAN的TRILL分发树的根桥,则将该MAC表项下发到驱动和软件中该CVLAN下的MAC表中,本流程结束。
本步骤中,接入层RB在将MAC表项下发到驱动和软件中时,具体操作见步骤203。
此后,当再接收到同样目的MAC地址的单播报文后,接入层RB就可在驱动中查找到对应的MAC表项了,按照已知单播报文进行转发;这里,需要说明的是,若该MAC表项中的Egress RB的下一跳RB有多个,且其中一个为报文中的CVLAN ID对应的TRILL分发树的根桥RB,则需要将该报文的下一跳定为该根桥RB进行转发,以防止乱序。
步骤306:根桥RB为该报文封装组播TRILL头,将该报文发送出去;同时,在软件中查找对应的MAC表项,若查找到,则查找该报文的入TRILL Hybrid端口对应的P2P邻居,将该MAC表项和对应的CVLAN ID发送给该P2P邻居,即步骤301中的接入层RB。
本步骤中,根桥RB可将MAC表项和对应的CVLAN ID通过ESADI或TRILL ISIS协议报文发送给接入层RB。
本步骤中,若根桥RB在软件中未查找到对应的MAC表项,则不作进一步处理。
步骤307:接入层RB接收根桥RB发来的该MAC表项和CVLAN ID,若判定发送者为该CVLAN的TRILL分发树的根桥,则将该MAC表项下发到驱动和软件中该CVLAN下的MAC表中。
本步骤中,接入层RB在将MAC表项下发到驱动和软件中时,具体操作见步骤203。
图4为本发明实施例二提供的TRILL网络中的未知单播报文转发方法流程图,本实施例针对接入层RB与根桥RB非全连接即,中间跨接其他RB的场景,如图4所示,其具体步骤如下:
步骤401:接入层RB从自己的TRILL access端口接收到单播报文,根据报文中的CVLAN ID和目的MAC地址,在驱动中查找对应的MAC表项,未查找到,则确定为未知单播报文,查找该报文中的CVLAN ID对应的TRILL分发树的根桥,若发现该根桥不为本RB的P2P邻居,则为该报文封装组播TRILL头,TRILL头中的Egress RB为该CVLAN的TRILL分发树的根桥RB。
报文的外部目的MAC地址为all RBs即,代表所有RB的MAC地址,外部源MAC地址为接入层RB的MAC地址。
步骤402:根桥RB接收到该封装了组播TRILL头的单播报文,根据报文内部的CVLAN ID和内部的目的MAC地址,在驱动和软件中查找对应的MAC表项。
步骤403:根桥RB判断是否查找到,若是,执行步骤404;否则,执行步骤406。
步骤404:根桥RB按照查找到的MAC表项将该报文发送出去,同时根据报文的TRILL头中的Ingress RB,将该MAC表项和CVLAN ID发送给该Ingress RB,即步骤401中的接入层RB。
本步骤中,根桥RB可将MAC表项和对应的CVLAN ID通过ESADI或TRILL ISIS协议报文发送给接入层RB。
本步骤中,在根桥RB将该MAC表项发送给接入层RB后,在一定时间内,如:1分钟内,根桥RB不会再将该MAC表项以任何方式发送给该接入层RB。
步骤405:接入层RB接收根桥RB发来的该MAC表项和CVLAN ID,若判定发送者为该CVLAN的TRILL分发树的根桥,则将该表项下发到驱动和软件中该CVLAN下的MAC表中,本流程结束。
本步骤中,接入层RB在将MAC表项下发到驱动和软件中时,具体操作见步骤203。
此后,当再接收到同样目的MAC地址的单播报文后,接入层RB就可在驱动中查找到对应的MAC表项了,按照已知单播报文进行转发。
步骤406:根桥RB将该报文转发给该CVLAN的TRILL分发树的叶子节点。
以下给出本发明的应用示例:
以图5为例,其中,RB1为CVLAN100的TRILL分发树的根桥,RB3为CVLAN200的TRILL分发树的根桥。
示例一、针对接入层RB与TRILL分发树根桥RB为P2P邻居的情况:
步骤01:服务器S1通过链路L1发出一个目的MAC地址为S2,CVLAN为100的报文。
步骤02:RB4接收该报文,根据报文中的CVLAN ID和目的MAC地址,在驱动中查找对应的MAC表项,未查找到,且发现CVLAN100的TRILL分发树根桥为RB1,且RB1为自己的P2P邻居,则RB4不为该报文封装TRILL头,直接将报文发送给RB1。
步骤03:RB1接收到该未封装TRILL头的单播报文,根据报文中的CVLAN ID的目的MAC地址,在驱动中查找对应的MAC表项,查找到,且表项中的Egress RB为RB7,则为该报文封装TRILL头,TRILL头中的Egress RB为RB7,Ingress RB伪造为RB4,HopCount为默认值-1,然后进行正常TRILL转发流程,报文将从链路L4到达RB7;同时,RB1将查找到的MAC表项和CVLAN100发送给RB4。
步骤04:RB4接收到RB1发来的该MAC表项和CVLAN100后,判定该表项是从CVLAN100的TRILL分发树根桥RB1发来的,则将该MAC表项下发到驱动和软件中CVLAN100下的MAC表中。
对于本示例,若采用现有技术,则RB4在收到S1发来的未知单播报文后,会为该报文封装组播TRILL头,这样,报文将通过链路L2、L3、L4、L5发送给RB1、RB7、RB3以及S2,其中L5以及RB3收到后只能将该报文丢弃,浪费了链路带宽以及RB3的CPU资源。而使用本发明,L5以及RB3完全不会收到该报文。
示例二、针对接入层RB与TRILL分发树根桥RB不为P2P邻居的情况:
步骤01:S1通过L1发出一个目的MAC地址为S2,CVLAN为200的报文。
步骤02:RB4接收到该报文,根据报文中的CVLAN ID和目的MAC地址,在驱动中查找对应的MAC表项,未查找到,且发现CVLAN200的TRILL分发树的根桥为RB3,且RB3不为自己的P2P邻居,则为报文封装组播TRILL头,TRILL头的Ingress RB为RB4,Egress RB=RB3。
步骤03:当RB3收到该封装了组播TRILL头的单播报文后,查看报文内部的CVLAN ID,发现自己为该CVLAN200的TRILL分发树的根桥,则根据报文内部的目的MAC地址,在驱动/软件中查找对应的MAC表项,若查找到,则根据该MAC表项将该单播报文发送出去;同时,根据报文的TRILL头中的Ingress RB:RB4,将该MAC表项和CVLAN200发送给RB4。
步骤04:RB4接收到该MAC表项和CVLAN200后,判定表项中的CVLAN为200,且该MAC表项是从CVLAN200的TRILL分发树的根桥RB3发来的,则将该MAC表项下发到驱动和软件中CVLAN200下的MAC表中。
对于本示例,若采用现有技术,RB4在收到S1发来的未知单播报文后,会为该报文封装组播TRILL头,这样,报文将通过链路L2、L3、L4、L5发送给RB1、RB7、RB3以及S2,其中L5以及RB3收到后只能将该报文丢弃,且除非RB4通过全网洪泛学习到该MAC表项,否则,该流量此后会被一直发送到L5以及RB3,浪费了链路带宽以及RB3的处理。而使用本发明后,L5以及RB3除了报文开始发送起到从RB3学习到MAC表项止,此后不会再收到该条流量。
示例三、针对接入层RB与TRILL分发树根桥RB为P2P邻居的情况:
步骤01:S1通过L1发出一个目的MAC地址为S2,CVLAN为100的报文。
步骤02:RB4接收到该报文,根据报文中的CVLAN ID和目的MAC地址,在驱动中查找对应的MAC表项,未查找到,且发现CVLAN100的TRILL分发树的根桥为RB1,且RB1为自己的P2P邻居,则RB4不为该报文封装TRILL头,将报文直接发送给RB1。
步骤03:RB1接收到该未封装TRILL头的报文,根据报文中的CVLANID和目的MAC地址,在驱动中查找对应的MAC表项,未查找到,则为该报文封装组播TRILL头,TRILL头中的Ingress RB伪造为RB4,HopCount为默认值-1,然后进行正常TRILL转发流程,报文将从L4到达RB7再到达S2;同时,RB1在软件中查找对应MAC表项,查找到,确定报文的入TRILL Hybrid端口对应的P2P邻居为RB4,将该MAC表项和CVLAN100发送给RB4。
步骤04:RB4接收到该MAC表项和CVLAN为100后,判定该MAC表项是从CVLAN100的TRILL分发树的根桥RB1发来的,则将该MAC表项下发到驱动和软件中CVLAN100下的MAC表中。
对于本示例,若采用现有技术,除非RB4通过全网洪泛学习到该流量的MAC表项,否则,该流量会一直进行未知单播转发,通过L2、L3、L4、L5发送给RB1、RB7、RB3以及S2,其中L5以及RB3收到后只能将该流量丢弃,浪费了链路带宽以及RB3的处理。而使用了本发明,充分利用了RB1的软件资源,L5以及RB3除了从报文第一次发送起到RB4从RB1学习到MAC表项止,此后L5以及RB3不会再收到该条流量。
图6为本发明实施例一提供的TRILL网络中的RB的组成示意图,该RB上与其他RB互联的端口被配置为TRILL混合端口,同时对于任一TRILL混合端口,以本RB和该端口直连的对端RB为分发树根桥的CVLAN都被配置为本端口允许VLAN,如图6所示,该RB主要包括:接入端口报文处理模块61、混合端口报文处理模块62、表项下发模块63、驱动MAC表模块64和软件MAC表模块65,其中:
接入端口报文处理模块61:当从本设备的TRILL接入端口接收到单播报文时,在驱动MAC表模块64中查找对应的MAC表项,若未查找到,确定为未知单播报文,确定该报文中的CVLAN ID对应的TRILL分发树的根桥,判断该根桥是否为本RB的P2P邻居,若是,不为该报文封装TRILL头,直接将该报文转发给该根桥RB。
混合端口报文处理模块62:当从本设备的TRILL混合端口接收到未封装TRILL头的单播报文时,根据报文中的CVLAN ID和目的MAC地址,在驱动MAC表模块64中查找对应的MAC表项,判断是否查找到,若是,按照查找到的MAC表项为该报文封装单播TRILL头,其中,TRILL头中的入口RB为该报文的入TRILL混合端口对应的P2P邻居RB,将报文中的HopCount设为默认值减1,将该报文发送出去,同时,将查找到的MAC表项和对应的CVLAN ID发送给该P2P邻居RB。
表项下发模块63:当从本设备的TRILL混合端口接收到MAC表项和对应的CVLAN ID时,若判定发送者为该CVLAN的TRILL分发树的根桥,则根据该CVLAN ID,将该MAC表项下发到驱动MAC表模块64和软件MAC表模块65中。
驱动MAC表模块64:存储MAC表项。
软件MAC表模块65:存储MAC表项。
混合端口报文处理模块62进一步用于,当从本设备的TRILL混合端口接收到未封装TRILL头的单播报文时,若在驱动MAC表模块64中未查找到对应的MAC表项,则为该报文封装组播TRILL头,将该报文发送出去,同时,在软件MAC表模块65中查找对应的MAC表项,若查找到,则查找该报文的入TRILL混合端口对应的P2P邻居,将该MAC表项和对应的CVLAN ID发送给该P2P邻居。
接入端口报文处理模块61进一步用于,当从本设备的TRILL接入端口接收到未知单播报文、且判定报文中的CVLAN ID对应的TRILL分发树的根桥不为本RB的P2P邻居,则为该报文封装组播TRILL头,TRILL头中的入口RB为本RB,出口RB为该CVLAN的TRILL分发树的根桥RB,将该报文发送出去;同时,混合端口报文处理模块62进一步用于,当从本设备的TRILL混合端口接收到封装了组播TRILL头的单播报文,根据报文内部的CVLAN ID和目的MAC地址,在驱动MAC表模块64和软件MAC表模块65中查找对应的MAC表项,判断是否查找到,若是,按照查找到的MAC表项将该报文转发出去;同时,根据报文的TRILL头中的入口RB,将该MAC表项和对应的CVLAN ID发送给该入口RB。
接入端口报文处理模块61进一步用于,当从本设备的TRILL接入端口接收到单播报文,根据报文中的CVLAN ID和目的MAC地址,在驱动MAC表模块64中查找对应的MAC表项,若查找到且发现该表项中的出口RB的下一跳RB有多个,且其中一个为报文中的CVLAN ID对应的TRILL分发树的根桥RB,则将该报文的下一跳定为该根桥RB进行转发。
表项下发模块63进一步用于,记录各类MAC表项的配置优先级:本地MAC表项最高、CVLAN的TRILL分发树的根桥发来的MAC表项次之、全网洪泛得来的以本RB为根桥的CVLAN的MAC表项再次之、全网洪泛得来的不以本RB为根桥的CVLAN的MAC表项最低;当要向软件MAC表模块65和驱动MAC表模块64下发新MAC表项时,按照MAC表项的优先级的从高到低进行下发。
表项下发模块63进一步用于,当要向软件MAC表模块65和驱动MAC表模块64下发新MAC表项时,若发现驱动已满,则判断驱动MAC表模块64中是否存在优先级低于该新MAC表项的表项,若是,则在驱动MAC表模块64中选择优先级最低且剩余老化时长最小的表项,将所选择的表项从驱动MAC表模块64中删除,将该新MAC表项下发到软件MAC表模块65和驱动MAC表模块64中;否则,只将该新MAC表项下发到软件MAC表模块65中。
图7为本发明实施例二提供的TRILL网络中的RB的组成示意图,该RB上与其他RB互联的端口被配置为TRILL混合端口,同时对于任一TRILL混合端口,以本RB和本端口直连的对端RB为分发树根桥的CVLAN都被配置为本端口允许VLAN,如图7所示,该RB主要包括:接入端口报文处理模块71、混合端口报文处理模块72、表项下发模块73、驱动MAC表模块74和软件MAC表模块75,其中:
接入端口报文处理模块71:当从本设备的TRILL接入端口接收到单播报文时,在驱动MAC表模块74中查找对应的MAC表项,若未查找到,确定为未知单播报文,确定该报文中的CVLAN ID对应的TRILL分发树的根桥,判断该根桥是否为本RB的P2P邻居,若不是,则为该报文封装组播TRILL头,TRILL头中的入口RB为本RB,出口RB为该CVLAN的TRILL分发树的根桥RB,将该报文发送出去。
混合端口报文处理模块72:当从本设备的TRILL混合端口接收到封装了组播TRILL头的单播报文,根据报文内部的CVLAN ID和目的MAC地址,在驱动MAC表模块74和软件MAC表模块75中查找对应的MAC表项,判断是否查找到,若是,按照查找到的MAC表项将该报文转发出去;同时,根据报文的TRILL头中的入口RB,将该MAC表项和对应的CVLAN ID发送给该入口RB。
表项下发模块73:当从本设备的TRILL混合端口接收到MAC表项和对应的CVLAN ID时,若判定发送者为该CVLAN的TRILL分发树的根桥,则根据该CVLAN ID,将该MAC表项下发到驱动MAC表模块74和软件MAC表模块75中。
驱动MAC表模块74:存储MAC表项。
软件MAC表模块75:存储MAC表项。
表项下发模块73进一步用于,记录各类MAC表项的配置优先级:本地MAC表项最高、CVLAN的TRILL分发树的根桥发来的MAC表项次之、全网洪泛得来的以本RB为根桥的CVLAN的MAC表项再次之、全网洪泛得来的不以本RB为根桥的CVLAN的MAC表项最低;当要向软件MAC表模块75和驱动MAC表模块74下发新MAC表项时,按照MAC表项的优先级的从高到低进行下发。
表项下发模块73进一步用于,当要向软件MAC表模块75和驱动MAC表模块74下发新MAC表项时,若发现驱动已满,则判断驱动MAC表模块74中是否存在优先级低于该新MAC表项的表项,若是,则在驱动MAC表模块74中选择优先级最低且剩余老化时长最小的表项,将所选择的表项从驱动MAC表模块74中删除,将该新MAC表项下发到软件MAC表模块75和驱动MAC表模块74中;否则,只将该新MAC表项下发到软件MAC表模块75中。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。