一种nat端口分配在多核下对数据流免锁的实现方法

文档序号:1956857 发布日期:2021-12-10 浏览:11次 >En<

阅读说明:本技术 一种nat端口分配在多核下对数据流免锁的实现方法 (Method for realizing lock-free of data flow under multi-core condition by NAT port allocation ) 是由 靳龙 于 2021-08-31 设计创作,主要内容包括:本发明公开了一种NAT端口分配在多核下对数据流免锁的实现方法,驱动程序读取IP数据报文的TCP或UDP的源目的端口,将源目的端口的和做hash计算得到值n,值n对应的CPU核记为CPU核n,然后将数据报文发送给CPU核n的报文收发队列;CPU核n读取报文,经过服务负载模块处理,将目的地址和目的端口进行修改后,提交给NAT模块,NAT模块读取报文的目的端口p,进行hash计算,获得hash值x,通过二元hash,对应二级hash表找到hash队列y,从队列y获取一个未使用端口q返回给服务负载模块;服务负载模块通过NAT模块获取的端口q来修改报文的源端口后,发送报文到网络接口;本发明实现简单,不需要复杂的算法,对于多核高性能服务负载设备的吞吐量有质的提高。(The invention discloses a method for realizing that NAT ports are distributed to data flow under multi-core and are not locked, a driver reads a source and destination port of TCP or UDP of an IP data message, hash calculation is carried out on the sum of the source and destination ports to obtain a value n, a CPU core corresponding to the value n is marked as a CPU core n, and then the data message is sent to a message receiving and sending queue of the CPU core n; the CPU core n reads a message, the message is processed by a service load module, a destination address and a destination port are modified and then submitted to an NAT module, the NAT module reads a destination port p of the message, hash calculation is carried out to obtain a hash value x, a hash queue y is found corresponding to a secondary hash table through binary hash, and an unused port q is obtained from the queue y and returned to the service load module; after modifying the source port of the message through the port q acquired by the NAT module, the service load module sends the message to a network interface; the invention is simple to realize, does not need complex algorithm and can qualitatively improve the throughput of the multi-core high-performance service load equipment.)

一种NAT端口分配在多核下对数据流免锁的实现方法

技术领域

本发明涉及通信技术领域,具体是指一种NAT端口分配在多核下对数据流免锁的实现方法。

背景技术

负载均衡是高可用网络基础架构的关键组件,通常用于将工作负载分布到多个服务器来提高网站、应用、数据库或其他服务的性能和可靠性。

负载均衡NAT功能是最基本需求,当一个客户端请求发送给负载均衡设备后,负载均衡设备会将IP报文的目的地址目的端口转化为内网的服务器的IP地址和服务端口,会将IP报文的源地址和源端口修改为本地地址和一个端口。

目前,NAT技术比较成熟,但高性能的需求使设备采用多核处理成为普遍,NAT一个关键技术就是如何将源端口分配和回收,一般做法是将一个地址的65535个端口作为一个资源池,多个CPU核处理数据流过程时,操作同一个地址的端口的申请和释放时,会采用自旋锁锁定资源,该方法实现简单可靠,但是由于使用了自旋锁导致数据流的处理性能下降。

地址转换技术目前广泛应用于互联网。用于隔离Internet和Intranet的技术,目的是保护数据安全和简化网络拓扑,但在多核平台下,由于多个核共享同一个端口资源导致资源的保护,现有技术多使用自旋锁,这导致处理数据流的性能下降。

现有技术使用最直观和易于理解的技术,就是给多核共享的地址端口资源加自旋锁提供保护,一个显著的问题就是,如果多个核同时申请或释放同一个地址的端口时,多个核只能排队顺序执行,导致设备对数据的吞吐性能下降。

所以,一种NAT端口分配在多核下对数据流免锁的实现方法成为人们亟待解决的问题。

发明内容

本发明的目的是在多核下实现无锁技术对共享资源的申请和释放,从而提供设备对NAT的高速处理。通过对一个地址端口资源进行分块,将资源块预分配给各个处理核,同一个数据流通过源目的端口和的HASH值固定一个核处理,最终实现无锁NAT。

为实现上述目的,本发明提供的技术方案为:一种NAT端口分配在多核下对数据流免锁的实现方法,包括以下步骤:

步骤1、驱动程序读取IP数据报文的TCP或UDP的源目的端口,将源目的端口的和做hash计算得到值n,值n对应的CPU核记为CPU核n,然后将数据报文发送给CPU核n的报文收发队列;

步骤2、CPU核n读取报文,经过服务负载模块处理,将目的地址和目的端口进行修改后,提交给NAT模块,NAT模块读取报文的目的端口p,进行hash计算,获得hash值x,通过二元hash,对应二级hash表找到hash队列y,从队列y获取一个未使用端口q返回给服务负载模块;

步骤3、服务负载模块通过NAT模块获取的端口q来修改报文的源端口后,发送报文到网络接口;

步骤4、客户端发送给负载均衡设备的报文和服务器响应给负载均衡设备的报文的源目的端口和的hash值不变,同一个数据流被绑定到了一个固定的CPU核处理;对该数据流的处理不涉及到锁,从而实现了免锁。

作为改进,所述步骤1中的IP数据报文可以被均匀的hash到不同的CPU核,分配到一个CPU核的IP报文获取的转化端口能够均匀的从N个hash节点队列请求端口资源,将端口资源实现分配给各个CPU核。

作为改进,所述步骤2中的二级hash表的源端口和目的端口有一定的对应关系,当目的端口转化为某一个端口后,源端口必须转化为特定端口,源目的端口和的hash值不变。

本发明与现有技术相比的优点在于:本发明通过驱动将TCP或UDP报文的源目的端口和做hash计算从而将不同的数据报文请求分发给不同的CPU核处理,为了实现对数据流的无锁处理,需要将源目的端口修改后的数据报文的响应报文也绑定到处理请求报文的CPU核上,实现了NAT对源端口修改必须符合二元hash表的算法,该算法有效实现了不同数据流在经过负载均衡设备被修改了源目的端口后还可以被同一个CPU核处理,从而实现了设备对数据流的无锁操作。本发明实现简单,不需要复杂的算法,对于多核高性能服务负载设备的吞吐量有质的提高。

附图说明

图1是本发明一种NAT端口分配在多核下对数据流免锁的实现方法的资源数据组织图一。

图2是本发明一种NAT端口分配在多核下对数据流免锁的实现方法的资源数据组织图二。

图3是本发明一种NAT端口分配在多核下对数据流免锁的实现方法的资源端口预分配图。

图4是本发明一种NAT端口分配在多核下对数据流免锁的实现方法的实施例示意图。

具体实施方式

下面结合附图对本发明一种NAT端口分配在多核下对数据流免锁的实现方法做进一步的详细说明。

本发明的工作原理如下:

1、资源数据组织

设定共有N个CPU核处理NAT,附图1、附图2均为一个二级hash表,分别对应两个CPU核,两幅图表明了源端口和目的端口有一定的对应关系,当目的端口转化为某一个端口后,源端口必须转化为特定端口,其目的就是为了端口转化后,源目的端口和的hash值不变,因此转化前和转化后的数据流都可以通过计算指定一个CPU核处理,从而实现一条数据流独立由一个CPU核处理,进而实现免锁。

图1表明,源目的端口的hash值的和为N+13,那么说明这样的源目的端口和的hash为13,图1分配给核13使用。

图2表明,源目的端口的hash值的和为N-1,那么说明这样的源目的端口和的hash值为N-1,图2分配给核N-1使用。

例如,数据流源地址和端口为192.168.2.3:2873,目的地址和端口为202.22.105.7:80,经过设备后目的地址和端口转化为201.122.15.8:8009,源地址和端口转化为203.2.2.3:X。假如N=30,驱动会计算(2873+80)%30=13,这时驱动会把数据报文发送给核13处理,核13收到数据报文后,根据配置把目的端口修改为8009,那么源端口需要转化的端口计算如下,8009%30=29,目的端口的hash值是29,根据下附图1,那么源端口的hash值为14,那么在源端口hash[14]下找到端口列表,里边存储的端口是14,44,74……。

例如从该列表取一个未使用的端口2414,进行验证:(8009+2414)%30=13,说明转化后的IP报文的源目的端口和的hash值是13,这样转化前后的数据报文都可以在核13处理,从而实现对数据流的免锁处理。

2、资源端口预分配

结合附图3,每个核对应一个源地址都有个二元hash表,每个hash表把该地址的端口按一定算法分配给各个hash节点下,同一个端口资源出现在不同的核下,这时对一个队列的端口操作时,需要加锁;

在实际网路中,大量的IP报文可以被均匀的hash到不同的核,分配到一个核的IP报文获取的转化端口能够均匀的从N个hash节点队列请求端口资源,将端口资源实现分配给各个核。

结合附图4,本发明一种NAT端口分配在多核下对数据流免锁的实现方法的具体实施过程如下:

浏览器发送的报文的源地址端口为192.168.2.3:2873,目的地址和端口为202.22.105.7:80,经过负载均衡设备后,目的地址和端口转化为201.122.15.8:8009,源地址和端口转化为203.2.2.3:2414。如果设定处理数据流的核为30,那么(2873+80)%30=13,(2414+8009)%30=13,这样同一条数据流,不论是浏览器还是Web服务器发送给负载均衡设备的流量都会绑定由CPU核13来处理,从而实现免锁,这样负载均衡设备将会极大提供数据流的吞吐量。

以上对本发明及其实施方式进行了描述,这种描述没有限制性,附图中所示的也只是本发明的实施方式之一,实际的结构并不局限于此。总而言之如果本领域的普通技术人员受其启示,在不脱离本发明创造宗旨的情况下,不经创造性的设计出与该技术方案相似的结构方式及实施例,均应属于本发明的保护范围。

7页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:基于本地DNS服务器的请求管理方法、装置、介质及设备

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类