在前两期专题中,我们分析了家庭宽带(PPPoE)和IPTV(IPoE)业务认证和数据转发平面的异同。
我们发现,IPoE和PPPoE的转发面对硬件的要求差别较大,IPoE只需要能够终结QinQ(剥离两层QinQ TAG)即可,而PPPoE则还需要处理PPP的状态机。那么,能不能用不同的转发面处理同一用户的这两类业务呢?
这种设想在SDN日趋成熟的今天,已经成为了现实。
SDN有一大流派,称之为NFV(Network Function Virtualization)。在局域网中,NFV主要用于虚拟化安全资源,来应对专用设备无法承载的超大业务量。而在运营商网络中,NFV则可以用于WLAN控制器(vAC)和宽带远程接入服务(vBRAS)。
vBRAS采用了所谓的转控分离技术。
vBRAS本身是一个运行于标准x86服务器上的软件,拥有终结QinQ,处理PPPoE、IPoE等能力。来自OLT的流量会进行不同的处理,如下表:
PPPoE信令 | vBRAS |
---|---|
PPPoE数据转发 | vBRAS(x86)/SR(NP) |
IPoE认证 | vBRAS |
IPoE数据转发 | 交换机(ASIC) |
我们发现,流量最大的IPTV业务,在vBRAS方案中,从成本较高的NP承载变成了价廉物美的交换机ASIC承载。路由器NP则依然处理家庭宽带上网的PPPoE数据转发业务。vBRAS的x86 CPU处理认证过程,也就是控制平面的业务。
这就是所谓的转控分离的设计思想。x86 CPU擅长处理复杂的逻辑,如状态机等,因此用来进行网络控制平面的数据包处理。而NP可以处理较为复杂的PPP QinQ业务,被用于处理PPPoE转发。最简单的IPoE交给交换机ASIC。
当然,对于VoIP这样的大会话小流量业务,是可以在vBRAS上直接处理的,这样可以充分利用x86低廉价格的RAM处理大量会话资源。
随着在x86上处理的网络业务越来越多,x86也遇到了一些麻烦。
我们知道,x86上运行的操作系统,无论是Linux,还是windows,实际上都是不适合处理网络密集型的任务的。这是因为,x86的网络适配器(网卡),每收发一个数据包都会触发一次处理器的中断。中断会消耗大量的CPU时间,并引起指令缓存的cacheline miss。
此外,传统的Linux内核在收到数据包时,会将数据包缓存(mbuf)从网卡驱动的地址空间(内核态)拷贝到应用程序的地址空间(用户态)。这更是在数据平面无法接受的。这也限制了x86在网络领域的应用。
为了提升x86在网络领域的份额,英特尔启动了DPDK(Data Plane Develop Kit)计划,帮助用户在x86上实现高速的数据转发。而其他非Intel的RISC多核处理器厂商也在持续发力,CISC和RISC多核在网络领域的竞争已经进入白热化。
明天,我们将从多核开始,介绍路由器的另一种实现方式。敬请期待。