CN112929278A - 一种网络通信设备多核并行快速转发数据包的方法及系统 - Google Patents
一种网络通信设备多核并行快速转发数据包的方法及系统 Download PDFInfo
- Publication number
- CN112929278A CN112929278A CN202110203512.8A CN202110203512A CN112929278A CN 112929278 A CN112929278 A CN 112929278A CN 202110203512 A CN202110203512 A CN 202110203512A CN 112929278 A CN112929278 A CN 112929278A
- Authority
- CN
- China
- Prior art keywords
- information
- data packet
- forwarding
- ipc
- memory pool
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/74—Address processing for routing
- H04L45/745—Address table lookup; Address filtering
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L61/00—Network arrangements, protocols or services for addressing or naming
- H04L61/09—Mapping addresses
- H04L61/25—Mapping addresses of the same type
- H04L61/2503—Translation of Internet protocol [IP] addresses
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/18—Multiprotocol handlers, e.g. single devices capable of handling multiple protocols
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明提供一种网络通信设备多核并行快速转发数据包的方法及系统,属于无线通信技术领域。本发明包括方法包括如下步骤:初始化内存池;内核加速模块接管待转发数据包;内核加速模块判断当前数据包是否为一条链路跟踪的前两个数据包,如果是,走标准协议栈,转发信息学习模块学习转发信息,并将转发信息记录至内存池;如果否,执行下一步;各核心处理器的数据包在并行转发模块根据内存池的转发信息并行转发数据包。本发明的有益效果为:提高了CPU的使用效率,提升多核心处理器的数据包转发性能。
Description
技术领域
本发明涉及一种无线通讯技术,尤其涉及一种网络通信设备多核并行快速转发数据包的方法及系统。
背景技术
性能是衡量一款网络通信设备好坏的最直接的评价,其中性能指标主要包括吞吐量、报文转发率、最大并发连接数、每秒新建连接数、转发时延、抖动等。
在竞争激烈的通信设备市场,为提升用户上网体验及提高网络通信设备市场竞争力,需要用同等的硬件资源或成本,创造出更高性能的设备,才能站在通信设备领域这股浪潮之颠。
现有的多核心处理器并行处理方法有RSS技术和RPS技术,其中,RSS(ReceiveSide Scaling,接收方缩放)技术为NIC(网络接口控制器)通过可编程过滤器将数据包引导到相应的硬件队列,过滤器将每个报文的源ip、源端口、目的ip、目的端口、协议进行hash值计算(每个芯片厂商算法可能存在差异),然后根据hash值把不同的流分散到不同的网卡硬件队列中,最后将各cpu均匀绑定到各网卡硬件队列中断来实现接收的报文在各cpu之间负载均衡,RSS技术适合于多队列网卡。
RPS(Receive Package Steering,收包控制)技术为RSS技术的软件实现,根据每个报文的源ip、源端口、目的ip、目的端口、协议(四层协议TCP/UDP,三层协议IPV4 ORIPV6)、标志(VLAN ID)等进行hash值计算(每个内核版本算法可能存在差异),然后根据hash值把不同的流匹配到处理它的cpu(每条流的数据包hash值相同,故每条流的数据包会选择到同一cpu),来实现接收的报文在cpu之间负载均衡,RPS技术适合于单队列网卡或者虚拟网卡。
利用RSS或RPS技术存在的技术问题如下:
(1)利用RSS或RPS技术,虽然能将数据流相对均匀的分发给各CPU来进行处理,但在标准内核协议栈转发数据包过程中,特别是在处理NAT、链接跟踪等模块时,由于自旋锁的原因,各cpu将会由并行工作变成串行工作,没有办法真正的实现数据包多核并行转发,导致转发性能不理想;
(2)在网络设备中,对性能影响比较显著的就是锁的使用,可以说,网络设备的性能优化,很大程度上都是对于锁的优化,业界对Linux协议栈锁的优化呼声高居不下;
(3)部分低端网络设备,特别是家用消费类通信产品,内存及CPU较差,产品并行转发各种协议的数据包吞吐量未达标准水平,急需一些方法去优化该转发性能,提高吞吐量,以提高产品市场竞争力。
发明内容
为解决现有技术中的问题,本发明提供一种网络通信设备多核并行快速转发数据包的方法及系统,实现网络通信设备多核并行快速转发。
本发明网络通信设备多核并行快速转发数据包的方法,包括如下步骤:
S1:初始化内存池;
S2:内核加速模块接管待转发数据包;
S3:内核加速模块判断当前数据包是否为一条链路跟踪的前两个数据包,如果是,走标准协议栈,转发信息学习模块学习转发信息,并将转发信息记录至内存池;如果否,执行下一步;
S4:各核心处理器的数据包在并行转发模块根据内存池的转发信息并行转发数据包,其中,所述数据包并行转发模块的处理方法为:
S41:解析数据包,获取数据包中的协议及链路信息;
S42:查找内存池中相应的转发信息,采用rcu锁标记临界区开始位置;
S43:根据转发信息封装数据包;
S44:采用rcu锁标记临界区结束位置;
S45:调用驱动发包函数发送数据包。
本发明作进一步改进,所述内存池包括ipc内存池和brc内存池,其中,所述ipc内存池用于存储各种接入方式的三层转发信息ipc,所述brc内存池用于存储桥二层转发信息brc,所述ipc内存池和brc内存池是由struct hlist_head结构构成的二维散列表。
本发明作进一步改进,步骤S3中,所述转发信息学习模块包括三层Nat信息学习子模块和桥信息学习子模块,所述三层Nat信息学习子模块用于学习ipc信息,并将ipc信息存储入ipc内存池,所述桥信息学习子模块用于学习brc信息,并将brc信息存储入brc内存池。
本发明作进一步改进,当所述数据包为一条链路跟踪的第一个数据包时,所述三层Nat信息学习子模块的处理方法为:
A1:标准协议栈中NAT模块的函数填充NAT信息时,内核加速模块在函数处注册回调函数;
A2:三层Nat信息学习子模块根据链接跟踪方向确定记录该链接的源地址转换snat转发信息,然后取出路由信息,并查询邻居子系统信息;
A3:根据路由信息确定并记录该链接的发送接口至ipc,根据邻居子系统信息记录源mac地址和目的mac地址至ipc,根据传入的nat信息记录snat源ip和源端口信息至ipc,并记录该链接方向数据包skb五元组及链接跟踪ct信息至ipc;
A4:将该链接做snat的ipc信息存入ipc内存池中。
本发明作进一步改进,当所述数据包为一条链路跟踪的第二个数据包时,所述三层Nat信息学习子模块的处理方法为:
B1:通过回调函数记录该链接的dnat ipc信息;
B2:查询路由信息及邻居子系统信息,然后根据路由信息确定并记录该链接的发送接口至ipc,根据邻居子系统记录源mac地址和目的mac地址至ipc,根据传入的nat信息记录dnat ip和端口信息至ipc,并记录该链接方向skb五元组及ct信息至ipc;
B3:将该链接做dnat的ipc信息存入ipc内存池中。
本发明作进一步改进,每条链接做snat的ipc信息和做dnat的ipc信息均使用IPC_LOCK()/IPC_UNLOCK()自旋锁进行保护,保证存入ipc条目的唯一性。
本发明作进一步改进,所述桥信息学习子模块的处理方法为:
C1:在标准协议栈中的标准内核桥内转发子流程中置入回调函数,用于监听fdb桥转发信息添加、删除及更新表项的消息;
C2:BRC_LOCK()自旋锁对brc内存池进行上锁;
C3:判断fdb桥转发信息对fdb表项操作类型,分别处理,
当收到内核添加fdb表项消息时,将fdb表项中的mac地址、vlan及port信息添加到brc新表项,将该表项添加至brc内存池中对应key值的链表头;当收到内核更新fdb表项消息时,根据fdb表项的mac地址、vlan及port信息更新brc内存池表项;当收到内核删除fdb表项消息时,根据fdb表项的mac地址将brc内存池相关表项删除;
C4:BRC_UNLOCK()释放brc内存池的自旋锁。
本发明作进一步改进,所述数据包并行转发模块转发数据包的实现过程为:
D1:当每条链接的第三个及后面的数据包从驱动程序进入内核加速模块时,内核加速模块解析出该数据包源ip、目的ip、源端口、目的端口、协议五元组信息;
D2:使用rcu_read_lock_bh()锁保护查找出来的brc桥转发信息及ipc三层Nat转发信息,此处标记临界区开始;
D3:根据数据包目的mac地址在brc内存池中查找brc桥转发信息,如果brc桥转发信息存在,重新封装数据包,采用rcu锁标记临界区结束位置,调用驱动发包函数发送数据包,数据包桥加速转发成功,如果不存在,执行下一步;
D4:如果brc桥转发信息不存在,则根据数据包五元组在ipc内存池中查找NAT转发信息,根据ipc记录信息确定该数据包做snat或dnat转发;
D5:如果做snat,则根据ipc记录的snat ip信息,修改数据包ip头部源ip地址,如果做dnat,则根据ipc记录的dnat ip信息,修改数据包ip头部目的ip地址;
D6:重新计算数据包ip头部校验和和协议链接头部校验和;
D7:修改数据包mac层源mac与目的mac地址,根据ipc信息修改数据包skb->dev为发送设备;
D8:使用rcu_read_unlock_bh()锁标记临界区结束位置;
D9:调用驱动发包函数发送数据包,数据包Nat加速转发成功。
本发明还提供一种实现所述网络通信设备多核并行快速转发数据包的方法的系统,其特征在于,包括:
初始化模块:用于初始化内存池;
接管模块:用于内核加速模块接管待转发数据包;
判断模块:用于内核加速模块判断当前数据包是否为一条链路跟踪的前两个数据包,如果是,走标准协议栈,转发信息学习模块学习转发信息,并将转发信息记录至内存池;如果否,执行数据包并行转发模块;
数据包并行转发模块:用于根据内存池的转发信息并行转发各核心处理器的数据包,其中,所述数据包并行转发模块包括:
解析单元:用于解析数据包,获取数据包中的协议及链路信息;
查找及标记单元:用于查找内存池中相应的转发信息,采用rcu锁标记临界区开始位置和结束位置;
封装单元:用于根据转发信息封装数据包;
发包单元:用于调用驱动发包函数发送数据包,。
本发明作进一步改进,所述ipc内存池用于存储各种接入方式的三层转发信息ipc,所述brc内存池用于存储桥二层转发信息brc,所述ipc内存池和brc内存池是由structhlist_head结构构成的二维散列表。
与现有技术相比,本发明的有益效果是:转发过程中,跳过整个协议栈的相关处理,让CPU在相同的时间里能够处理更多的事情,提高了CPU的使用效率,从而提升数据包转发性能,使用RCU锁保护内存池共享数据结构,对于被RCU保护的共享数据结构,读执行单元无锁,在除alpha的所有架构上也不需要内存屏障,因此不会导致锁竞争、内存延迟以及流水线停滞,极大提高多核并行转发效率。
附图说明
图1为本发明方法流程图;
图2为本发明详细流程图;
图3为数据包并行转发子流程处理方法流程图;
图4为本发明三层Nat信息学习子模块处理方法流程图;
图5为本发明桥信息学习子模块处理方法流程图。
具体实施方式
下面结合附图和实施例对本发明做进一步详细说明。
如图1所示,由于该发明适用于所有网络通信设备实现多核并行快速转发数据包来提高吞吐量,故将该发明以内核加快模块的形式进行描述,本发明网络通信设备多核并行快速转发数据包的方法,包括如下步骤:
S1:初始化内存池;
S2:内核加速模块接管待转发数据包;
S3:内核加速模块判断当前数据包是否为一条链路跟踪的前两个数据包,如果是,走标准协议栈,转发信息学习模块学习转发信息,并将转发信息记录至内存池;如果否,执行下一步;
S4:各核心处理器的数据包并行转发模块根据内存池的转发信息并行转发数据包。
由于各种协议(如二层协议ipv4、ipv6、pppoe等)的数据包封包、解包过程不同,并且需要学习的ipc(每条链接对应2条ipc,分别记录链接做snat和dnat的三层转发信息)三层转发信息也不同,本发明对二层协议为ipv4协议,并且网络设备lan口(局域网口)和wan口(广域网口)为dhcp(动态主机配置协议)接入方式的数据包转发进行详细描述,其他协议数据包的转发方法与本实施例类同。本例的内核加快模块以Parallel_forward内核模块为例进行描述。
如图2所示,Linux标准协议栈(多核心处理器)数据包转发流程如下图1黑粗线左边所示,黑粗线右边则是本发明Parallel_forward内核模块实现(多核心处理器)并行快速转发数据包流程。
首先,需要初始化内存池,本例的内存池包括ipc cache(ipc信息内存池)和brccache(桥转发信息内存池),其中,ipc cache容器用于存储每条数据流的nat(NetworkAddress Translation,网络地址转换)、源地址、目的地址、路由等转发信息,是实现并行快速转发的基础,各种接入方式的三层转发都依赖于这个容器记录的信息,为了适配内核rcu锁机制(rcu锁为Rend-Copy-Update的简称,中文含义为读-拷贝-更新,是内核一种同步锁机制),ipc cache容器是由struct hlist_head结构构成的二维散列表。brc cache容器用于存储每个网络设备下客户端的虚拟局域网及端口信息,是实现并行快速转发的基础,桥二层快速转发依赖这个容器记录的信息,为了适配内核rcu锁机制,brc cache容器也是由struct hlist_head结构(Linux内核的一种链表头数据结构)构成的二维散列表。
本例中,Parallel_forward内核模块为了能够正确学习到每条TCP/UDP链接的NAT信息、链接跟踪信息,路由信息、邻居子系统信息等,不对每条TCP/UDP链接的前面2个数据包(1个发送包+1个接收包)进行加速转发,让其走Linux标准协议栈,其中,所述_netif_receive_skb_core函数用于根据数据包目的mac来确定是否可以桥转发,如果不能,根据不同的协议调用不同协议处理函数,如下以ipv4协议为例,ip_rcv函数将被调用,ipv6等是类似的。Ip_rev函数对IP头部合法性进行严格检查,然后把具体功能交给ip_rcv_finish函数,ip_rcv_finish函数执行完PRE_ROUTING(Netfilter框架的钩子点)上的钩子函数后,所有钩子都全部返回NF_ACCEPT(该值在协议栈表示:数据包可以正常通过)后,数据包会交由ip_rcv_finish()函数,这个函数主要功能是做路由选择。
如图4所示,当TCP/UDP链接的第一个数据包(发送包)在协议栈查完路由信息和查完NAT(网络地址转换)信息等动作后,从ip_output函数进入Netfilter框架NF_INET_POST_ROUTING链(Netfilter框架的钩子点)NAT模块nf_nat_packet函数填充NAT信息时,Parallel_forward内核模块在该函数注册回调;Parallel_forward模块ipc三层Nat信息学习子流程根据链接跟踪方向确定记录该链接的snat(源地址转换)转发信息,通过skb_dst函数取出路由信息,并通过__ipv4_neigh_lookup_noref函数查询邻居子系统信息,然后ipc_add函数根据路由信息确定并记录该链接的发送接口至ipc,根据邻居子系统信息记录源mac地址(局域网地址)和目的mac地址至ipc,根据传入的nat信息记录snat源ip和源端口信息至ipc,并记录该链接方向skb(数据包)五元组及ct(链接跟踪)等信息至ipc;最后将该链接做snat的ipc信息通过hlist_add_head_rcu函数存入ipc cache中(内存池),为保证存入ipc条目的唯一性,使用IPC_LOCK()/IPC_UNLOCK()自旋锁进行保护。
由于TCP/UDP链接第一个数据包在标准协议栈做完snat后,该链接已经记录了snat及dnat(目的地址转换)信息,当TCP/UDP链接的第二个数据包(接收包)从ip层ip_rcv函数进入Netfilter框架NF_INET_PRE_ROUTING链时,会直接调用NAT模块nf_nat_packet函数填充dnat信息;于是Parallel_forward内核模块ipc三层Nat信息学习子流程开始记录该链接的dnat ipc信息,由于此时数据包没有路由,需要根据转入的nat信息目的ip通过ip_route_input函数查询路由信息,并通过__ipv4_neigh_lookup_noref函数查询邻居子系统信息,然后ipc_add函数根据路由信息确定并记录该链接的发送接口至ipc,根据邻居子系统记录源mac地址和目的mac地址至ipc,根据传入的nat信息记录dnat ip和端口信息至ipc,并记录该链接方向skb五元组及ct等信息至ipc,最后将该链接做dnat的ipc信息通过hlist_add_head_rcu函数存入ipc cache中(内存池),为保证存入ipc条目的唯一性,使用IPC_LOCK()/IPC_UNLOCK()自旋锁进行保护。
如图5所示,当在网络通信设备LAN侧接入客户端设备时,网络通信设备会收到刚接入客户端的数据帧,标准内核桥内转发子流程会提取数据帧中的源MAC、VLAN和接收数据帧的端口等信息生成FDB(Forwarding Data Base:二层转发数据库)表条目(Forwardingdatabase基于MAC地址的转发表,FDB表主要关注MAC+VLAN和PORT的对应关系);此时,Parallel_forward内核模块为了能够学习到通信设备LAN侧接入客户端的信息,在标准内核桥内转发子流程的fdb_notify及br_fdb_update函数分别置入回调函数,用于监听fdb桥转发信息添加、删除及更新表项的消息;当收到内核添加fdb表项消息时,Parallel_forward内核模块Brc cache桥信息学习子流程brc_add函数将fdb的mac地址、vlan及port信息添加到brc(每个客户端对应1条brc,记录着客户端的MAC、VLAN和PORT信息)新表项,并调用hlist_add_head_rcu将该表项添加至brc cache容器对应key值(根据mac地址计算的哈希值)的链表头;当收到内核更新fdb表项消息时,Parallel_forward内核模块Brc cache桥信息学习子流程brc_update函数根据fdb的mac地址、valn及port信息调用hlist_replace_rcu及call_rcu_bh函数更新brc cache容器表项;当收到内核删除fdb表项消息时,brc_del函数根据fdb的mac地址调用hlist_del_rcu及call_rcu_bh函数将brc cache容器相关表项删除。为保证存入brc条目的唯一性,使用BRC_LOCK()/BRC_UNLOCK()自旋锁进行保护。
如图2和图3所示,当每条TCP/UDP链接的第三个及后面的数据包从驱动程序进入Parallel_forward内核加速模块时,所述数据包并行转发模块根据内存池的转发信息并行转发数据包,具体处理过程为:
D1:forward函数首先会解释出该数据包源ip、目的ip、源端口、目的端口、协议五元组信息;
D2:使用rcu_read_lock_bh()锁(Linux内核rcu读锁:上锁)保护查找出来的brc桥转发信息及ipc三层Nat转发信息,此处标记临界区开始;
D3:brc_lkup_rcu函数根据数据包目的mac地址使用hlist_for_each_entry_rcu_bh函数在brc cache容器查找桥转发信息,如果brc桥转发信息存在,如果不存在,执行步骤D4,如果存在,则需要确认目的Mac所在的设备端口是否开启了vlan,
如果目的Mac所在的设备端口开启了vlan,那么在数据包二层添加vlan头部,或(本来就带vlan的情况下)修改vlan头部信息,然后修改数据包skb->dev(记录当前数据包的实际发送物理接口的指针变量)为目的Mac所在的端口设备为发送设备,使用rcu_read_unlock_bh()锁(Linux内核rcu读锁:解锁)标记临界区结束位置,最后直接通过发送设备Dev工具函数ndo_start_xmit发包,数据包桥加速转发成功。
如果目的Mac所在的设备端口没有开启vlan,那么修改数据包skb->dev为目的Mac所在的端口设备为发送设备,使用rcu_read_unlock_bh()锁标记临界区结束位置,然后直接通过发送设备Dev工具函数ndo_start_xmit发包,数据包桥加速转发成功;
D4:如果brc桥转发信息不存在,ipc_lkup_rcu函数则根据数据包五元组使用hlist_for_each_entry_rcu_bh函数在ipc cache查找NAT转发信息,根据ipc记录信息确定该数据包做snat或dnat转发;
D5:如果做snat,则根据ipc记录的snat ip信息,修改数据包ip头部源ip地址,如果做dnat,则根据ipc记录的dnat ip信息,修改数据包ip头部目的ip地址;
D6:由于修改了数据包ip头部信息,接下来需要重新计算数据包ip头部校验和,此外,由于伪头部发生了变化,TCP/UDP头部也需要重新计算校验和;
D7:修改数据包mac层源mac与目的mac地址,根据ipc信息修改数据包skb->dev为发送设备;
D8:使用rcu_read_unlock_bh()锁标记临界区结束位置;
D9:通过发送设备Dev工具函数ndo_start_xmit发包,数据包Nat加速转发成功。
综上,本发明在Parallel_forward内核模块根据保存的brc信息为数据包封装二层vlan信息、确定数据包发送设备dev信息,然后直接调用驱动发包函数ndo_start_xmit直接发送数据包,跳过整个桥(特别是ebtables)相关处理,让CPU在相同的时间里能够处理更多的事情,提高了CPU的使用效率,从而提升数据包桥转发性能。
在Parallel_forward内核模块根据保存的ipc信息为数据包封装三层nat信息、路由dev信息、二层邻居子系统信息等,然后直接调用驱动发包函数ndo_start_xmit直接发送数据包,跳过整个协议栈(桥及netfilter管理机制)的相关处理,让CPU在相同的时间里能够处理更多的事情,提高了CPU的使用效率,从而提升数据包NAT转发性能。
本发明在多核心处理器CPU性能存在瓶颈时,提出一种实现网络通信设备多核并行快速转发数据包的优化方案,有益效果如下:
(1)每条TCP/UDP链接的第三个及后面的数据包从__netif_receive_skb协议栈处理函数进入Parallel_forward内核模块,然后根据保存的ipc信息为数据包封装三层nat信息、路由dev信息、二层邻居子系统等信息进行Nat转发,根据保存的brc信息为数据包封装二层vlan信息、确定数据包发送设备dev信息进行桥转发,最后直接调用驱动发包函数ndo_start_xmit发送数据包,跳过了整个内核协议栈的相关处理,单位时间内CPU可以转发更多的数据包,从而提升数据包转发性能。
(2)Parallel_forward内核模块使用RCU锁保护brc cache及ipc cache内存池共享数据结构,对于被RCU保护的共享数据结构,读执行单元无锁,在除alpha的所有架构上也不需要内存屏障,因此不会导致锁竞争、内存延迟以及流水线停滞,写执行单元在访问它前需首先拷贝一个副本,然后对副本进行修改,然后将副本取代原来的数据,最后使用一个回调机制在适当的时机把指向原来数据进行删除,这个时机就是所有引用原数据的CPU都退出对其操作的时候。RCU锁既允许多个读执行单元同时访问被保护的数据,又允许多个读执行单元和多个写执行单元同时访问被保护的数据,读执行单元没有任何同步开销,而写执行单元则是自旋锁同步机制的开销,结合数据包转发过程中ipc cache及brc cache内存池“读写同时进行”,“转发期间读ipc及brc频率极高”的这一特点,该方法极大的提高了cpu的使用效率,单位时间内CPU可以处理更多的事情(转发更多的数据包),从而提升数据包转发性能。
(3)当多核心处理器的网络通信设备开启了RSS或RPS技术后,数据包从Linux标准协议栈__netif_receive_skb函数进入Parallel_forward模块,TCP/UDP链接在CPU之间已经负载均衡,每条链接的第三个及后面数据包使用Parallel_forward模块转发只使用到RCU读锁,对于被RCU保护的共享数据结构,读执行单元是无锁的,故Parallel_forward模块真正实现了“全程无锁”的数据包快速转发,极大的提升了多核网络通信设备的数据包转发性能。
(4)Parallel_forward内核模块只是多核并行快速转发数据包优化方案的一个实施例,运用该发明编写的内核模块可支持内核多种协议(pppoe/pptp/l2tp/ipv6相关协议)数据进行并行快速转发,只需在内核nf_nat_packet函数添加的回调函数根据不同的协议学习不同的转发信息,并在forward核心转发函数根据不同的协议数据包进行不同的封包和解包即可,模块耦合性低,可移植性高,可适用于所有的多核网络通信设备。
以上所述之具体实施方式为本发明的较佳实施方式,并非以此限定本发明的具体实施范围,本发明的范围包括并不限于本具体实施方式,凡依照本发明所作的等效变化均在本发明的保护范围内。
Claims (10)
1.一种网络通信设备多核并行快速转发数据包的方法,其特征在于,包括如下步骤:
S1:初始化内存池;
S2:内核加速模块接管待转发数据包;
S3:内核加速模块判断当前数据包是否为一条链路跟踪的前两个数据包,如果是,走标准协议栈,转发信息学习模块学习转发信息,并将转发信息记录至内存池;如果否,执行下一步;
S4:各核心处理器的数据包在并行转发模块根据内存池的转发信息并行转发数据包,其中,所述数据包并行转发模块的处理方法为:
S41:解析数据包,获取数据包中的协议及链路信息;
S42:查找内存池中相应的转发信息,采用rcu锁标记临界区开始位置;
S43:根据转发信息封装数据包;
S44:采用rcu锁标记临界区结束位置;
S45:调用驱动发包函数发送数据包。
2.根据权利要求1所述的网络通信设备多核并行快速转发数据包的方法,其特征在于:所述内存池包括ipc内存池,其中,所述ipc内存池用于存储各种接入方式的三层转发信息ipc,所述brc内存池用于存储桥二层转发信息brc,所述ipc内存池和brc内存池是由structhlist_head结构构成的二维散列表。
3.根据权利要求2所述的网络通信设备多核并行快速转发数据包的方法,其特征在于:步骤S3中,所述转发信息学习模块包括三层Nat信息学习子模块和桥信息学习子模块,所述三层Nat信息学习子模块用于学习ipc信息,并将ipc信息存储入ipc内存池,所述桥信息学习子模块用于学习brc信息,并将brc信息存储入brc内存池。
4.根据权利要求3所述的网络通信设备多核并行快速转发数据包的方法,其特征在于:当所述数据包为一条链路跟踪的第一个数据包时,所述三层Nat信息学习子模块的处理方法为:
A1:标准协议栈中NAT模块的函数填充NAT信息时,内核加速模块在函数处注册回调函数;
A2:三层Nat信息学习子模块根据链接跟踪方向确定记录该链接的snat转发信息,然后取出路由信息,并查询邻居子系统信息;
A3:根据路由信息确定并记录该链接的发送接口至ipc,根据邻居子系统信息记录源mac地址和目的mac地址至ipc,根据传入的nat信息记录snat源ip和源端口信息至ipc,并记录该链接方向数据包skb五元组及链接跟踪ct信息至ipc;
A4:将该链接做snat的ipc信息存入ipc内存池中。
5.根据权利要求4所述的网络通信设备多核并行快速转发数据包的方法,其特征在于:当所述数据包为一条链路跟踪的第二个数据包时,所述三层Nat信息学习子模块的处理方法为:
B1:通过回调函数记录该链接的dnat ipc信息;
B2:查询路由信息及邻居子系统信息,然后根据路由信息确定并记录该链接的发送接口至ipc,根据邻居子系统记录源mac地址和目的mac地址至ipc,根据传入的nat信息记录dnat ip和端口信息至ipc,并记录该链接方向skb五元组及ct信息至ipc;
B3:将该链接做dnat的ipc信息存入ipc内存池中。
6.根据权利要求5所述的网络通信设备多核并行快速转发数据包的方法,其特征在于:每条链接做snat的ipc信息和做dnat的ipc信息均使用IPC_LOCK()/IPC_UNLOCK()自旋锁进行保护,保证存入ipc条目的唯一性。
7.根据权利要求3所述的网络通信设备多核并行快速转发数据包的方法,其特征在于:所述桥信息学习子模块的处理方法为:
C1:在标准协议栈中的标准内核桥内转发子流程中置入回调函数,用于监听fdb桥转发信息添加、删除及更新表项的消息;
C2:BRC_LOCK()自旋锁对brc内存池进行上锁;
C3:判断fdb桥转发信息对fdb表项操作类型,分别处理,
当收到内核添加fdb表项消息时,将fdb表项中的mac地址、vlan及端口port信息添加到brc新表项,将该表项添加至brc内存池中对应key值的链表头;当收到内核更新fdb表项消息时,根据fdb表项的mac地址、vlan及port信息更新brc内存池表项;当收到内核删除fdb表项消息时,根据fdb表项的mac地址将brc内存池相关表项删除;
C4:BRC_UNLOCK()释放brc内存池的自旋锁。
8.根据权利要求2-7任一项所述的网络通信设备多核并行快速转发数据包的方法,其特征在于:所述数据包并行转发模块转发数据包的实现过程为:
D1:当每条链接的第三个及后面的数据包从驱动程序进入内核加速模块时,内核加速模块解析出该数据包源ip、目的ip、源端口、目的端口、协议五元组信息;
D2:使用rcu_read_lock_bh()锁保护查找出来的brc桥转发信息及ipc三层Nat转发信息,此处标记临界区开始;
D3:根据数据包目的mac地址在brc内存池中查找brc桥转发信息,如果brc桥转发信息存在,重新封装数据包,采用rcu锁标记临界区结束位置,调用驱动发包函数发送数据包,数据包桥加速转发成功,如果不存在,执行下一步;
D4:如果brc桥转发信息不存在,则根据数据包五元组在ipc内存池中查找NAT转发信息,根据ipc记录信息确定该数据包做snat或dnat转发;
D5:如果做snat,则根据ipc记录的snat ip信息,修改数据包ip头部源ip地址,如果做dnat,则根据ipc记录的dnat ip信息,修改数据包ip头部目的ip地址;
D6:重新计算数据包ip头部校验和和协议链接头部校验和;
D7:修改数据包mac层源mac与目的mac地址,根据ipc信息修改数据包skb->dev为发送设备;
D8:使用rcu_read_unlock_bh()锁标记临界区结束位置;
D9:调用驱动发包函数发送数据包,数据包Nat加速转发成功。
9.一种实现权利要求1-8任一项所述的网络通信设备多核并行快速转发数据包的方法的系统,其特征在于,包括:
初始化模块:用于初始化内存池;
接管模块:用于内核加速模块接管待转发数据包;
判断模块:用于内核加速模块判断当前数据包是否为一条链路跟踪的前两个数据包,如果是,走标准协议栈,转发信息学习模块学习转发信息,并将转发信息记录至内存池;如果否,执行数据包并行转发模块;
数据包并行转发模块:用于根据内存池的转发信息并行转发各核心处理器的数据包,其中,所述数据包并行转发模块包括:
解析单元:用于解析数据包,获取数据包中的协议及链路信息;
查找及标记单元:用于查找内存池中相应的转发信息,采用rcu锁标记临界区开始位置和结束位置;
封装单元:用于根据转发信息封装数据包;
发包单元:用于调用驱动发包函数发送数据包。
10.根据权利要求9所述的系统,其特征在于:所述内存池包括ipc内存池和brc内存池,其中,所述ipc内存池用于存储各种接入方式的三层转发信息ipc,所述brc内存池用于存储桥二层转发信息brc,所述ipc内存池和brc内存池是由struct hlist_head结构构成的二维散列表。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110203512.8A CN112929278B (zh) | 2021-02-24 | 2021-02-24 | 一种网络通信设备多核并行快速转发数据包的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110203512.8A CN112929278B (zh) | 2021-02-24 | 2021-02-24 | 一种网络通信设备多核并行快速转发数据包的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112929278A true CN112929278A (zh) | 2021-06-08 |
CN112929278B CN112929278B (zh) | 2022-07-22 |
Family
ID=76170515
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110203512.8A Active CN112929278B (zh) | 2021-02-24 | 2021-02-24 | 一种网络通信设备多核并行快速转发数据包的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112929278B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115499410A (zh) * | 2022-07-29 | 2022-12-20 | 天翼云科技有限公司 | 基于Linux的NAT穿透方法、装置、设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050108571A1 (en) * | 2003-09-29 | 2005-05-19 | Axalto Inc. | Secure networking using a resource-constrained device |
CN101770403A (zh) * | 2008-12-30 | 2010-07-07 | 北京天融信网络安全技术有限公司 | 一种多核平台上控制系统配置并发与同步的方法 |
CN102082698A (zh) * | 2009-11-26 | 2011-06-01 | 上海大学 | 基于改进型零拷贝技术的高性能内核的网络数据处理系统 |
CN102681892A (zh) * | 2012-05-15 | 2012-09-19 | 西安热工研究院有限公司 | Key-Value型单写多读锁池软件模块及其运行方法 |
CN102946347A (zh) * | 2012-12-07 | 2013-02-27 | 烽火通信科技股份有限公司 | 一种加速Linux系统本地数据包处理的方法及装置 |
US20170153847A1 (en) * | 2015-11-30 | 2017-06-01 | Freescale Semiconductor, Inc. | System and method for removing hash table entries |
-
2021
- 2021-02-24 CN CN202110203512.8A patent/CN112929278B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050108571A1 (en) * | 2003-09-29 | 2005-05-19 | Axalto Inc. | Secure networking using a resource-constrained device |
CN101770403A (zh) * | 2008-12-30 | 2010-07-07 | 北京天融信网络安全技术有限公司 | 一种多核平台上控制系统配置并发与同步的方法 |
CN102082698A (zh) * | 2009-11-26 | 2011-06-01 | 上海大学 | 基于改进型零拷贝技术的高性能内核的网络数据处理系统 |
CN102681892A (zh) * | 2012-05-15 | 2012-09-19 | 西安热工研究院有限公司 | Key-Value型单写多读锁池软件模块及其运行方法 |
CN102946347A (zh) * | 2012-12-07 | 2013-02-27 | 烽火通信科技股份有限公司 | 一种加速Linux系统本地数据包处理的方法及装置 |
US20170153847A1 (en) * | 2015-11-30 | 2017-06-01 | Freescale Semiconductor, Inc. | System and method for removing hash table entries |
Non-Patent Citations (2)
Title |
---|
许青林等: "高速网络环境下协议还原技术研究", 《小型微型计算机系统》 * |
许青林等: "高速网络环境下协议还原技术研究", 《小型微型计算机系统》, no. 02, 15 February 2016 (2016-02-15) * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115499410A (zh) * | 2022-07-29 | 2022-12-20 | 天翼云科技有限公司 | 基于Linux的NAT穿透方法、装置、设备及存储介质 |
CN115499410B (zh) * | 2022-07-29 | 2023-06-23 | 天翼云科技有限公司 | 基于Linux的NAT穿透方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112929278B (zh) | 2022-07-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6650642B1 (en) | Network relaying apparatus and network relaying method capable of high-speed routing and packet transfer | |
US5802065A (en) | Data receiving device | |
US6683885B1 (en) | Network relaying apparatus and network relaying method | |
US20060133374A1 (en) | Packet exchange device and packet exchange method | |
US9356844B2 (en) | Efficient application recognition in network traffic | |
US20050165966A1 (en) | Method and apparatus for high-speed parsing of network messages | |
CN111371779A (zh) | 一种基于dpdk虚拟化管理系统的防火墙及其实现方法 | |
WO2018032399A1 (en) | Server and method having high concurrency capability | |
JP2009152953A (ja) | ゲートウェイ装置およびパケット転送方法 | |
JP2000332817A (ja) | パケット処理装置 | |
CN111404817B (zh) | 一种提升网络通信设备分片数据包转发性能的方法及系统 | |
US20080225874A1 (en) | Stateful packet filter and table management method thereof | |
RU2517411C1 (ru) | Способ управления соединениями в межсетевом экране | |
CN101247308A (zh) | 基于网络处理器实现IPv6穿越IPv4的隧道报文处理方法 | |
WO2006055691A2 (en) | Queued, asynchronous communication architecture interface | |
CN114301868B (zh) | 快速生成虚拟容器浮动ip的方法及网络直通的方法和装置 | |
US6658003B1 (en) | Network relaying apparatus and network relaying method capable of high-speed flow detection | |
CN107147655A (zh) | 一种网络双协议栈并行处理模型及其处理方法 | |
WO2005057851A1 (fr) | Processeur de securisation de communications sur reseau et procede de traitement associe | |
EP2953302B1 (en) | Service packet processing method, apparatus and system | |
CN112929278B (zh) | 一种网络通信设备多核并行快速转发数据包的方法及系统 | |
CN113395212A (zh) | 网络装置及其操作方法和非暂时性计算机可读介质 | |
US20020001313A1 (en) | IP Data transmission network using a route selection based on level 4/5 protocol information | |
JP3491828B2 (ja) | 閉域網間接続システムと閉域網間接続方法およびその処理プログラムを記録した記録媒体ならびにホスティングサービスシステム | |
US7245615B1 (en) | Multi-link protocol reassembly assist in a parallel 1-D systolic array system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |