胡 捷,陈运清
(中国电信股份有限公司北京研究院 北京100035)
DS-Lite(轻型双栈)技术是中国电信集团公司(以下简称中国电信)在从IPv4向IPv6迁移时期采用的一种针对固网宽带用户部署的过渡技术,可有力推进网络基础设施的IPv6进程,加快向IPv6的过渡步伐。
在中国电信部署DS-Lite过渡技术时,经过论证,规模在30万用户以下的城域网,每年新增用户以10%计,可以采用集中式部署的方式满足3~5年新增用户的DS-Lite接入需求,即在两套城域网核心出口路由器CR1和CR2处分别旁挂一台独立式AFTR(address family transition router)设备,实现城域网内所有DS-Lite用户的隧道封装/解封装、NAT(network address translation,网络地址转换)、路由表查找、状态维护和日志发送。
现阶段的产业实现上,独立式AFTR设备基于MSE设备设置AFTR功能板卡实现,即采用成熟的MSE机箱、电源、交换矩阵、主控和路由引擎以及用于连接CR和转发流量的线卡;与MSE唯一不同的就是多了一种有状态设备——AFTR板卡。由于MSE整机交换容量不可能无限递增,且设备单槽吞吐率受背板带宽制约,就目前的制造工艺来说,单块AFTR板卡支持的DS-Lite隧道数、每秒新建的会话数、并发会话数以及单板的转发率等性能上都有一个限度,为了支持更多的DS-Lite用户,必须在单台MSE机箱中级联多块AFTR板卡,实现性能线性递增。仍以一个30万用户规模的城域网为例,如果采用集中式部署DS-Lite,基于目前单块AFTR板卡性能测试结果和用户规模对吞吐率、并发会话和每秒新建连接的要求,每台独立式AFTR设备需要配置6~8块AFTR板卡才能满足性能要求。
设备池化,顾名思义就是多块相同功能的设备、板卡通过某种方式进行集群、级联、堆叠,采用虚拟化技术(多虚一),使得原单一设备的性能获得线性增长。从设备角度而言,池化技术有多个物理上独立的设备进行池化和单台设备内多个物理独立的板卡进行池化之分;多台Web服务器经过集群技术组成的服务器群(server farm)就是前者的最好案例,本文所研究的AFTR板卡池化则是后者的一种实现。从应用和业务模式角度看,池化技术还可以分为无状态池化和有状态池化。以单台设备多板卡为例,路由器的多块交换矩阵模块之间就是无状态池化:构成一个全双工通信的双向流量,可以经过不同的交换矩阵模块,甚至组成一个单向流的不同报文,都可以经过不同的矩阵模块,所有被切分为信元的报文以及由多个报文构成的流都会在线卡进行重新组装。由于无状态,多个交换矩阵模块的池化是天然支持的,交换容量随矩阵模块的叠加而线性增长。与交换矩阵模块不同,AFTR板卡需要负责隧道终结和IPv4-IPv4地址转换,这些会话信息作为一种状态存在于内存数据库,因此是有状态设备。多块有状态的AFTR板卡进行池化,与多块无状态的交换矩阵池化在实现上完全不同,技术要复杂得多。因为一个状态是由构成一个通信的双向流特征(通常是IP报文的五元组,即基于TCP/IP实现进程通信的socket association)共同构成的,在多块板卡池化过程中,必须解决组成一个状态的双向流特征匹配关系。目前基于状态的板卡池化主要采用以下两种解决方案。
(1)所有AFTR板卡自行维护各自的状态表
所有AFTR板卡维护自己的会话状态表时,为了确保状态双向流特征匹配,上下行流量必须经过物理上同一块AFTR板卡。上行去程流量一旦选定某个AFTR板卡,下行回程流量通过基于NAT地址池为目的地址的选路方式,自动引导到去程选定的同一块AFTR板卡上。板卡之间不进行会话状态同步,当板卡故障,这块板卡原先承载的会话全部需要新建,并建立在其他板卡上。会话重建在互联网流量模型上经常发生,对绝大多数互联网应用都不会导致问题,以基于HTTP的Web浏览应用为例,用户每刷新一次网页页面就是一次会话重建的过程。每个AFTR板卡维护自己独立的会话状态表,这样的池化实现简单,只需要解决双向流量经过同一个物理上的AFTR板卡即可,总体而言简化了冗余实现,降低了成本。
(2)所有板卡共享全部状态表
如果要求所有板卡共享状态,必须实现所有AFTR板卡之间的会话同步,理论上是将多块AFTR板卡统一整合为可动态管理和分配的资源池,彻底虚拟为逻辑上一块,理想状态下可实现硬件和软件完全分离,硬件资源高度整合共享,任务和应用可以跨AFTR板卡调度或协同。最直观的感受就是支持一个会话的双向流量分别经由不同的AFTR板卡处理和转发。但是以目前的技术发展现状看,这样做代价很大,实现上也存在瓶颈。为满足这种需求,理论上可采用主/备(master-slave)和P2P(peer to peer)方式实现多块板卡之间的状态同步,但实现的代价和困难如下。
·主/备方式:多个板卡之间通过一块主板卡运行内存数据库,其他备用板卡访问主板卡。主板卡负责提供独立的物理内存进行状态流表信息存储,需要与所有AFTR板卡建立数据传输通道,由于大量会话的建立是非常随机的,设备对每秒新建、并发会话数有很高的要求,每个备用板卡新建会话信息要不断和主板卡上行同步,主板卡还要即刻将新建会话向所有备用板卡实现下行同步,频繁的一来一往将占用板卡—交换矩阵的吞吐率以及交换矩阵本身的交换能力,且消耗主板卡的CPU处理性能。
·P2P方式:采用每个AFTR板卡分别存储的模式,实现技术是每块AFTR板卡与其他AFTR板卡之间建立全网型(full mesh)的会话状态表同步。假设8块AFTR板卡进行池化,单机系统内部需要支持8×(8-1)/2=28个一一对应的板卡同步数据流,相对主/备方式的7条同步数据流而言,AFTR板卡之间的会话同步数据极大,更加耗费板卡与矩阵之间的吞吐量,降低交换矩阵的有效能力。
无论哪种同步方式,为了确保每块AFTR单板维护全部8块AFTR的所有会话状态表,实际上都会导致单块AFTR的内存配置过大或者单块AFTR板卡实际支持的并发会话数降为标称值的1/8,池化的优势体现不明显。
经过上面的分析,笔者认为,至少在当前,单台设备内配置多块有状态AFTR板卡的池化方案,应采用“所有AFTR板卡自行维护各自的状态”的方式进行。
传统方式下,多块AFTR板卡通常采用N∶1方式实现冗余,即单独采用一块AFTR板卡作为待机备用(standby),其他N块AFTR板卡处于激活(active)状态。所有激活状态的板卡之间互为独立,没有关联,各自维护自己的状态,各自采用独立的NAT地址池。由于每个单独板卡维护自己的会话状态,必须确保一个会话的上、下行流量都经过同一块物理AFTR板卡,为了实现这种要求,在上行去程流量进入AFTR设备的时候,主流厂商采用基于策略的选路方式,根据不同的IPv6源地址范围,指定送往某块具体的AFTR板卡;下行流量采用NAT后的公有IPv4源地址作为回程目的地址,通过路由寻址的方式,找到同一块AFTR板卡。
这样的实现方式具有如下缺陷。
·上行去程流量根据IPv6源地址进行策略路由,是沿袭了独立式CGN设备的做法,流量进入独立式CGN设备后,流量目的地址是互联网上的应用和业务服务器所在地,而且有些流量是采用公有地址的,无需经过NAT,因此在独立式CGN设备上必须配置策略路由,首先判断流量的IPv4源地址,公有地址的直接查找路由表转发;私有地址的再指向CGN板卡,如果配置了多块CGN板卡,还需要进一步对私有地址进行区分,与不同的网段地址相匹配的流量进入不同的CGN板卡,以确保实现大致的流量均衡。这样的解决方案要求私有地址在城域网中以BRAS为粒度按区域进行严格规划和分配,且地址段不能太碎裂,对城域网私有IPv4地址的部署带来很大挑战。此外,当一块AFTR出现故障时,策略路由需要尽快感知,并将原本要发往故障AFTR的流量重新定向到待机备用的AFTR板卡,同时还要考虑原板卡NAT地址池的再利用,否则待机备用板卡还要占用一段公网地址。从技术实现、设备配置和故障排查上来看,这种方式都极为复杂,在生产网络中几乎不可用。
·N∶1方式需要单独拿出一块AFTR板卡专门作为备份,平时不承载业务流量,板卡的利用率不高。
为了解决以上问题,必须采用特定的技术方案,实现多块AFTR板卡如下的池化效果:
·多块板卡通过级联实现性能线性叠加;
·采用N+1方式实现负载分担和冗余;
·NAT地址池资源可以在所有AFTR板卡之间漂移和共享;
·一块AFTR出现故障前所承载的流量、会话以及占用的NAT地址资源,故障后都平均分摊到其他正常的AFTR板卡。
具体的架构设计和技术实现如下。
在采用DS-Lite过渡技术时,与私网双栈NAT444最大的不同,同时也是DS-Lite的优势就在于,所有DS-Lite流量都是IPv6封装的隧道流量,目的地址就是AFTR板卡的逻辑地址,流量根据IPv6选路经城域网引导到独立式AFTR设备的线卡,进入线卡后查找FIB经交换矩阵转发到AFTR板卡。如果是其他通往IPv6互联网的流量,则在进入线卡的时候,经过FIB查找而直接经交换矩阵转发到Egress线卡,无需进入AFTR板卡。
当独立式AFTR设备配置了多块AFTR板卡时,系统必须对外只提供一个逻辑地址,即所有AFTR板卡共享同一个IPv6 AFTR地址。进入AFTR的流量,根据B4源地址散列值随机分配到不同的AFTR板卡进行隧道终结和NAT处理,此方式优势如下。
·AFTR板卡共享一个逻辑地址,所有DS-Lite客户端B4设备只需配置一个隧道目的地址,基于源地址散列实现上行去程流量平均、随机分布在不同AFTR板卡上,自动实现负载分担。
·由于采用AFTR地址作为隧道目的地址牵引DS-Lite流量,无需对源地址进行特定规划,无需配置PBR,利于在生产网络中的实际部署。
每个板卡占用的NAT地址池资源,以/32为粒度,由独立式AFTR设备的主控卡统一、随机分配到不同的AFTR板卡上,即所有AFTR板卡上用作NAT的源地址都是离散、相互独立、以/32为粒度的地址,其优势如下。
·主控卡统一分配NAT地址,NAT地址池与AFTR板卡实现松耦合,没有固定的绑定关系。AFTR板卡故障后释放所占用的NAT地址,可以被主控卡回收。
·主控卡重新下发回收的NAT地址后随即生成新的FIB并同步下发到所有线卡,确保独立式AFTR设备的所有线卡的FIB更新,从而引导反向下行流量进入同一个AFTR板卡。
·采用多个离散/32地址可以避免采用一个子网段作为NAT地址池时,子网全0(网络地址)和全1(广播地址)地址不能用作NAT源地址的问题,提高地址利用率。
·主控卡将回收地址以/32为粒度随机、均衡地分配到其他未故障板卡上,从而实现这块板卡原先承担的会话数和流量可以均衡地分担到其他板卡。
·可以实现N+1方式的冗余和备用,所有AFTR板卡全部作为激活板卡使用,避免了N∶1方式下需要拿出专门一块板卡作为待机备用而导致的资源浪费。
图1 双向流转发过程(多块AFTR板卡的情况)
综上所述,多块AFTR池化组成一个独立式AFTR设备后,流经独立式AFTR设备的上下行流量转发过程如图1所示。
具体的实现步骤如下。
(1)Ingress线卡查找IPv6 FIB之后,经过交换矩阵将其送往AFTR,AFTR剥离IPv6封装,进行IPv4-IPv4 NAT,查找IPv4 FIB将其回送至交换矩阵再到Egress线卡。
(2)返程下行流量进入线卡,查找IPv4 FIB后经过交换矩阵将其送往AFTR,AFTR查找会话状态表进行反向IPv4-IPv4 NAT,并查找IPv6索引,然后采用IPv6封装,AFTR随即查找IPv6 FIB,之后经过交换矩阵送到Egress线卡,经线卡接口送到B4。
(3)如果一块AFTR板卡出现故障,这块AFTR板卡的地址池(离散的,以/32为粒度的零碎地址,而非传统意义的一个连续地址池)随即释放,由主控卡将地址随机、平均分配到其他未发生故障的AFTR板卡,并及时更新FIB且同步下发到各线卡,确保返程流量进入线卡后可经由交换矩阵进入同一块AFTR板卡。
本文重点阐述了单机箱多板卡之间的池化,DS-Lite设备的发展趋势是在板卡间池化的基础上,结合IPv6任播地址实现设备间的池化和云化,终端针对AFTR云可自动实现网络发现、就近接入、冗余备份和流量均衡,DS-Lite业务的隧道剥离、地址转换、端口分配、日志发送以及状态维护等功能全部交由AFTR云处理和实现,符合电厂模式的云计算服务,代表着未来发展方向。
1 张继平.通信网络智能管道架构与技术实现.北京:电子工业出版社,2012
2 陈运清,毛东峰,徐向辉等.城域网组网技术与业务运营.北京:人民邮电出版社,2009