链路聚合在MSAP设备上的设计与实现
2013-01-31王小玫任海兰
王小玫,任海兰
(武汉邮电科学研究院光纤通信技术和网络国家重点实验室,湖北 武汉430074)
随着互联网上数据量的日益增长,运营商对采用以太网技术的数据接入设备的带宽和可靠性提出了越来越高的要求。在传统技术中,最直接的解决办法就是更换高速率设备来提高网络带宽,但这需要耗费大量人力和物力,且设备更换的开销也让运营商难以承受,因此该方法并不可取。链路聚合技术(Link Aggregation)通过将多个物理端口绑定为一个逻辑端口来增加链路带宽,同时采用备份链路的机制,有效地提高设备之间链路的可靠性,而且大大节约了成本。在不进行设备更换的条件下很好地解决链路带宽和连接可靠性问题,因此是一种很实用的技术。手工链路聚合是链路聚合的一种聚合模式,应用比较广泛,大多数运营级网络设备均支持该特性,当需要在两个直连设备间提供一个较大的链路带宽而对端设备又不支持LACP协议时,可以使用手工链路聚合。
1 MSAP介绍
MSAP(多业务接入平台)是定位于城域网边缘接入层,基于成熟的SDH技术,采用先进的GFP,VCAT,LCAS技术,融合以太网交换技术和ATM交换技术,实现TDM业务、以太网业务和ATM业务的综合传输平台[1]。MSAP支持多种业务,配置灵活,能够提供PDH、V.35、以太网的光连接和大量E1、语音接口以及多个SDH上联光接口,具有强大的组网能力。MSAP可以通过点对点透传、L2汇聚加透传和以太共享环这3种方式处理以太网业务,其中汇聚加透传是指MSAP可以在系统内部提供二层交换功能,即在一个或多个用户以太网接口与一个或多个独立的网络链路之间,提供基于以太网数据链路层的交换,实现虚拟网桥(Virtual Bridge)功能,汇聚后的数据流再通过点对点透传至MSTP网的终结点[2]。MSAP提升了接入网的组网能力和设备的集成度,实现了传输与接入设备的统一管理,降低了建网和运维成本[3]。MSAP尤其适合对带宽和业务质量有较高要求的高端企业用户。
2 链路聚合原理
链路聚合也称为端口汇聚(Port Trunking),该技术是将多个端口汇聚在一起形成一个汇聚组,实现出/入负荷在汇聚组中各个成员端口的负载均衡。传统的数据通信物理接口带宽容量主要是1 000/100/10(Mbit·s-1)[4],通过链路聚合将端口捆绑在一起成倍地增加链路带宽,如果链路使用中一个端口出现故障,网络传输的数据流可以动态地快速转向链路中其他工作正常的端口进行传输,这样,链路聚合技术在点到点链路上提供了固有的、自动的冗余性,实现了链路备份和系统容错[5]。
手工聚合的汇聚组由用户配置,不允许系统自动添加或删除汇聚组中的端口。聚合组中的端口有Selected(选中)和Unselected(未选中)两种状态。成员端口两种状态的确定主要依赖于参考端口,参考端口根据端口的双工模式和速率大小从成员端口中选出,成员端口双工速率的变化可能会影响参考端口的变化。聚合链路的总带宽等于所有处于选中状态端口的流量总和,并且聚合链路的流量会分担到各个成员端口上。这种聚合模式稳定性较好,不易受网络环境的影响。
3 手工聚合在MSAP中的实现方案
3.1 MSAP设备网络连接
MSAP的网络拓扑如图1所示,一端接PTN传输网,另一端接SDH传输网。MSAP设备主要的板卡有汇聚卡、业务卡、上联卡、网管盘及2M16卡,业务卡由于本身硬件条件及应用环境的限制不能实现聚合功能,经创新设计通过汇聚卡实现聚合功能。将业务卡向汇聚卡汇聚,在汇聚卡上配置聚合组,数据流从聚合组中处于选中状态的成员端口转发,这里的成员端口主要是汇聚卡的2个千兆口。业务卡的业务通过背板总线的交换口向汇聚卡汇聚,不同槽号业务卡通过网管界面配置向汇聚卡汇聚,使得业务卡的上联口连接到Marvell6097的百兆口,然后业务通过Marvell6097的千兆口输出到PTN传输网上进行传输。业务卡通过交叉连接盘配置交叉业务,然后通过2M16板卡下2M业务,经过E1协转和光纤收发器接到用户端。
图1 MSAP设备网络连接图
3.2 功能实现总体框架
手工聚合在MSAP上的实现框架如图2所示,主要包括配置模块和实现模块。实现模块主要包括初始化、创建/删除聚合组、添加/删除聚合端口、端口状态检测、配置同步、流量负载分担、静态选择以及驱动读写。
图2 链路聚合总体框架图
配置模块和聚合实现模块的主要内容如下:
1)配置模块。配置模块主要包括SNMP mib以及网管界面,该模块负责解析和处理用户输入的相应命令,是用户与链路聚合模块的接口。
2)初始化。初始化主要是为链路聚合的运行作准备,如全局变量的初始化、命令注册以及聚合组状态的确定(这里聚合组都初始化为无效状态,无成员端口)。
3)端口状态监测。它主要负责不停地读取端口在聚合组中的Select/Unselect状态,然后根据端口的状态重新将流量分配到各个处于选中状态的端口上。
4)创建/删除聚合组。创建聚合组就是将聚合组状态标识位置1,表示该聚合组现在有效;当聚合组中没有成员才可以将该聚合组删除,将聚合组状态标识位置0,即该聚合组无效,不能再对该聚合组进行操作。
5)向聚合组添加/删除端口。向一个聚合组中添加/删除成员端口。
6)配置同步。在对聚合接口进行配置时,聚合组中的所有成员端口的配置要进行自动同步,而且这些配置会保存在端口上,即使聚合组被删除,这些端口的配置仍然会保存。
7)负载均衡。主要是通过负载分担表的填写和hash算法来将流量尽可能均匀地分配到聚合组中处于选中状态的端口上。
8)静态选择。静态选择主要是进行聚合组中参考端口的选择以及成员端口Select/Unselect状态的确定。
9)驱动读写。将逻辑上算好的值写入芯片或从芯片中获取当前值,这里主要是操作Marvell6097提供的API函数。
3.3 关键技术
实现MSAP上的手工聚合功能最主要的部分就是确定端口的Selected/Unselected状态,根据端口状态来填写负载均衡表。涉及到的关键技术是静态选择逻辑(参考端口的选择和成员端口状态的确定)和负载均衡技术。
3.3.1 静态选择逻辑
静态选择模块包括参考端口的选择和成员端口Selected/Unselected状态的确定。
参考端口的选择规则如下:当聚合组内有处于UP状态的端口时,先比较端口的聚合优先级,优先级数值最小的端口作为参考端口;如果优先级相同,再按照端口的全双工/高速率→全双工/低速率→半双工/高速率→半双工/低速率的优先次序,选择优先次序更高、且第二类配置与对应聚合接口相同的端口作为该聚合组的参考端口;如果优先次序相同,则选择端口号最小的端口作为参考端口。
聚合组中成员端口Selected/Unselected状态的确定流程如图3所示。
图3 成员端口状态确定流程图
另外,聚合组中端口的选择遵循非抢占原则[6]。当一个聚合组中处于选中状态的端口已经达到聚合组所支持的最大端口数时,如果再添加的端口也符合选中条件,此时端口号越小越优的原则将会失效,已经处于选中状态的端口优先。这样就可以避免某个正在转发流量的端口突然中断。
3.3.2 负载均衡及动态备份
在聚合组下设置驱动后,链路聚合系统会根据特定的算法把通过聚合接口发送的报文分配到各个处于选中状态的成员端口上进行转发,以此实现流量的负载均衡。这里的负载均衡采用的是hash算法。当聚合组中成员端口的Link状态发生变化时,会影响到该端口在聚合组中的Select/Unselect状态,则需重新填写负载分担表。硬件算法得出一个hash值,然后根据该hash值和负载均衡表来确定报文从哪个端口进行转发。
汇聚卡的两个千兆口(下面简称G01,G02)属于同一个聚合组,当两个端口都属于选中状态时,负载均衡表配置如图4a所示,如果hash值为0,2,4,6,流量从G01转发,hash值为1,3,5,7,流量从G02转发,通过每个端口的报文数比例为1∶1。如果聚合组中端口的Selected/Unselected(未选中)发生变化,那么均衡表的值会随之改变,如果G02因某种原因变为未选中状态,那么负载均衡表如图4b所示,报文全部从G01进行转发,当G02再次从Unselect状态变为Select状态后,报文会再次均衡到两个千兆口上进行转发。
图4 负责均衡表配置
Marve7ll6097用到的hash算法主要采用源MAC地址和目的MAC地址异或的方法[4]。取源MAC和目的MAC的最后3 bit进行异或运算,得到的值在0~7之间,然后再根据负载分担表决定流量应该通过哪条链路进行转发。如源MAC为00-00-00-00-0F-01,目的MAC为00-00-00-00-0F-63,最后3 bit进行异或后的结果为2,则该流量将从G01转发。
调用Marvell6097提供的API函数,根据用户对聚合组的设置,对聚合组、聚合组成员端口及负载均衡表做不同的设置:
u_longLAG_SetMar6095Trunk(TRUNKING_MEMBER*tm)
{
…/*找出聚合组中的成员端口*/
gprtSetTrunkPort(dev,port,GT_TRUE,trunkld);/*开启端口的聚合功能*/
gprtSetTrunkRouting(dev,trunkId,tm→TrunkPortList);/*将聚合组的成员下发硬件*/
…/*软件求出均衡表的值*/gprtSetTrunkMaskTable(dev,i,mask)/*填写负载均衡表*/
…
}
4 功能测试与结果分析
手工链路聚合功能测试环境如图5所示,用到的主要设备有MSAP、以太网测试仪、E1协转、光纤收发器。以太网测试仪的一端用于接汇聚卡的千兆口,另一端接光纤收发器。
图5 手工链路聚合功能测试环境
通过MSAP网管界面将业务板卡(如EOS/EOP)的汇聚模式配置为向上汇聚(向汇聚卡汇聚),保证两个千兆口都处于up状态,并将汇聚卡的两个千兆口加入到同一个聚合组,然后通过交叉盘配置交叉连接,业务将通过2M16卡下到一个E1协转,然后到光纤收发器。
以太网测试仪从光纤收发器端发送源MAC为00-00-0F-00-FF-00,目的MAC是从00-00-0F-00-00-00到00-00-0F-0F-42-40的连续的1 000 000个报文,G01和G02两个端口分别收到500 000个数据包。然后再次开始发送数据的同时将G02状态设置为link down,链路L2将不再转发数据报文,G01上收到998 580个数据包,少量掉包。
根据hash算法算出的hash值为0~7,然后根据负载分担表将流量分配到各个成员端口上,两个端口都处于up状态时,测试结果与理论结果一致。在一个端口状态发生变化时,重新设置负载均衡表,在这个过程中出现少量掉包属于正常现象,可以很快恢复正常通信。
5 小结
鉴于链路带宽和可靠性对网络服务的限制以及MSAP业务卡本身的局限性,本文在了解与掌握链路聚合(Link Aggregation)原理的基础上,通过对聚合组中成员端口的配置同步、数据流的负载分担以及动态备份,实现了MSAP上手工聚合功能,该功能已经在本作者所属单位的MSAP-622设备上成功运行,功能的实现增加了MSAP-622设备的链路带宽,同时链路动态备份提高了链路可靠性,达到测试标准,可满足用户需求。
[1]李永成,乔庐峰.多业务接入平台(MSAP)的技术特点及实现[J].电视技术,2009,33(S1):103-105.
[2]徐蓓,肖萍萍.QinQ在MSAP中的设计与实现[J].电视技术,2012,36(9):78-79.
[3]刘宝庆,黄华,夏健刚.基于MSAP的边缘接入网设计方案研究[J].西华大学学报:自然科学版,2009,28(3):24-25.
[4]金星亮.基于MSTP链路聚合的研究与实现[D].成都:电子科技大学,2011.
[5]刘立.交换机链路聚合的原理与实验研究[J].信息安全与技术,2010(9):54-56.
[6]郑涛.以太网链路聚合的研究与实现[D].杭州:杭州电子科技大学,2011.