掌桥专利:专业的专利平台
掌桥专利
首页

网络地址转换方法、装置及计算机设备

文献发布时间:2024-04-18 19:58:30


网络地址转换方法、装置及计算机设备

技术领域

本申请涉及计算机网络技术领域,尤其涉及一种网络地址转换方法、装置及计算机设备。

背景技术

在某一区域内的多台计算机设备可以构成一个私网,计算机设备对应私网地址,私网内的计算机设备之间可以使用私网地址进行通信,此私网在互联网对应一个公网地址。若私网中的某计算机设备要与互联网中的另一计算机设备进行通信,需要进行网络地址转换,比如,若私网中的计算机设备向互联网中的另一计算机设备发送数据报文,需要将数据报文中的此计算机设备的私网地址转换为此私网的公网地址,使得互联网中的网络设备可以确定该数据报文的源端。

现有技术可以通过运行于计算机设备的代码实现网络地址转换,计算机设备为多CPU核心时,由于中断机制等原因,会出现代码在多个CPU核心中切换运行的情况,资源亲和性较差。

发明内容

本申请提供了一种网络地址转换方法、装置及计算机设备,可以有效提升网络地址转换过程的资源亲和性和转换效率。

第一方面,本申请实施例提供了一种网络地址转换方法,应用于计算机设备,包括:

创建目标私网对应的网关实例线程;

为网关实例线程分配CPU核资源和内存资源,CPU核资源和内存资源均为计算机设备已隔离的资源;

在网关实例线程利用CPU核资源和内存资源,对待转换报文进行网络地址转换,得到转换后报文,待转换报文包括目标私网中的计算机设备发出的报文、或向目标私网中的计算机设备发送的报文。

由此,可以为不同的私网各自创建对应的网关实例线程,不同私网的待转换报文可以分别在其对应的网关实例线程中同时进行网络地址转换,单位时间可处理的待转换报文数量有较大提升,本方法还可以使网关实例线程利用分配到的CPU核资源和内存资源,对待转换报文进行网络地址转换,大大提升了网络地址转换过程的资源亲和性和转换效率。

结合第一方面的网络地址转换方法,在某些可能的实现方式中,为网关实例线程分配CPU核资源和内存资源的步骤,可以包括:

确定网关实例线程的资源需求信息;获取计算机设备中多个CPU核各自的使用率信息、以及计算机设备的内存使用信息;基于资源需求信息、多个CPU核各自的使用率信息、以及内存使用信息,为网关实例线程分配CPU核资源和内存资源。

由此,可以结合计算机设备上CPU核以及内存的已有使用情况,以及网关实例线程的实际需求,更加精确地为网关实例线程分配CPU核资源和内存资源。

结合第一方面的网络地址转换方法,在某些可能的实现方式中,资源需求信息包括CPU核需求信息和内存需求信息,基于资源需求信息、多个CPU核各自的使用率信息、以及内存使用信息,为网关实例线程分配CPU核资源和内存资源的步骤,可以包括:

根据CPU核需求信息和多个CPU核各自的使用率信息,为网关实例线程分配CPU核资源;根据内存需求信息和内存使用信息,为网关实例线程分配内存资源。

结合第一方面的网络地址转换方法,在某些可能的实现方式中,根据CPU核需求信息和多个CPU核各自的使用率信息,为网关实例线程分配CPU核资源的步骤,可以包括:

对多个CPU核各自的使用率信息进行排序,得到多个CPU核各自对应的排序结果;根据多个排序结果和CPU核需求信息,从多个CPU核中确定网关实例线程的CPU核资源。

由此,可以结合CPU核的使用率信息的排序结果,以及网关实例线程的CPU核需求信息进行CPU核资源的确定。

结合第一方面的网络地址转换方法,在某些可能的实现方式中,CPU核需求信息包括CPU核需求数量,根据多个排序结果,从多个CPU核中确定网关实例线程的CPU核资源的步骤,可以包括:

确定满足预设要求的排序结果为目标排序结果,以及确定目标排序结果对应的CPU核为目标CPU核;循环获取除目标CPU核以外的多个其他CPU核的更新使用率信息,对多个更新使用流程信息进行排序得到多个更新排序结果,确定满足预设要求的更新排序结果为新的目标排序结果,以及确定新的目标排序结果对应的CPU核为又一目标CPU核的步骤,直至目标CPU核的数量满足CPU核需求数量;确定CPU核需求数量个目标CPU核为网关实例线程的CPU核资源。

由此,可以进行多轮排序,多轮筛选,从而从多个CPU核中筛选出CPU核需求数量个目标CPU核。

结合第一方面的网络地址转换方法,在某些可能的实现方式中,内存使用信息包括多个内存块的使用状态信息,使用状态信息包括已使用信息和未使用信息,根据内存需求信息和内存使用信息,为网关实例线程分配内存资源的步骤,可以包括:

从多个内存块中,确定使用状态信息为未使用状态的内存块为候选内存块;基于内存需求信息和至少一个候选内存块,为网关实例线程分配内存资源。

由此,可以为网关实例线程正确分配未使用的内存块。

结合第一方面的网络地址转换方法,在某些可能的实现方式中,内存需求信息包括内存长度需求值,候选内存块对应长度信息,内存资源包括至少一个目标内存块,基于内存需求信息和至少一个候选内存块,为网关实例线程分配内存资源的步骤,可以包括:

当存在与内存长度需求值相同的长度信息时,确定长度信息对应的候选内存块为目标内存块;当不存在于内存长度需求值相同的长度信息时,基于至少一个长度信息与内存长度需求值的差值,为网关实例线程分配至少一个目标内存块。

由此,可以优先将长度信息与内存长度需求值相同的候选内存块确定为目标内存块,也即优先为网关实例线程分配连续的内存块。

结合第一方面的网络地址转换方法,在某些可能的实现方式中,当不存在于内存长度需求值相同的长度信息时,基于至少一个长度信息与内存长度需求值的差值,为网关实例线程分配至少一个目标内存块的步骤,可以包括:

当不存在于内存长度需求值相同的长度信息时,依次计算至少一个长度信息与内存长度需求值的差值;当至少一个差值中存在正差值时,根据正差值对应的候选内存块,为网关实例线程分配至少一个目标内存块;当至少一个差值中不存在正差值时,基于每个候选内存块的差值,为网关实例线程分配至少一个目标内存块。

结合第一方面的网络地址转换方法,在某些可能的实现方式中,正差值的数量为至少两个,当至少一个差值中存在正差值时,根据正差值对应的候选内存块,为网关实例线程分配至少一个目标内存块的步骤,可以包括:

当至少一个差值中存在至少两个正差值时,比较至少两个正差值的大小,以得到一个目标正差值;根据目标正差值对应的候选内存块的起始地址信息、以及内存需求长度值,对候选内存块进行截取,得到目标内存块,目标内存块的长度信息为内存需求长度值。

由此,可以根据网关实例线程的内存需求长度值,从长度信息大于内存需求长度值的候选内存块,为网关实例线程截取目标内存块。

结合第一方面的网络地址转换方法,在某些可能的实现方式中,差值的数量为多个,当至少一个差值中不存在正差值时,基于每个候选内存块的差值,为网关实例线程分配至少一个目标内存块的步骤,可以包括:

当多个差值中不存在正差值时,计算任意两个差值的二值和值;当多个二值和值中存在与内存长度需求值对应的目标二值和值时,确定得到目标二值和值的两个差值各自对应的内存块为目标内存块。

由此,可以为网关实例线程确定两个目标内存块,两个目标内存块的长度信息之和与内存长度需求值相同。

结合第一方面的网络地址转换方法,在某些可能的实现方式中,网络地址转换方法还可以包括:

当多个和值中不存在与内存长度需求值相同的目标和值时,计算任意三个差值的三值和值;基于三值和值从多个候选内存块中,确定多个目标内存块。

由此,可以在无法找到两个合适的目标内存块时,通过三个目标内存块匹配网关实例线程的内存需求。

结合第一方面的网络地址转换方法,在某些可能的实现方式中,计算机设备还创建有数据转发线程,在网关实例线程利用CPU核资源和内存资源,对待转换报文进行网络地址转换,得到转换后报文的步骤,可以包括:

控制数据转发线程确定待转换报文、以及将待转换报文保存在CPU缓存;确定待转换报文对应的目标私网;控制目标私网对应的网关实例线程从CPU缓存获取待转换报文、以及利用CPU核资源和内存资源,对待转换报文进行网络地址转换,得到转换后报文。

结合第一方面的网络地址转换方法,在某些可能的实现方式中,控制数据转发线程确定待转换报文、以及将待转换报文保存在CPU缓存的步骤,可以包括:

控制物理网卡接收数据流;控制数据转发线程对数据流进行解析,得到多个数据报文,多个数据报文包括第一数据报文;控制数据转发线程基于第一数据报文,确定多个数据报文为待转换报文;控制数据转发线程将待转换报文保存至CPU缓存。

由此,仅需对一个数据报文进行处理,可确定数据流所包含的多个数据报文均为基于同一协议的生成的待转换报文,可以通过同样的逻辑对这些数据报文进行网络地址转换,因此可以将这些数据报文一起同步到CPU缓存,可以降低同步过程产生的资源消耗。

结合第一方面的网络地址转换方法,在某些可能的实现方式中,数据流的数据量为第一数据量,控制数据转发线程对数据流进行解析,得到多个数据报文的步骤,可以包括:

基于第一数据量和物理网卡的最大传输数据量,计算数据流包含的数据报文的数量信息;控制数据转发线程基于数量信息,对数据流进行解析,得到多个数据报文。

结合第一方面的网络地址转换方法,在某些可能的实现方式中,控制数据转发线程基于第一数据报文,确定多个数据报文为待转换报文的步骤,可以包括:

控制数据转发线程对第一数据报文进行解析,确定第一数据报文所使用的特征协议;控制数据转发线程获取第一数据量的匹配协议;当匹配协议与特征协议相同时,确定多个数据报文为待转换报文。

结合第一方面的网络地址转换方法,在某些可能的实现方式中,网络地址转换方法还可以包括:

控制目标私网对应的网关实例线程向数据转发线程发送转换后报文;控制数据转发线程向物理网卡基于转换后报文,生成转换后数据流;通过物理网卡发出转换后数据流。

由此可以向目的端传输该转换后报文。

结合第一方面的网络地址转换方法,在某些可能的实现方式中,网络地址转换方法还可以包括:

从本地内存中确定目标内存;将目标内存的内存页尺寸从默认数值修改为目标数值,目标数值大于默认数值。

由此,可以降低计算机设备寻址出错的可能性,从而降低寻址开销,提升设备性能。

第二方面,本申请实施例提供一种网络地址转换装置,包括:

创建单元,用于创建目标私网对应的网关实例线程;

分配单元,用于为网关实例线程分配CPU核资源和内存资源,CPU核资源和内存资源均为计算机设备已隔离的资源;

转换单元,用于在网关实例线程利用CPU核资源和内存资源,对待转换报文进行网络地址转换,得到转换后报文,待转换报文包括目标私网中的计算机设备发出的报文、或向目标私网中的计算机设备发送的报文。

第三方面,本申请实施例还提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序适于处理器进行加载,以执行本申请第一方面、以及第一方面的任意一种可能的实现方式所提供的任一种网络地址转换方法。

第四方面,本申请实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行计算机程序时实现本申请第一方面、以及第一方面的任意一种可能的实现方式所提供的任一种网络地址转换方法。

第五方面,本申请实施例还提供了一种计算机程序产品,该计算机程序产品包括:计算机程序代码,当该计算机程序代码在计算机设备上运行时,使得该计算机设备执行上述第一方面或第一方面任意一种可能的实现方式所提供的任一种网络地址转换方法。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本申请实施例的网络地址转换方法的流程示意图;

图2为本申请实施例的网络地址转换方法的另一流程示意图;

图3为本申请实施例的网络地址转换方法的另一流程示意图;

图4为本申请实施例的网络地址转换方法的一个架构图。

具体实施方式

下面详细描述本申请的实施例,实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本申请,而不能理解为对本申请的限制。

本申请提供了一种网络地址转换方法、装置及计算机设备,本申请的网络地址转换方法可以集成在网络地址转换系统中。

网络地址转换系统可以包括嵌入式操作系统、服务器操作系统、桌面操作系统等,网络地址转换系统可以运行于物理机,也可以运行在基于操作系统虚拟化技术实现的虚拟机或容器中。

网络地址转换系统可以集成在网络设备、计算机设备等,网络设备可以包括路由设备、网关设备等等,计算机设备可以包括终端、服务器等,终端可以包括个人电脑、笔记本电脑、智能手机、智能可穿戴设备、平板电脑等,服务器可以包括物理服务器、云服务器,物理服务器可以为单个服务器,也可以包括至少两个服务器构成的服务器集群、或分布式系统等。云服务器可以提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务。不同计算机设备之间可以通过有线或无线通信方式进行直接或间接连接,本申请对此不做限制。

本申请的网络地址转换系统可以创建目标私网对应的网关实例线程,为该网关实例线程分配CPU核资源和内存资源,CPU核资源和内存资源均为计算机设备已隔离的资源,在该网关实例线程利用该CPU核资源和内存资源,对待转换报文进行网络地址转换,得到转换后报文,其中,待转换报文可以包括目标私网中的计算机设备发出的报文、或向目标私网中的计算机设备发送的报文。

基于此可以为不同的私网各自创建对应的网关实例线程,不同私网的待转换报文可以分别在其对应的网关实例线程中同时进行网络地址转换,单位时间可处理的待转换报文数量有较大提升,本方法还可以使网关实例线程利用分配到的CPU核资源和内存资源,对待转换报文进行网络地址转换,大大提升了网络地址转换过程的资源亲和性和转换效率。

下面将结合实施例对本申请的网络地址转换方法进行详细介绍。本申请的网络地址转换方法可以集成网络地址转换装置,网络地址转换装置可以集成在计算机设备,计算机设备可以如服务器,参加图1,网络地址转换方法可以包括:

110、创建目标私网对应的网关实例线程。

其中,目标私网可以包括某区域内多台计算机设备以及网络设备构成的网络,目标私网内的每个设备可以各自对应一个私网地址,目标私网在公网(如互联网)中唯一对应一个公网地址。本申请中可以包括多个私网,可以为每个私网分别创建其对应的网关实例线程。可以通过网关实例线程独立地运行代码以实现某些功能,比如可以通过网关实例线程进行网络地址转换。

具体地,可以获取目标私网的相关信息、以及待创建的网关实例线程的相关配置信息,并基于这些信息创建目标私网对应的网关实例线程。这些信息中的部分或全部可以保存在计算机设备上的数据集中,数据集可以包括数据库;这些信息的部分或全部也可以为用户输入的信息。

在一些实施例中,本申请的网络地址转换方法可以集成在应用程序,应用程序可以把目标私网的相关信息和/或目标私网对应的待创建的网关实例线程的相关配置信息保存在数据库,应用程序可以包括管理线程,管理线程可以从数据库获取创建目标私网对应的网关实例线程所需的信息,并基于此信息创建网关实例线程。

应用程序可以安装在计算机设备,可以将应用程序配置为随计算机设备的启动而启动,计算机设备的操作系统可以根据应用程序的相关配置信息,从计算机设备的多个CPU核和内存中,确定应用程序使用的目标CPU核和目标内存。

在一些实施例中,为了更好地提升寻址效率,可以将目标内存的内存页尺寸从默认数据修改为目标数值,目标数据大于默认数据,比如,默认数值通常为4KB,目标数值可以包括2MB、4MB等。此种方式可以大幅降低缓存失败(如tlb miss)的发生概率,保证在实现本申请的网络地址转换方法的过程中可以快速高效地寻址。

120、为网关实例线程分配CPU核资源和内存资源,CPU核资源和内存资源均为计算机设备已隔离的资源。

其中,CPU核资源可以包括网关实例线程在运行代码以进行网络地址转换时所使用的CPU核,内存资源可以包括网关实例线程运行代码以进行网络地址转换时所使用的内存块。

具体地,为网关实例线程分配CPU核资源和内存资源的方式可以有多种,比如可以根据预设策略,为网关实例线程分配规格(如大小、数量等)固定的CPU核资源和内存资源。

在一些实施例中,为网关实例线程分配CPU核资源和内存资源还可以包括:首先确定网关实例线程的资源需求信息,其中,资源需求信息可以包括在网关实例线程运行代码所需资源的信息,资源需求信息可以为用户输入或系统自动生成,资源需求信息可以预先保存在数据库中,确定资源需求信息可以比如,向数据库发送针对网关实例线程的数据获取请求,以及接收数据路基于数据获取请求返回的资源需求信息。

然后获取执行本申请的网络地址转换方法的计算机设备中,多个CPU核各自的使用率信息、以及该计算机设备中内存的内存使用信息,计算机设备可以包括多个CPU核,计算机设备保持运行状态需要多个CPU核的参与,各个CPU核会执行不同的任务,因此各个CPU核的使用率信息有所不同,计算机设备的内存可以分为多个内存块,每个内存块可能被使用,也可能为空(未被使用),内存使用信息可以表征计算机设备的各个内存块是被使用还是未被使用。可以通过计算机设备内部的监测工具,实时获取计算机设备中各个CPU核的使用率信息,以及计算机设备的内存使用信息。

最后基于资源需求信息、多个CPU核各自的使用率信息以及内存使用信息,为网关实例线程分配CPU核资源和内存资源。在一些实施例中,资源需求信息可以包括CPU核需求信息和内存需求信息,基于资源需求信息、多个CPU核各自的使用率信息以及内存使用信息,为网关实例线程分配CPU核资源和内存资源到的过程可以包括:

(1)根据CPU核需求信息和多个CPU核各自的使用率信息,为网关实例线程分配CPU核资源。

其中,CPU核需求信息可以包括CPU核的数量、CPU核的使用率范围、CPU核的使用时段等。比如,可以根据CPU核需求信息中的使用率范围,对多个CPU核各自的使用率信息进行筛选,将符合使用率范围的使用率信息对应的CPU核作为网关实例线程的CPU核资源进行分配。

在一些实施例中,可以对多个CPU核各自的使用率信息进行排序,得到多个CPU核各自对应的排序结果,根据多个排序结果和CPU核需求信息,从多个CPU核中确定网关实例线程的CPU核资源。

排序方式可以包括从小到大,也可以包括从大到小,等等。具体不做限制。

比如,计算机设备可以包括4个CPU核,分别为核1、核2、核3和核4,可以获取这4个CPU核各自的使用率信息,分别为使用率1、使用率2、使用率3和使用率4,然后可以对这4个使用率信息进行排序,使用率信息的排序结果即为CPU核的排序结果,分别为:核1对应排序结果:1,核1对应排序结果:3、核1对应排序结果:4、核1对应排序结果:2。

根据排序结果和CPU核需求信息确定CPU核资源的方式可以有多种,比如,CPU核需求信息包括CPU核需求数量,可以将排序结果为前CPU核需求数量个的CPU核确定为网关实例线程的CPU核资源。

比如,可以根据这4个排序结果和CPU核需求信息,从4个CPU核中确定作为网关实例线程的CPU核资源的目标CPU核:核1。

在一些实施例中,CPU核需求信息包括CPU核需求数量,根据多个排序结果和CPU核需求信息,从多个CPU核中确定网关实例线程的CPU核资源,可以包括:

确定满足预设要求的排序结果为目标排序结果,以及确定目标排序结果对应的CPU核为目标CPU核,预设要求可以根据实际需求灵活设置,比如,排序结果为第一,排序结果为倒数第一,排序结果为中数,等等;循环获取除目标CPU核以外的多个其他CPU核的更新使用率信息,对多个更新使用流程信息进行排序得到多个更新排序结果,确定满足预设要求的更新排序结果为新的目标排序结果,以及确定新的目标排序结果对应的CPU核为又一目标CPU核的步骤,直至目标CPU核的数量满足CPU核需求数量,其中,更新使用率信息可以为实时获取到的CPU核的使用率信息;确定CPU核需求数量个目标CPU核为网关实例线程的CPU核资源。

各个CPU核在不同时间点执行不同的任务,任务随时会开启和结束,因此各个CPU核心的使用率信息也是处于变化之中,因此在为网关实例线程进行CPU核资源配置过程中,可以多次获取计算机设备中CPU核的使用率信息,以及对获取到的使用率信息进行排序,每一次确定一个目标CPU核,直至目标CPU核的数量与CPU核需求数量相一致,从而更精确高效地利用目标CPU核。

比如,CPU核需求数量可以为2,预设要求可以为排序结果为1,则可以确定核1为一个目标CPU核,然后再通过工具获取核2、核3和核4的实时使用率信息,分别为更新使用率2、更新使用率3和更新使用率4,对这3个使用率信息进行排序,使用率信息的排序结果即为CPU核的排序结果,分别为:核2对应排序结果:3,核3对应排序结果:1、核4对应排序结果:2,可以确定核3为另一个目标CPU核,且此时目标CPU核的数量为2,与CPU核需求数量一致,则可以停止循环,并确定核1和核3为网关实例线程的CPU核资源。

(2)根据内存需求信息和内存使用信息,为网关实例线程分配内存资源。

内存需求信息可以包括内存长度需求值、内存块数量限制值等,内存使用信息可以包括多个内存块的使用状态信息,使用状态信息可以表征内存块是否被使用,使用状态信息可以包括已使用信息和未使用信息,分别表征内存块已被使用、内存块未被使用。

比如,可以首选根据内存块数量限制值和内存长度需求值,从多个内存块中筛选出若干候选内存块,再实时获取每个候选内存块的使用状态信息,并根据未使用状态对若干候选内存块进行筛选,确定其中的至少一个目标内存块作为网关实例线程的内存资源。也即此处先根据内存需求信息对多个内存块进行一轮筛选,再根据内存使用信息对一轮筛选得到的候选内存块进行二轮筛选,最终得到目标内存块。

在一些实施例中,还可以先根据使用状态信息对多个内存块进行一次筛选,在根据内存需求信息对一轮筛选所得的多个候选内存块进行二轮筛选,得到目标内存块,目标内存块作为网关实例线程的内存资源,具体可以包括:从多个内存块中,确定使用状态信息为未使用状态的内存块为候选内存块;基于内存需求信息和至少一个候选内存块,为网关实例线程分配内存资源。

具体地,基于内存需求信息和至少一个候选内存块,为网关实例线程分配内存资源的过程可以有多种,比如,内存需求信息可以包括内存块数量限制值和内存长度需求值,可以优先根据内存长度需求值对候选内存块进行筛选,以得到目标内存块;若无法根据内存长度需求值进行筛选、或筛选后无法得到目标内存块,可以再根据内存块数据限制值进行再次筛选,已得到目标内存块。

在一些实施例中,内存需求信息可以包括内存长度需求值,可以根据内存长度需求值对候选内存块进行筛选,可以优先将于内存长度需求值相同的候选内存块确定为目标内存块,此时的执行过程可以包括:当存在与内存长度需求值相同的长度信息时,确定长度信息对应的候选内存块为目标内存块;当不存在于内存长度需求值相同的长度信息时,基于至少一个长度信息与内存长度需求值的差值,为网关实例线程分配至少一个目标内存块。

若候选内存块中不包括长度信息与内存长度需求值相同的内存块时,可以根据候选内存块的长度信息与内存长度需求值的差值,对候选内存块进行进一步处理,得到目标内存块,进一步处理的方式可以如截取、组合等。

在一些实施例中,具体可以包括:当不存在于内存长度需求值相同的长度信息时,依次计算至少一个长度信息与内存长度需求值的差值,差值可以包括正差值(正数)、负差值(负数)。

当至少一个差值中存在正差值时,根据正差值对应的候选内存块,为网关实例线程分配至少一个目标内存块,正差值即此候选内存块的长度信息比内存长度需求值大,此时可以该正差值对应的候选内存块进行截取,截取得到一个长度信息为内存长须需求值的目标内存块。一些应用场景下,正差值的数量为多个,可以从多个正差值中选取一个目标正差值,再对目标正差值对应的候选内存块进行截取。

从多个正差值中选取目标正差值的方式可以有多种,比如,可以将数值最小的正差值确定为目标正差值,又比如,可以将特定数值的正差值确定为目标正差值,等等,

候选内存块包括起始地址信息,对候选内存块截取可以包括从起始地址信息,再根据内存需求长度值,计算一个终止地址信息,截取起始地址信息和终止地址信息之间的内存块为目标内存块。

当至少一个差值中不存在正差值时,基于每个候选内存块的差值,为网关实例线程分配至少一个目标内存块。差值中不存在正差值,则所有候选内存块的长度信息均小于内存长度需求值,此时需要将多个候选内存块组合,共同作为网关实例线程的目标内存块。具体可以优先查找两个候选内存块的组合,这两个候选内存块的长度信息之和与内存长度需求值相同,若无法找到,再查找三个候选内存块的组合,这三个候选内存块的长度信息之和与内存长度需求值相同,以此类推,直至确定目标内存块。此外,也可以利用截取的方式,如若两个候选内存块的长度信息之和大于内存长度需求值,但这两个候选内存块中的任意一个的长度信息均小于内存长度需求值,则可以对其中一个候选内存块进行截取,使截取后的内存块和未截取的另一个候选内存块的长度信息之和与内存长度需求值相等,则此截取后的内存块和另一个候选内存块即为目标内存块。

两个候选内存块的长度信息之和,与两个候选内存块的负差值之和的绝对值相等,因此也可以通过计算两个负差值的二值和值,从多个候选内存块中确定两个作为目标内存块。

具体地,当多个差值中不存在正差值时,计算任意两个差值的二值和值;当多个二值和值中存在与内存长度需求值对应的目标二值和值时,确定得到目标二值和值的两个差值各自对应的内存块为目标内存块。

比如,存在3个候选内存块:内存块1、内存块2和内存块3,这3个内存块与内存长度需求值的差值分别为:差值1:-2、差值2:-3、差值3:-6,此时计算任意两个差值之间的二值和值,得到-5、-8和-9,知内存长度需求值为9,-9与9对应,因此二值和值-9对应:差值2和差值3,对应内存块2和内存块3为目标内存块。

在一些实施例中,当多个和值中不存在与内存长度需求值相同的目标和值时,计算任意三个差值的三值和值;基于三值和值从多个候选内存块中,确定多个目标内存块。

具体地,存在与内存长度需求值对应的三值和值时,可以将该三值和值对应的三个候选内存块确定为目标内存块;不存在与内存长度需求值对应的三值和值时,可以选定与内存长度需求值差异最小的三值和值,并对此三值和值对应的三个候选内存块中的至少一个进行截取,从而得到目标内存块,也可以继续计算任意四个差值的四值和值,并基于四值和值从多个候选内存块中确定多个目标内存块。

130、在网关实例线程利用CPU核资源和内存资源,对待转换报文进行网络地址转换,得到转换后报文,待转换报文包括目标私网中的计算机设备发出的报文、或向目标私网中的计算机设备发送的报文。

其中,待转换报文可以包括需要进行网络地址转换的报文,待转换报文可以包括目标私网中的计算机设备发出的报文,此时网络地址转换可以包括:将待转换报文中的私网地址转换为目标私网在公网的公网地址;待转换报文也可以包括向目标私网中的计算机设备发送的报文,此时网络地址转换可以包括:将待转换报文中的目标私网的公网地址转换为目标私网中计算机设备的私网地址。

具体地,可以首先获取待转换报文,确定待转换报文对应的目标私网,可以确定此目标私网的网关实例线程,利用计算机设备为该网关实例线程分配的CPU核资源和内存资源,对待转换报文进行网络地址转换得到转换后报文。

在一些实施例中,计算机设备还创建有数据转发线程,

计算机设备可以控制数据转发线程确定待转换报文,以及将待转换报文保存到CPU缓存,确定待转换报文对应的目标私网后,网关实例线程的CPU核资源可以直接从CPU缓存获取待转化报文,以及在网关实例线程利用CPU核资源和内存资源对转换报文进行网络地址转换。

具体地,数据转发线程确定待转换的方式可以有多种,比如,数据转发线程可以将每个接收到的数据报文确定为待转换报文。

在一些实施例中,计算机设备可以控制其上设置的物理网卡接收数据流、以及将数据流保存在物理网卡缓存,数据转发线程可以将物理网卡缓存中的数据流保存到数据转发线程内存,并对数据流进行解析,确定其中包含的多个数据报文,多个数据报文可以包括第一数据报文,数据转发线程可以由此第一数据报文,确定这多个数据报文是否为待转换报文,若是,数据转发线程可以将待转换报文保存到CPU缓存。

在一些实施例中,数据流的数据量可以第一数据量,可以基于第一数据量和物理网卡的最大传输数量,计算数据流包含的数据报文的数量信息,再控制数据转发线程根据数量信息对数据流进行解析,得到多个数据报文,数据报文的数量与数据量信息一致。

其中,最大传输数量可以包括最大传输单元(Maximum Transmission Unit,MTU),最大传输单元可以包括物理网卡一次能够接收的数据流的最大数据量。

计算数量信息可以通过如下公式:

P=min{(%),1}+(N/)

其中,P可以为报文数量(即数量信息),N可以为数据流的数据量(即第一数据量),X可以为物理网卡的MTU。

具体地,由第一数据报文确定多个数据报文是否为待转换报文的方式可以有多种,比如,第一数据数据报文可以包括依次确定多个数据报文中的第一个数据报文(可称为首数据报文)和最后一个数据报文(可称为尾数据报文),分别对首数据报文和尾数据报文解析,若解析到二者在特定层的协议相同,可以确定多个报文均为待转换报文。

在一些实施例中,第一数据报文可以包括多个数据报文中特定位置的一个数据报文,特定位置可以如首位等,具体可以根据实际需求灵活设置,数据转发线程可以对第一数据报文解析,确定其使用的特征协议,特征协议可以如常见的应用层协议、传输层协议等,如文件传输协议(File Transfer Protocol,FTP)。

然后可以数据流的第一数据量,确定其对应的匹配协议,此过程可以如从网关实例线程的配置文件中查找第一数据量对应的匹配协议,等。最后可以比较匹配协议与特征协议,若二者相同,则确定多个数据报文为待转换报文。

由此可以仅对少量数据报文处理,即可确定多个数据报文是否为同一批待转换报文,若是则可以将这多个数据报文全部保存到CPU缓存,便于后续网关实例线程批量对其进行网络地址转换。

本申请实施例在得到待转换报文后,还可以通过网关实例线程将转换后报文转发到数据转发线程,再通过数据转发线程对转换后报文进行封装,得到转换后数据流,最终通过物理网卡发出该转换后数据流,使得数据报文最终可以向目的端传输。

下面将结合实施例对本申请的网络地址转换方法进行进一步介绍。本申请的网络地址转换方法可以集成在应用程序,应用程序可以为多线程结构,应用程序可以设置为随物理计算机设备的启动而启动,操作系统可以根据应用程序的配置信息为应用程序分配和隔离尽可能连续的内存资源和CPU核资源。

应用程序可以包括管理线程,管理线程可以将隔离给应用程序的内存资源的内存页尺寸从默认4KB修改为4MB,减少页数,可以有效减少tlb miss的出现频率。

管理线程可以作为应用程序的主线程,可以创建线程以及为线程分配资源,还可以与数据库进行交互,比如从数据库获取数据(如私网的相关信息、网关实例线程的相关信息、配置文件信息等)。

应用程序启动后,管理线程可以动态记录隔离给应用程序的内存资源和CPU核资源的使用情况,如各个CPU核各自的使用率信息(可以保存在核使用率表中)、以及内存的内存使用信息(可以保存在内存块状态表中),比如管理线程可以通过工具实时获取CPU核资源以及内存资源的使用情况,工具可以如TOP接口等。

管理线程还可以创建高性能的数据转发线程,以及从应用程序的CPU核资源和内存资源中,划出一部分分配给数据转发线程,数据转发线程可以用于接收、转发数据报文,如将物理网卡传输的数据报文转发至对应的网关实例线程,将网关实例线程发送的转换后报文转发到物理网卡。

具体地,物理网卡可以接收其他网络设备传输的数据流,数据转发线程可以直接从物理网卡的缓存获取数据流,对数据流解析得到多个数据报文,确定多个数据报文是否为待转换报文,若是则将这多个数据报文保存在CPU缓存,使得CPU核心可以直接从CPU缓存拿取数据,网关实例线程可以基于同样的逻辑对这多个数据报文批量处理,有效提升CPU处理数据的效率。

可以通过预取算法确定是否可以将多个数据报文一起保存到CPU缓存,具体地,源端一次发送的数据流数量会随着其依据协议的不同而有所变化,比如,数据流A为N Bytes,具体可以通过函数N=get_datalen(A)得到。数据转发线程可以依据N预估数据流A所依据的协议为P;数据转发线程可以确定物理网卡的MTU为M Bytes,然后根据N和M计算数据流A包含数据报文的数量S,比如S=Min{(N%X),1}+(N/X);数据转发线程可以数据流解析,得到S个数据报文,对其中任意一个数据报文进行解析,确定其所依据的协议为Q,若协议P和协议Q相同,可以确定S个数据包为一个源端一次性发送,则可以将这S个数据报文同步到CPU缓存,如可以调用_mm_prefetch(seg_addr,Len(S))通过网关实例线程可以基于相同的处理逻辑,对这S个数据报文进行网络地址转换。

比如,参见图2,高性能的数据交换线程轮询物理网卡的队列,以将物理网卡接收打的数据流保存到数据交换线程的内存,然后数据交换线程可以基于数据预取算法确定多个待转换的数据报文,将这多个数据报文同步到CPU缓存中,可以在协议栈/数据交换线程对多个数据报文进行数据,根据预设规则为数据报文分配标签,并根据标签/数据报文对应的目标私网将数据保存推入其对应的网关实例线程的队列中,在网关实例线程对数据报文进行网络地址转换,将转换后报文向物理网卡发送。

管理线程还可以创建网关实例线程、以及为网关实例线程分配CPU核资源和内存资源,具体地,管理线程可以基于用户需求创建网关实例线程,用户需求可以包含对待创建的网关实例线程的性能需求信息,比如性能需求信息可以包括X个CPU核以及Y MB的内存,X、Y为正数,可以获取动态记录的核使用率表和内存块状态表,核使用率表可以包括多个CPU核的使用率值,内存块状态表可以包括多个内存块的使用状态信息。

管理线程可以基于性能需求信息、核使用率表和内存块状态表,为网关实例线程分配CPU核资源和内存资源,具体地,可以对核使用率表中的使用率值进行排序,确定使用率值最小的CPU核为网关实例线程的一个目标CPU核,再对实时获取的除此目标CPU核以外的其他CPU核的使用率值进行排序,将使用率值最低的CPU核确定为另一个目标CPU核,直至目标CPU核的数量为X。

在一些实施例中,可以通过如下公式确定网关实例线程的目标CPU核:

F(X)={min(cur_tlb[n]),min(cur_tlb[n-1]),……,min(cur_tlb[n-X])}

其中,F(X)为目标CPU核,X为目标CPU核的数量,n为核使用率表中CPU核的数量,cur_tlb[n]为核使用率表中n个CPU核各自的使用率值,min(cur_tlb[n])可以为求n个使用率值的最小值。

内存块状态表可以包括多个内存块,以及各个内存块的起始地址、长度等,在一些应用场景下,内存块状态表中的内存块均可用(即处于未使用状态),在另一些应用场景下,内存块状态表中可以包括不可用(即处于已使用状态)和可用(即处于未使用状态)的内存块,此时可以首先筛除内存状态表中不可用的内存块,从多个可用的内存块中为网关实例线程分配内存资源。

具体地,管理线程可以比较Y与各个可用的内存块的长度,若存在与Y相同的长度,则将此长度对应的内存块确定为目标内存块;若不存在于Y相同的长度,则计算各个长度与Y的差值,若多个差值中存在正值差值,可以对数值最小的正值差值对应的内存块进行截取,具体地,可以由此内存块的起始地址起,截取一个长度为Y的目标内存块。

若多个差值均为负值差值,可以计算任意两个负值差值的二值和值,若存在与Y相等的二值和值绝对值,可以确定此和值对应的两个内存块为目标内存块,若不存在与Y相等的和值绝对值,可以计算任意三个负值差值的三值和值、并确定是否存在与Y相等的三值和值绝对值,存在则确定此三值和值对应的三个内存块为目标内存块,不存在则基于类似的逻辑继续进行计算和比较,直至确定目标内存块,

在一些实施例中,可以通过如下公式表达确定网关实例线程的目标内存块:

P(mem_start_addr)=min{|Y-memss_tbl[0].len|,……,|Y-memss_tbl[n].len|}

其中,n为内存块的数量,memss_tbl[n].len表示第n个内存块的长度,|Y-memss_tbl[n].len|表示网关实例线程所需内存Y与第n个内存块的长度之间差值的绝对值,P(mem_start_addr)表示目标内存块。

本申请可以根据网关实例线程的性能需求信息,个性化得为每个网关实例线程分配恰当的CPU核资源和内存资源,可以在网关实例线程利用分配到的CPU核资源和内存资源进行数据处理(如网络地址转换),避免出现在CPU核之间切换、或竞争CPU核的使用等情况,可以降低资源消耗,有效提升资源亲和性。

比如,参见图3,管理线程可以首先进行资源初始化,将内存页内存页尺寸改的更大,维护应用程序的大页内存池和CPU核池,管理线程可以监听数据库以从中获取所需数据,管理线程可以调动用户驱动,回调创建高性能的数据转发线程(用户态协议栈),管理线程还可以进行资源调度,根据资源使用情况创建nat网关实例线程,以及为nat网关实例线程分配CPU核资源和内存资源。

参见图4,图4为本申请的一个结构图,具体为高性能的虚拟nat网关结构图,其中管理线程可以接收使用者的指令,从而创建、删除、编辑虚拟nat网关实例线程,以及为虚拟nat网关实例线程分配资源,管理线程可以创建多个虚拟nat网关实例线程,管理线程还可以与数据库(DB)交互,管理线程还可以创建高性能的数据交换线程(即数据转发线程),数据转发线程也可以与数据库交互,数据转发线程可以向各个虚拟nat网关实例线程进行数据交互、以及与物理网关的网口进行交互,数据转发线程主要进行数据分发,并不对数据做过多处理。

需要说明的是,在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得程序,然后将其存储在计算机存储器中。

应当理解,本申请的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。

此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本申请的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。

尽管上面已经示出和描述了本申请的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本申请的限制,本领域的普通技术人员在本申请的范围内可以对上述实施例进行变化、修改、替换和变型。

相关技术
  • 网络地址转换方法、装置及地址转换设备
  • 脚本转换方法、装置、计算机设备及存储介质
  • 一种文件转换方法、系统、装置及计算机可读存储介质
  • 三维模型格式转换方法、系统、计算机设备及存储介质
  • 网络地址转换设备、网络地址转换系统、网络地址转换方法以及计算机可读记录介质
  • 一种网络地址转换方法、装置和设备
技术分类

06120116501124