一种基于DPDK下实现NAT的方法与流程

文档序号:15567362发布日期:2018-09-29 03:39阅读:2741来源:国知局
本发明涉及网络通信
技术领域
:,特别是涉及一种基于dpdk下实现nat的方法。
背景技术
::nat(networkaddresstranslation,网络地址转换)技术能够解决ip地址不足的问题,用于通信的ip数据包一般具有sourceipaddress(源ip地址)与destinationipaddress(目的ip地址)这两个字段,采用nat技术实现内网与外网之间的通信时,数据包所经过的路由器/设备通过基于linux内核协议栈对数据包进行处理,根据源ip地址字段和目的ip地址字段判定数据由什么地方发过来的,它要将数据包发到什么地方去,并通过iptables利用转发规则表,将内网地址与外网地址进行转换,但采用该方式需要较长的地址转换计算时间,性能耗损大,且无法直接绕过linux内核协议栈实现数据包从内网到公网方向的通信,在面向厂商服务时,面对上百万的用户请求数量,现有的数据包处理性能难以满足实际需求。技术实现要素:为解决上述问题,本发明提供一种基于dpdk下实现nat的方法,其大幅度提升数据包处理性能,实现千万级别数据包转发能力。为解决上述目的,本发明采用的如下技术方案。一种基于dpdk下实现nat的方法,在nat设备集成dpdk程序模块,在nat设备上分配内存,并建立转换流表池单元,实现nat转发的步骤如下:s1:调用dpdk程序模块的api接口读取经由nat设备网卡模块的数据包;s2:对s1步骤中读取到的数据包进行识别;s21:若为用户端第一次数据包请求,则查找转发规则表,根据对应的转换规则,将需要做nat转换的数据包进行nat转换,并建立链表及记录该数据包转换前后五元组到链表;s22:若为用户端第n次数据包请求,则查找链表获取转换规则,将需要做nat转换的数据包进行nat转换;s23:若为目标服务器第1、2…n次数据包应答,则查找链表获取转换规则,将需要做nat转换的数据包进行nat逆转换。s3:继续调用dpdk程序模块的api接口读取下一数据包。进一步地,在s2步骤中若为用户端第一次数据包请求,计算该请求方向数据包五元组的hash值,若为目标服务器第一次数据包应答,计算该应答方向数据包五元组的hash值,将请求方向和应答方向的hash值记录到链表,并可通过指针互指相连。进一步地,在s2步骤中,若为用户端第n次数据包请求或目标服务器第1、2…n次数据包应答,计算五元组的hash值并查找链表,获得转换规则,进行nat转换或nat逆转换。进一步地,nat转换应用snat将数据包的源ip地址修改为转换的源ip地址,nat逆转换应用dnat将数据包的目的ip地址修改为转换的目的ip地址。进一步地,s1步骤中调用dpdk程序模块的api接口读取数据包具体为:通过函数rte_lcore_id()获取当前cpu逻辑核id;通过函数rte_eth_rx_burst()读取数据包;通过函数rte_pktmbuf_free()释放mbuf。进一步地,在nat设备集成dpdk程序模块包括:初始化dpdk环境、分配cpu给dpdk收包处理线程、初始化网卡模块配置。本发明的有益效果如下:本发明在nat设备上集成dpdk程序模块,通过调用dpdk程序模块的api接口读取数据包,绕过了linux内核协议栈对数据包处理过程,能够提升数十倍数据包处理性能,实现千万级别的数据包转发能力,实际部署时,将nat设备与上联交换机万兆口进行串接,数据包经由万兆交换机至nat设备进行转发,本发明根据用户端第一请求包建立链表并记录转换前后五元组,后续相同源地址/目的地址发过来的数据包,直接在链表查找获取对应的转换规则,从而修改或还原出正确的源ip/目的ip,采用该方式获取对应的转换规则,能够降低计算地址转换的时间及性能损耗。附图说明图1为本发明的基于dpdk下实现nat转发的流程图。具体实施方式下面将结合附图对本发明作进一步的说明。参考图1,一种基于dpdk下实现nat的方法,nat设备集成dpdk程序模块,具体包括初始化dpdk环境、安装dpdk编译模块、在nat设备上分配内存并建立转换规则表池单元、分配cpu给dpdk收包处理线程、初始化网卡模块配置。本实施例实现nat转发的步骤如下:s1:调用dpdk程序模块的api接口读取经由nat设备网卡模块的数据包,具体为通过函数rte_lcore_id()获取当前cpu逻辑核id;通过函数rte_eth_rx_burst()发送数据包;通过函数rte_pktmbuf_free()释放mbuf;实现调用dpdk程序模块api接口绕过了linux内核协议栈对数据包处理过程,可有效减少中断次数、内存拷贝次数,定制化协议栈降低复杂度,能够提升数十倍数据包处理性能,实现千万级别的数据包转发能力。s2:对s1步骤中读取到的数据包进行识别;s21:若为用户端第一次数据包请求,则查找转换规则表,根据对应的转发规则,将需要做nat转换的数据包进行nat转换,并建立链表及记录该数据包转换前后五元组到链表;s22:若为用户端第n次数据包请求,则查找链表获取转换规则,将需要做nat转换的数据包进行nat转换;s23:若为目标服务器第1、2…n次数据包应答,则查找链表获取转换规则,将需要做nat转换的数据包进行nat逆转换。s3:继续调用dpdk程序模块的api接口读取下一数据包。在s2步骤中若为用户端第一次数据包请求,计算该请求方向数据包五元组的hash值,若为目标服务器第一次数据包应答,计算该应答方向数据包五元组的hash值,将请求方向和应答方向的hash值记录到链表,并可通过指针互指相连;在上述s2步骤中,若为用户端第n次数据包请求或目标服务器第1、2…n次数据包应答,计算五元组的hash值并查找链表,获得转换规则,进行nat转换或nat逆转换,本实施例根据用户端第一请求包的五元组的hash值建立转换规则的链表并记录转换前后五元组到链表,目标服务器第一次数据包应答,计算hash值并记录到链表,如此将请求方向和应答方向的hash值记录到链表,并可通过指针互指相连起来,后续相同源地址/目的地址发过来的数据包,通过计算数据包的hash值,以hash值索引直接在链表查找获取对应的转换规则,从而修改或还原出正确的源ip/目的ip,采用该方式获取对应的转换规则,能够降低计算地址转换的时间及性能损耗。本实施例中的snat(sourcenetworkaddresstranslation,源地址转换)其作用是修改数据包的源地址,dnat(destinationnetworkaddresstranslation,目的地址转换)其作用是修改数据包的目的地址,上述步骤中nat转换应用snat将数据包的源ip地址修改为转换的源ip地址,nat逆转换应用dnat将数据包的目的ip地址修改为转换的目的ip地址。以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1