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

技术编号:31313121 阅读:19 留言:0更新日期:2021-12-12 21:49
本发明专利技术公开了一种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来修改报文的源端口后,发送报文到网络接口;本发明专利技术实现简单,不需要复杂的算法,对于多核高性能服务负载设备的吞吐量有质的提高。质的提高。质的提高。

【技术实现步骤摘要】
一种NAT端口分配在多核下对数据流免锁的实现方法


[0001]本专利技术涉及通信
,具体是指一种NAT端口分配在多核下对数据流免锁的实现方法。

技术介绍

[0002]负载均衡是高可用网络基础架构的关键组件,通常用于将工作负载分布到多个服务器来提高网站、应用、数据库或其他服务的性能和可靠性。
[0003]负载均衡NAT功能是最基本需求,当一个客户端请求发送给负载均衡设备后,负载均衡设备会将IP报文的目的地址目的端口转化为内网的服务器的IP地址和服务端口,会将IP报文的源地址和源端口修改为本地地址和一个端口。
[0004]目前,NAT技术比较成熟,但高性能的需求使设备采用多核处理成为普遍,NAT一个关键技术就是如何将源端口分配和回收,一般做法是将一个地址的65535个端口作为一个资源池,多个CPU核处理数据流过程时,操作同一个地址的端口的申请和释放时,会采用自旋锁锁定资源,该方法实现简单可靠,但是由于使用了自旋锁导致数据流的处理性能下降。
[0005]地址转换技术目前广泛应用于互联网。用于隔离Internet和Intranet的技术,目的是保护数据安全和简化网络拓扑,但在多核平台下,由于多个核共享同一个端口资源导致资源的保护,现有技术多使用自旋锁,这导致处理数据流的性能下降。
[0006]现有技术使用最直观和易于理解的技术,就是给多核共享的地址端口资源加自旋锁提供保护,一个显著的问题就是,如果多个核同时申请或释放同一个地址的端口时,多个核只能排队顺序执行,导致设备对数据的吞吐性能下降
[0007]所以,一种NAT端口分配在多核下对数据流免锁的实现方法成为人们亟待解决的问题。

技术实现思路

[0008]本专利技术的目的是在多核下实现无锁技术对共享资源的申请和释放,从而提供设备对NAT的高速处理。通过对一个地址端口资源进行分块,将资源块预分配给各个处理核,同一个数据流通过源目的端口和的HASH值固定一个核处理,最终实现无锁NAT。
[0009]为实现上述目的,本专利技术提供的技术方案为:一种NAT端口分配在多核下对数据流免锁的实现方法,包括以下步骤:
[0010]步骤1、驱动程序读取IP数据报文的TCP或UDP的源目的端口,将源目的端口的和做hash计算得到值n,值n对应的CPU核记为CPU核n,然后将数据报文发送给CPU核n的报文收发队列;
[0011]步骤2、CPU核n读取报文,经过服务负载模块处理,将目的地址和目的端口进行修改后,提交给NAT模块,NAT模块读取报文的目的端口p,进行hash计算,获得hash值x,通过二元hash,对应二级hash表找到hash队列y,从队列y获取一个未使用端口q返回给服务负载模块;
[0012]步骤3、服务负载模块通过NAT模块获取的端口q来修改报文的源端口后,发送报文到网络接口;
[0013]步骤4、客户端发送给负载均衡设备的报文和服务器响应给负载均衡设备的报文的源目的端口和的hash值不变,同一个数据流被绑定到了一个固定的CPU核处理;对该数据流的处理不涉及到锁,从而实现了免锁。
[0014]作为改进,所述步骤1中的IP数据报文可以被均匀的hash到不同的CPU核,分配到一个CPU核的IP报文获取的转化端口能够均匀的从N个hash节点队列请求端口资源,将端口资源实现分配给各个CPU核。
[0015]作为改进,所述步骤2中的二级hash表的源端口和目的端口有一定的对应关系,当目的端口转化为某一个端口后,源端口必须转化为特定端口,源目的端口和的hash值不变。
[0016]本专利技术与现有技术相比的优点在于:本专利技术通过驱动将TCP或UDP报文的源目的端口和做hash计算从而将不同的数据报文请求分发给不同的CPU核处理,为了实现对数据流的无锁处理,需要将源目的端口修改后的数据报文的响应报文也绑定到处理请求报文的CPU核上,实现了NAT对源端口修改必须符合二元hash表的算法,该算法有效实现了不同数据流在经过负载均衡设备被修改了源目的端口后还可以被同一个CPU核处理,从而实现了设备对数据流的无锁操作。本专利技术实现简单,不需要复杂的算法,对于多核高性能服务负载设备的吞吐量有质的提高。
附图说明
[0017]图1是本专利技术一种NAT端口分配在多核下对数据流免锁的实现方法的资源数据组织图一。
[0018]图2是本专利技术一种NAT端口分配在多核下对数据流免锁的实现方法的资源数据组织图二。
[0019]图3是本专利技术一种NAT端口分配在多核下对数据流免锁的实现方法的资源端口预分配图。
[0020]图4是本专利技术一种NAT端口分配在多核下对数据流免锁的实现方法的实施例示意图。
具体实施方式
[0021]下面结合附图对本专利技术一种NAT端口分配在多核下对数据流免锁的实现方法做进一步的详细说明。
[0022]本专利技术的工作原理如下:
[0023]1、资源数据组织
[0024]设定共有N个CPU核处理NAT,附图1、附图2均为一个二级hash表,分别对应两个CPU核,两幅图表明了源端口和目的端口有一定的对应关系,当目的端口转化为某一个端口后,源端口必须转化为特定端口,其目的就是为了端口转化后,源目的端口和的hash值不变,因此转化前和转化后的数据流都可以通过计算指定一个CPU核处理,从而实现一条数据流独立由一个CPU核处理,进而实现免锁。
[0025]图1表明,源目的端口的hash值的和为N+13,那么说明这样的源目的端口和的hash
为13,图1分配给核13使用。
[0026]图2表明,源目的端口的hash值的和为N

1,那么说明这样的源目的端口和的hash值为N

1,图2分配给核N

1使用。
[0027]例如,数据流源地址和端口为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
……

[0028]例如从该列表取一个未使用的端口2414,进行验证:(8009+2414)%30=13,说明转化后的IP报文的源目的端口和的hash值是13,这样转化前后的数据报文都可以在核13处理,从而实现对数据流的免锁处理。
[0029]2、资源端口预分配
[0030]结合附图3,每个核对应一个源地址都有个二元hash表,每个hash表把该地址的端口按一定算法本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种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、客户端发送给负载均衡设备的报文和服务器...

【专利技术属性】
技术研发人员:靳龙
申请(专利权)人:上海弘积信息科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1