一种分布式ACR中PPPoE快速转发的实现
2014-02-28王高伟张吉兴肖志辉陈一山
王高伟,张吉兴,肖志辉,,陈一山
(1.西南交通大学信息科学与技术学院 成都610031;2.电子科技大学通信与信息工程学院 成都611731;3.迈普通信技术股份有限公司 成都610041)
1 引言
随着高清在线视频业务为代表的高带宽业务的不断发展,高带宽业务成为当前互联网发展过程中的一个重要特点。为了吸引用户并提升用户黏性,网络业务提供者都致力于不断提升用户的感官体验,因此从长期趋势来看,用户对网络带宽的需求将继续呈现爆发式增长趋势。当前网络带宽的提供能力、服务质量保障能力等面临巨大挑战,网络基础设施的承载能力必须能够与实际相匹配,并且具有足够的弹性和自适应性才能满足需求环境的快速发展。在此背景下,许多的新技术得以提出和发展,CDN(content distribution network,内容分发网络)、网络存储等技术的实施一定程度上缓解了现实压力,但未能从根本上解决问题。三网融合的提出及其实施,使得IP网的承载能力面临着更大的挑战,这一点在接入层面体现得更为突出。在融合网络环境中,以高带宽视频业务为代表的新型业务将以更快的速度出现,新的更加严峻的带宽矛盾将很快呈现。然而,传统的接入网长期存在接入层级多、设备种类多、宽带提供能力差、维护管理复杂等突出问题,使得“带宽不宽”的局面长期存在。网络用户不得不面对上网体验差、网络故障频发的无奈局面,而网络运营商面临着设备更新换代频繁、用户投诉多且故障处理效率低的困境。
在此背景下,源自3Tnet的大规模接入汇聚路由器(large-scale access convergence router,ACR)[1]具备高带宽提供能力等特点和优势,成为摆脱上述困扰的优先选择,为三网融合的深度发展提供了基础的设备保障。本文从接入层面上考虑,研究实现ACR中的PPPoE(PPP over Ethernet,以太网上的点对点协议)[2]功能,以大规模大容量接入为目标,在分布式路由器上实现PPPoE接入认证。ACR的研究与实现能有效降低网络的异构复杂度,使其用最少的互联级数,达到降低时延和抖动的目的,用带有远端用户接口单元,分合路器组成的树形分叉地域分布式系统架构,保证大规模的用户接入。在大规模汇聚接入条件下的交换节点具有更好的资源共享性和经济性、更低的用户平均响应时间,大规模接入有利于简化管理复杂度,降低运营成本,使边缘网络到用户接口的管理一体化。ACR的网络位置如图1所示。
图1 ACR的网络位置
2 PPPoE
在众多的接入技术中,把多个主机连接到接入设备的最经济的方法就是以太网,而PPP(point to point protocol,点对点协议)[3]可以提供良好的访问控制和计费功能,为了在以太网上利用PPP既有的访问控制和计费功能,于是就产生了在以太网上传输PPP报文的PPPoE。
PPPoE可以分为3个阶段,发现阶段、会话阶段和终止阶段。PPPoE链路建立的前两个阶段如图2所示。
图2 PPPoE链路建立报文交互过程
2.1 PPPoE的发现阶段
PPPoE发现阶段共有4个部分组成。它们是由4条交互报文完成。首先,客户端PC利用广播发送一个PADI报文(PPPoE active discovery initiation packet),报文信息包含了告诉对端其想要获得的服务类型。这时,所有的访问集中设备都会收到PC端发来的PADI报文,并回复一个单播报文,告知PC端其能够提供它所要的服务。复杂的网络拓扑结构决定了PC会收到不同访问集中设备发来的PADO报文(PPPoE active discovery offer packet),此时PC把最先收到的PADO报文对应的访问集中设备作为自己的通信方,并单播发送一个PADR报文 (PPPoE active discovery request packet)。访问集中设备收到报文并确定一个唯一的会话ID,通过发送一个PADS报文(PPPoE active discovery session-confirmation packet)把会话ID发送给PC,如果没有错误,就进入PPPoE的会话阶段。
2.2 PPPoE会话阶段
PPPoE会话阶段进行PPP的流程,如图2所示,下文不再赘述。PC与访问集中设备依据PPP传送PPP数据报文,进行PPP的各项协商和数据传输。在会话阶段传送的数据分组中必须包含发现阶段所确定的会话ID并保持不变,然后开始后续通信。通常情况下,PPP完成结束会话的控制,但在RFC文档中,定义了一个PADT报文(PPPoE active discovery terminate packet)用来终 止PPPoE会话,PC或访问集中设备在PPP会话开始后的任何时候发送该报文都可以结束会话。
2.3 PPPoE终止阶段
PPPoE通信的双方PC与访问集中设备会使用PPP自身提供的PPP终结报文来结束PPPoE会话。若不能使用PPP结束会话时,可以由PC或访问集中设备的一方发送PADT报文来实现。
3 ACR总体架构
ACR是指同时具有常规大容量高性能双协议栈核心路由器的宽带、IPv4/IPv6组网功能和支持业务精细化管理、支持多种接入方式提供分级可靠QoS保障,实现极小汇聚层级的大规模接入汇聚功能的新型路由交换设备。因此,功能和性能双重因素使得它的设计非常复杂。
在复杂繁多的路由器体系标准下,IETF提出标准的ForCES[4](转发与控制线分离协议)具有独到的观点,倍受许多专家和学者推崇。本文研究的ACR便是基于ForCES体系实现转发与控制分离的思想。分布式ACR体系结构如图3所示。这种体系具备高可靠性和高扩展性,利用网络解耦实现控制与转发分离,在系统中各单元网络互操作性得到了充分的体现。
图3 ACR体系结构
在ACR采用的分布式结构中,交换和主控分离设计,交换背板带宽为万兆级,线卡报文处理器采用多核CPU。因此ACR系统架构简单来说就是多核分布式高端路由器。主控卡采用高性能的单核CPU做主处理器,使用吉比特级以太线路做各张线卡、交换卡的控制通道和主从备份通道,并配备大容量的内存做各种表项存储,负责控制平面的大部分工作,包括PPPoE控制报文的处理和转发信息的管理并利用分布式数据库,经适配层的处理后下发到各张线卡,从主控卡负责备份,并实时同步。若因外界原因发生故障时,ACR可以快速切换到从主控卡,保证ACR的可靠性。交换卡则负责完成在两张线卡之间进行报文的交换功能。线卡由两部分组成,一部分是母板,一部分是子卡。母板上的主要部件是多核CPU,它作为数据平面的报文处理器对接收到的数据分组进行转发和控制处理,并出万兆和吉比特以太信号到两个子卡。子卡的主要功能是对外出各种WAN和LAN的接口,将多核报文处理器出来的以太信号进行扩展和转换的部件,比如FPGA或者以太交换芯片。FPGA将以太信号转换为各种WAN接口;以太交换芯片将一个万兆级接口扩展为多个吉比特级接口。因此,线卡负责各种数据报文的快速转发、控制等功能。
在主控卡上,报文处理器负责控制报文的处理、转发表的管理并通过分布式数据库下发到各个线卡上。同时,主控卡应实时对从主控卡和线卡上表项同步、包括删除、插入、更新等操作,实现从主控卡和线卡表项信息的一致。在线卡上,转发表主要由通道号、接口索引及标志信息构成,线卡中的转发引擎通过查找转发表找到对应通道和端口号,并根据通道号和端口号来确定快速转发流程。
图4 分布式ACR转发控制结构
4 ACR快速转发系统架构
4.1 转发控制架构
分布式ACR转发控制架构如图4所示。
控制平面上,链路转发平台为各链路协议提供通信接口来实现链路管理。链路协议控制报文(PPP、HDLC、以太报文、PPPoE及MPPP)经过握手协商阶段学习到相关转发信息,创建并记录到转发表项中的信息通过转发表项信息管理模块进行处理。适配层既分布在主控卡也分布在线卡上,主控卡的适配层模块维护数据表,并通过分布式数据库,将信息分布到线卡上。线卡的适配层模块不再维护数据表,收到来自主控卡上的数据信息后,直接调用PPPoE对应的产品接口函数,更新产品软件接口的数据。例如,链路管理模块在主控卡上维护一张转发表,在线卡上链路协议模块收到分布的表项信息,直接调用链路管理模块提供的接口函数,更新转发表的信息。
如图5所示,在适配层上创建转发表后,通过分布式数据库组织转发表并下发到各个线卡,以此同时同步从主控卡上的转发信息。线卡上的转发表伴随主控卡上的下发信息同步更新。
图5 转发表通过分布式数据库下发
在控制平面,转发信息主要有接口索引、通道号、槽位号等信息组成转发表,并且以各个协议对应的转发表项以列句柄的方式组织。在转发层面,转发引擎利用查找转发表作为快速转发的依据,通过对接口索引、通道号实现快速查找匹配,找到相应的通道实现快速转发的目的。
4.2 分布式数据库下发方式
PPPoE和转发相关的信息包括接口、槽位号、转发通道号、协议配置、协议状态及链路信息。主控卡上适配层转发表中的信息需要包含以上的信息,每个转发表项对应一个接口。根据需要,转发表中还可以包含其他一些和链路转发过程相关的信息,如链路层的统计信息等。链路协议为分布式数据库提供转发表项信息,在适配层上创建转发表,由于分布式数据库作为数据库具备插入、删除和更新等功能,可以对转发表做实时的修改。只要转发表信息发生改变,链路管理模块就会把变更信息通过分布式数据库下发到线卡。
链路管理模块发出对转发表项的插入、删除和更新操作完成后,由分布式数据库把操作结果下发到线卡上,并查找到对应线卡上的相关操作函数表实现同步更新,各个转发表项的参数与主控卡上传递的参数接口一致。对于链路协议模块而言,主控卡的链路模块只负责具体数据下发,线卡的对应模块只根据下发数据做出相应的处理。即当线卡收到主控卡下发的数据信息时,调用相关函数更新转发表项。数据平面就通过查找转发表项的数据状态,找到对应的端口和通道直接转发数据报文,而不再统一交给主控制卡去实现转发动作。这样便是由线卡的转发引擎实现快速转发,这种优势在多线卡的分布式路由器上体现得更加明显,多张线卡同步并行处理数据分组有效地分担了上层控制面CPU的工作,达到负载分担,相比集中式系统大大提高了转发性能。
5 快速转发的实现
5.1 主控卡PPPoE实现
主控卡上PPPoE模块在平台上注册相关的应用程序接口函数,并统一形成函数表。完成PPPoE接口产品软件API的创建、插入、删除和更新函数,在PPPoE数据转发阶段用到的虚拟接口(virtual access,VA)也是在此时完成创建。这是因为实际物理端口数目的限制,从而需要创建一个VA用来和对端交换数据。此时,系统会按照用户的配置,选择一个虚拟模板(virtual template,VT),根据VT的配置参数,动态地创建一个VA。
PPPoE在适配层上为转发平台查询、维护一张转发表,该表需要进行同步和下发。转发表项的具体信息包括接口索引、槽位号、通道号和同步标志等其他报文首部信息。PPPoE模块所有适配层对平台提供的接口函数都采用异步的方式实现,即对适配层表项的添加、删除、更新操作,分布式数据库对表项的分发返回结果处理以及批量定时器超时处理都以事务的形式添加到适配层的任务中执行。
PPPoE在适配层上需要对事务进行接口创建,反映到分布式数据库上就是对转发表项的添加,此时要调用分布式数据库插入函数添加适配层表项。添加表项时,首先检查要添加的表项是否已经存在,如果存在则表示是主从切换后执行,这种情况需要将同步标记更新为false,并向分布式数据库返回插入成功。分布式数据库会根据该返回值进行表项的同步和分布操作。如果添加的表项不存在,则创建表项,并进行初始化各列的值。根据列句柄设置同步标记的值,如果是分布列句柄,则设置同步标记为true,否则不设置。
PPPoE适配层的任务调度执行PPPoE接口删除事务,执行接口删除。PPPoE接口删除反映到数据库即为转发表项的删除,此时调用分布式数据库删除函数,删除适配层表项。删除表项时,首先检查要删除的表项是否存在:如果存在,则删除表项,向分布式数据库返回OK,使分布式数据库继续后续的同步和下发;如果不存在,则可能是主从切换后的主控卡上执行脚本或者程序逻辑上存在问题。本文对这两种情况都统一向分布式数据库返回成功,但返回结果不会同步到从主控卡也不会下发到线卡上。
PPPoE适配层平滑处理,发生主从切换后,新的主控卡会先执行脚本。PPPoE模块根据脚本重新设置转发平台表项,并更新到适配层转发表中。如果更新的表项不存在则添加,如果存在则只更新同步标记为false。系统通知平滑处理时,调用PPPoE模块的平滑处理函数进行适配层的平滑,这时只需要检查适配层表项中的同步标记为true的表项,并删除该表项。
5.2 线卡PPPoE实现
PPPoE模块线卡的适配层上也是维护一张转发表,该转发表是主控卡上转发表的子集,它是由分布式数据库下发而来的,该转发表比较简单,只包含接口索引、槽位号和通道号的信息。
线卡上的适配层存储实现与主控卡上的适配层类似,由插入、删除、更新等接口函数,调用插入函数就可以完成线卡适配层转发表项的添加,此时没有同步标记,所以新增的表项需要设置转发表项的同步标记为true。添加表项之前需要先检查新增表项的索引是否已经存在,当主从切换执行脚本或者主控卡执行批量时,会出现添加的表项已经存在的情况。如果表项存在,只需要更新同步标记为true。线卡上转发表通过同步标记来进行平滑。
PPPoE在数据转发流程中,不会使用到线卡转发表中的信息。因为设置了转发表项与转发通道关联,但实际不会使用。
同理,调用删除接口函数,可以完成线卡适配层转发表项的删除。在线卡上适配层转发表项还关联批量下发事务,当新插入一张板卡时,线卡上适配层调用批量事务开始函数,遍历所有的转发表项,设置同步标记为false(默认是true)。当批量下发结束时,线卡适配层调用批量事务结束函数,因为在主控卡批量过程中,重新下发所有转发表项,线卡将下发下来的转发表项全部标记值更新为true。批量结束时,检查所有转发表项。如果同步标记值仍然为false,则表明主控卡上已经不存在该表项,此时线卡在批量结束时需要将同步标记值为false的表项删除。
PPPoE在线卡上的产品软件接口子模块(PPPoEPsi)主要完成数据平面报文的接收处理,对接收到的报文进行合法性检查以及修改报文描述符等工作。
5.3 PPPoE数据报文转发
在快速转发平台的多核CPU转发引擎中,以太接口收到报文进行链路处理时,如果是PPPoE发现阶段的报文,则上交到主控卡进行处理,此时进入控制平面的数据接收流程。在输入处理的链路控制阶段的业务控制流程中,对PPPoE数据分组,去掉外层的PPPoE和以太分组头,换入接口为VA,调用VA的链路处理(PPP封装)和输入解析函数,开始完整的PPP处理流程。
PPPoE数据报文快速转发流程如图6所示。发送阶段,在正常的路由阶段后,出口是VA,判断跨卡,输出在相应卡上处理,再经QoS队列处理后进VA的逻辑发送,发送中封装PPPoE和以太分组头,进入以太接口的链路输出控制和发送处理。
图6 PPPoE数据报文快速转发流程
VA一般能确定绑定的物理口,故VA通道生成后,判断是否跨卡。若跨卡,直接跨到对应绑定的物理接口所在的板卡上进行输出处理和封装、发送处理。当VA绑定的物理口变化时,转发平台应该响应并更新在通道结构中对应的值。
5.4 PPPoE软件模块设计
整个PPPoE模块在分布式系统下主要软件实现函数从 上 到 下 由PPPoEPsapi、PPPoEMpuPsal、PPPoEDdbMpu、PPPoEDdbLpu、PPPoEDfp、PPPoELpuPsal、PPPoEPsi模 块 组成,如图7所示。
图7 PPPoE分布式系统软件模块
PPPoEPsapi模块:对转发平台的PPPoE业务模块提供操作产品软件的接口,通过类似函数表的方式挂接各个接口来实现。
PPPoEMpuPsal模块:PPPoE业务模块适配负责类似参数转换、资源操作等处理,以注册的方式挂接到Psapi。为控制平面提供API,提供查询接口API,完成自身的数据表项同步和下发。
PPPoEDdbMpu模块:对简单的转发表操作,包括创建、插入、删除、查询,实现数据的分发、包括从主控卡分发到从主控和线卡。
图8 测试拓扑结构
PPPoEDdbLpu模块:实现分布式数据库存储接管函数。
PPPoEDfp模块:提供报文的接收调度、入队和出队的接口及队列报文的调度。
PPPoELpuPsal适配层模块:不再维护数据表,收到来自控制平面的数据信息后,直接调用PSI的函数,更新PSI的数据。
PPPoEPsi模块:完成线卡转发表项的添加删除操作,完成对数据转发平面报文接收处理。
6 测试报告
本次测试在上海工程技术大学宽带中心一楼实验室内完成,包括大规模接入汇聚路由器相关测试、ACR主机测试、ACR远端模块测试和ACR宽带接入服务及业务控制测试,具体测试拓扑如图8所示。
测试配合设备采用机顶盒与电视机,测试仪器采用思博伦公司的Spirent Test Center。本文涉及关于以太网端口上PPPoE接入测试时,验证ACR支持的最大链接数(PPPoE会话连接),测试结果符合要求。
7 结束语
本文首先描述了分布式路由器架构,重点分析了ACR的转发控制架构,详细介绍分布式数据库数据下发的关键实现。主控卡上实现链路协议模块相关接口的注册,适配层上完成转发表项的创建,并利用分布式数据库实现同步和下发。主控卡和网络层交下来的控制报文送到线卡上去发送,PPPoE数据报文经过链路处理、输入控制、选路输出控制后,实现快速转发。测试结果显示,ACR完全可以满足大规模接入场景应用,而且通过后期升级,可以达到更高的报文处理速度。
1 孟赟,刘九评.ACR设备在广电网络内的应用部署设计.有线电视技术,2013(6):47~52
2 RFC2516.A Method for Transmitting PPP over Ethernet,1999
3 RFC1661.The Point-to-Point,1994
4 孙宗峰,肖志辉,孙健.基于分布式路由器的IPv4-IPv6转发控制架构研究.电信科学,2012(6):42~47
5 RFC894.A Standar for the Transmission of IP-Data Grams over Ethernet Networks,1984
6 Zeng X Y,Cheng C Q.Discuss of user identification technology in DSL network.Proceedings of 2009 International Symposium on Intelligent Ubiquitous Computing and Education,Chengdu,China,2009