本文主要介绍一下DPDK这项技术的基础概览,包括什么是DPDK,为什么有它存在的必要,它的框架是怎样的,使用了哪些技术实现,DPDK的应用场景有哪些,最后在centos7服务器上实装一个dpdk环境做一个简单的数据包收发的小实验。
网络基础知识
- 什么是路由器?
提供路由(host到host之间的最佳传输路径)与转发(路由器输⼊端的数据包移送⾄适当的输出端)两种重要机制的三层网络节点设备。
2. 什么是交换机?
交换机按部署方式分为二层交换机,三层交换机,四层交换机和七层交换机。
二层交换机工作在数据链路层,根据MAC进行交换机端口选择,转发通过ASIC (Application specific Integrated Circuit)芯片实现。总体的工作流程如下:
主机A通过ARP协议广播得到主机B的Mac地址,接着主机A以主机B的Mac地址和IP地址发送网络包,中间设备交换机根据Mac地址查找Mac-端口映射表,将数据包发送到对应的端口中,如果没有找到记录则会发送广播包,询问Mac地址并将响应包的端口归属进行新增记录。
三层交换机利用IP交换技术,在不同子网的两个主机通过映射关系直接硬件交换,而避开路由器,目的就是减轻路由器的负担。
四层交换机和七层交换机主要通过流的会话,传输层端口号以及协议内容,做出更智能的负载均衡决定。
3. 什么是网关?
网关就是网络的入口和出口,用于定义网络的边界,对于局域网来说网关就是路由器。
按照功能划分,最常见的就是传输网关,用于在2个网络间建立传输连接;其次还有应用网关是在使用不同数据格式间翻译数据的系统。典型的应用网关接收一种格式的输入,将之翻译, 然后以新的格式发送。
4. 什么是NFV?
NFV技术的诞生源于互联网发展迅速,原来运营商的架构存在很多痛点:能固化的运营设施与业务的灵活适配、稳定的通信标准与新业务的快速部署、粗粒度的网络资源调整与用户/业务资源的按需分配能力。
NFV技术,它使得专有的网络功能能够运行在通用x86架构硬件上的虚拟化网络功能(Virtual Network Function,VNF)中,即网络设备和网络功能解耦,为电信运营商和互联网服务商提供了一种灵活的业务部署手段和高效的组网方案,可以支持固移网络和 IDC 中 NAT(Network Address Translation,网络地址转换)、DPI(Deep Packet Inspection,深度分组检测)、EPC (Evolved Packet Core,演进分组核心网)、防火墙(Firewall)等各类业务功能的广域灵活部署与网元弹性扩展。
一个NFV的标准架构包括NFV infrastructure(NFVI),MANO(Management and Orchestration)和VNFs。
NFVI:提供VNF的运行环境,包括所需的硬件及软件。硬件包括计算、网络、存储资源;软件主要包括Hypervisor、网络控制器、存储管理器等工具,NFVI将物理资源虚拟化为虚拟资源,供VNF使用。
VNF:包括VNF和EMS,VNF网络功能,EMS为单元管理系统,对VNF的功能进行配置和管理。一般情况下,EMS和VNF是一一对应的。
VIM:NFVI管理模块,通常运行于对应的基础设施站点中,主要功能包括:资源的发现、虚拟资源的管理分配、故障处理等,为VNF运行提供资源支持。
VNFM:VNF管理模块,主要对VNF的生命周期(实例化、配置、关闭等)进行控制,一般情况下与VNF一一对应。
NFVO:NS生命周期的管理模块,同时负责协调NS、组成NS的VNFs以及承载各VNF的虚拟资源的控制和管理。
OSS/BSS:服务提供商的管理功能,不属于NFV框架内的功能组件,但NFVO需要提供对OSS/BSS的接口。
5. 什么是SDN?
SDN技术路线强调网络设备的控制面可直接编程,将网络服务从底层硬件设备中抽象出来,开发可编程的控制平面,硬件仍负责转发,数据中心使用较广。
SDN架构可分为基础设施层、控制层和应用层。
- 基础设施层:主要为转发设备,实现转发功能,例如数据中心交换机。
- 控制层:由SDN控制软件组成,可通过标准化协议与转发设备进行通信,实现对基础设施层的控制。
- 应用层:常见的有基于OpenStack架构的云平台。另外,也可以基于OpenStack构建用户自己的云管理平台。
SDN使用北向和南向应用程序接口(API)来进行层与层之间的通信,分为北向API和南向API。北向API负责应用层和控制层之间的通信,南向API负责基础设施层和控制层之间的通信。
SDN抽象物理网络资源(交换机、路由器等),并将决策转移到虚拟网络控制平面。控制平面决定将流量发送到哪里,而硬件继续引导和处理流量,无需依赖标准的硬件设备。NFV的目标是将所有物理网络资源进行虚拟化,允许网络在不添加更多设备的情况下增长,这依赖于标准的硬件设备。
为什么要有DPDK
大部分的目标平台都是以Intel为架构的多核处理器,在IA上,网络数据包处理远早于DPDK而存在。从商业版的Windows到开源的Linux操作系统,所有跨主机通信几乎都会涉及网络协议栈以及底层网卡驱动对于数据包的处理。然而,在应对如今的万兆带宽的高速网络处理,现在架构的操作系统逐渐产生瓶颈,甚至在2010年前采用IA处理器的用户会得出这样一个结论,那就是IA不适合做高速包处理。
我们先以Linux为例,传统网络设备驱动包处理的动作可以概括如下:
❑数据包到达网卡设备。
❑网卡设备依据配置进行DMA操作。
❑网卡发送中断,唤醒处理器。
❑驱动软件填充读写缓冲区数据结构
❑数据报文达到内核协议栈,进行高层处理。
❑如果最终应用在用户态,数据从内核搬移到用户态。
❑如果最终应用在内核态,在内核继续进行。
综上所述,从软件结构上看,报文的收发需要经过物理网卡驱程、宿主机内核网络协议栈、内核态虚拟交换层、虚拟机(VM)网卡驱程、虚拟机内核态网络协议栈、虚拟机用户态App等多个转发通道,存在着海量系统中断、内核上下文切换、内存复制、虚拟化封装/解封等大量CPU费时操作过程。
随着芯片技术与高速网络接口技术的一日千里式发展,报文吞吐需要高达10Gbit/s的端口处理能力,市面上已经出现大量的25Gbit/s、40Gbit/s甚至100Gbit/s高速端口,但这么大的数据流量,早期的Linux和服务器根本无法处理。
什么是DPDK
data-plane-development-kit,数据平面的开发套件,可以极大提高数据处理性能和吞吐量,为数据平面应用程序提供更