具体实施方式
为了解决现有技术中存在的NAT处理性能较差的问题,本申请以下实施例中提供了一种分布式系统架构中的NAT处理方法,以及一种可以应用该方法的装置。
本申请以下实施例的方法及装置,可以应用于如图2所示的分布式系统架构中。其中,每一个接口板和每一个业务板中均设置有硬件可编程逻辑器件,用于共同实现NAT处理。在实际实施过程中,硬件可编程逻辑器件例如可以是FPGA(Field Programmable GateArray,现场可编程门阵列)、CPLD(Complex Programmable Logic Device,复杂可编程逻辑器件)、ASIC(Application Specific Integrated Circuit,专用集成电路)芯片等,本申请对此不做限定。
本申请一具体实施例中,分布式系统架构中的NAT处理方法由接口板上的硬件可编程逻辑器件来执行。如图3所示,该方法中包括以下步骤:
步骤S102,接口板上的硬件可编程逻辑器件在接收到需要进行NAT的报文之后,从分流表中查找该报文对应的NAT类型、NAT地址映射表的索引和业务板索引;其中,NAT类型中包括:NAT方向和需要转换的IP地址类型;之后执行步骤S104;
接口板上的端口接收到报文后,将该报文发送给接口板上的硬件可编程逻辑器件,之后该硬件可编程逻辑器件会执行步骤S102。接口板上的硬件可编程逻辑器件上预先保存有如表1-1所示的分流表,该分流表根据用户配置的NAT规则进行创建,预先创建该分流表的过程如下:预先在接口板上的硬件可编程逻辑器件中创建如表1-1所示的分流表,其中,该分流表的每一个表项中包含有:转换前的IP地址、包括正向NAT和需要转换的IP地址类型的NAT类型、转换后的IP地址所在的NAT地址映射表的索引、与业务板索引之间的对应关系,该业务板索引的值为空。
这样,在步骤S102中,接口板上的硬件可编程逻辑器件会根据该报文的源IP地址或目的IP地址,从分流表中查找到对应的NAT类型、NAT地址映射表的索引和业务板索引。
其中,NAT类型中包括:NAT方向和需要转换的IP地址类型,NAT方向是正向NAT或反向NAT,需要转换的IP地址类型是源IP地址或目的IP地址。关于正向NAT和反向NAT的定义是:首次匹配NAT规则时执行的NAT为正向NAT,执行正向NAT的报文为正向报文;正向报文的回应报文是反向报文,反向报文执行的NAT为反向NAT。
可见,在初始创建的分流表中会记录有每一个正向报文的转换前的源或目的IP地址、该正向报文需要执行的NAT的NAT类型:正向NAT和需要转换的IP地址类型、NAT地址映射表的索引、以及业务板索引,该NAT地址映射表的索引是该正向报文的转换后的源或目的IP地址所在的NAT地址映射表的索引。
表1-1
在如表1-1所示的分流表中,NAT类型中可以使用两个字节来分别存储NAT方向和需要转换的IP地址类型。
步骤S104,判断在步骤S102中查找到的业务板索引的值是否为空,若是,
则执行步骤S106,否则,执行步骤S118;
步骤S106,判断在步骤S102中查找到的NAT类型中包括的NAT方向是否是正向NAT,若是,则执行步骤S108,否则,执行步骤S114;
步骤S108,从在步骤S102中查找到的NAT地址映射表的索引所指示的NAT地址映射表中,为该报文获取NAT后的IP地址;之后执行步骤S110;
在步骤S108中,为该报文获取到NAT后的IP地址之后,还需要执行以下步骤:在如表1-1所示的分流表中添加一表项,添加的表项中包含有:步骤S108中获取到的NAT后的IP地址、包括反向NAT和需要转换的IP地址类型的NAT类型、NAT地址映射表的索引、与业务板索引之间的对应关系;此时,如表1-1所示的分流表更新为如表1-2所示。
其中,当步骤S102中查找到的NAT类型中包括的需要转换的IP地址类型是源IP地址时,该添加的表项中的需要转换的IP地址类型是目的IP地址,当步骤S102中查找到的NAT类型中包括的需要转换的IP地址类型是目的IP地址时,该添加的表项中的需要转换的IP地址类型是源IP地址;该添加的表项中的NAT地址映射表的索引和业务板索引的值为空。
表1-2
如表1-2所示,分流表中还会记录有每一个反向报文的源或目的IP地址、该反向报文需要执行的NAT的NAT类型:反向NAT和需要转换的IP地址类型、NAT地址映射表的索引、以及业务板索引,由于只有正向NAT才需要从NAT地址映射表中获取一个IP地址,作为NAT后的源或目的IP地址,因此,在分流表中,正向报文对应的表项中的NAT地址映射表的索引才不为空,而反向报文对应的表项中的NAT地址映射表的索引为空。
而且,当一个正向报文对应的需要转换的IP地址类型是源IP地址时,该正向报文的反向报文对应的需要转换的IP地址类型是目的IP地址;当一个正向报文对应的需要转换的IP地址类型是目的IP地址时,该正向报文的反向报文对应的需要转换的IP地址类型是源IP地址。
在实际实施过程中,在步骤S108之前,需要预先创建各个NAT地址映射表。具体的,可以包括以下步骤:
步骤11:硬件可编程逻辑器件驱动(软件)接收到用户的配置信息,其中,该配置信息中包括:创建NAT地址池以及该NAT地址池中的IP地址范围;
步骤12:硬件可编程逻辑器件驱动将该NAT地址池的相关信息和用于指示创建的操作命令,发送给接口板上的硬件可编程逻辑器件;
步骤13:接口板上的硬件可编程逻辑器件根据该操作命令,在本地创建一NAT地址映射表,用于记录该NAT地址池中的所有IP地址,为需要进行NAT的正向报文提供NAT后的IP地址。
该NAT地址映射表的格式可以如表2所示:
表2
在表2中,CurNatAddrIdx是地址指针,用于指示当前要选择的IP地址的索引,其长度可以是16bit(比特);CurNatAddrIdx的初始值为1;每次为一个需要进行NAT的报文获取IP地址时,将CurNatAddrIdx的当前值n所指向的NatAddr分配给该报文,之后,将CurNatAddrIdx的当前值n更新为(n+1)%N;其中,N为该NAT地址映射表中的IP地址的总数;
NatAddrNum是该NAT地址映射表中的IP地址的总数N,也是对应的NAT地址池中的IP地址的总数N;NatAddrNum的长度可以是16bit;
NatAddr是NAT地址池中的IP地址,其长度可以是32bit;NAT地址映射表中的NatAddr的个数为N。
后续,当用户想要更新该NAT地址池时,例如,编辑该NAT地址池,删除该NAT地址池,还可以执行以下步骤:
步骤21:硬件可编程逻辑器件驱动接收到用户的配置信息,其中,该配置信息中包括:更新已经创建的NAT地址池;
步骤22:硬件可编程逻辑器件驱动将更新内容和用于指示更新的操作命令,发送给接口板上的硬件可编程逻辑器件;
步骤23:接口板上的硬件可编程逻辑器件根据该操作命令,更新对应的NAT地址映射表。
这样,步骤S108中从确定出的索引所指示的NAT地址映射表中,为该报文获取NAT后的IP地址的方法包括以下步骤:
步骤S202,从如表2所示的NAT地址映射表中,获取地址指针CurNatAddrIdx的当前值,记为n;
步骤S204,根据该当前值n,从该NAT地址映射表中查找到对应的IP地址NatAddr,作为为该报文获取的NAT后的IP地址;
由于NAT地址映射表中的IP地址NatAddr是顺序排列的,因此,可以根据该当前值n查找到对应的IP地址NatAddr。
步骤S206,将地址指针CurNatAddrIdx的当前值n更新为(n+1)%N,其中,n=1,2,...,N,%为取模运算符。
例如,如果N=100,则,CurNatAddrIdx的取值范围为1~100。
可见,会按照轮循方式将该NAT地址映射表中的各个IP地址分配给各个正向报文。
步骤S110,按照预定算法对该报文的相关信息进行运算,根据得到的运算值,从分布式映射表中查找到对应的业务板索引;之后执行步骤S112;
在步骤S110中,从分布式映射表中查找到对应的业务板索引之后,接口板上的硬件可编程逻辑器件还需要将如表1-2所示的分流表中与该报文对应的为空的业务板索引,更新为从分布式映射表中查找到的业务板索引的值,更新后的分流表如表1-3所示:
表1-3
其中,该预定算法例如可以是哈希(Hash)算法等,本申请对此不做限定。
对报文的相关信息进行Hash计算,可以把不同报文均衡地送到不同的业务板进行NAT。其中,报文的相关信息可以是IP地址、端口标识(ID)、协议号等。
步骤S112,将该报文、步骤S108中获取到的NAT后的IP地址、以及步骤S102中查找到的NAT类型,发送给步骤S110中查找到的业务板索引所指示的业务板;结束本流程;
该业务板上的硬件可编程逻辑器件接收到接口板上的硬件可编程逻辑器件发来的报文、NAT后的IP地址、NAT类型之后,根据该NAT后的IP地址以及NAT类型,对该报文进行地址转换。
具体的,当该NAT类型中包括的需要转换的IP地址类型是源IP地址时,将该报文的源IP地址转换为步骤S108中获取到的NAT后的IP地址,将转换前的五元组信息与转换后的五元组信息之间的对应关系记录到如表3所示的NAT地址转换表中;当该NAT类型中包括的需要转换的IP地址类型是目的IP地址时,将该报文的目的IP地址转换为步骤S108中获取到的NAT后的IP地址,将转换前的五元组信息与转换后的五元组信息之间的对应关系记录到如表3所示的NAT地址转换表中。
表3
步骤S114,按照上述预定算法对该报文的相关信息进行运算,根据得到的运算值,从分布式映射表中查找到对应的业务板索引;之后执行步骤S116;
该步骤S114中的预定算法与步骤S110中的预定算法相同。
在步骤S114中,从分布式映射表中查找到对应的业务板索引之后,接口板上的硬件可编程逻辑器件还需要将如表1-3所示的分流表中与该报文对应的为空的业务板索引,更新为从分布式映射表中查找到的业务板索引的值,更新后的分流表如表1-4所示:
表1-4
步骤S116,将该报文发送给步骤S114中查找到的业务板索引所指示的业务板;结束本流程;
该业务板上的硬件可编程逻辑器件接收到接口板上的硬件可编程逻辑器件发来的该报文之后,会对该报文进行地址转换。
具体的,根据该报文的五元组信息从如表3所示的NAT地址转换表中查找到对应的五元组信息,将该报文的五元组信息转换为查找到的五元组信息。
步骤S118,接口板上的硬件可编程逻辑器件将该报文发送给步骤S102中查找到的业务板索引所指示的业务板;结束本流程。
该业务板上的硬件可编程逻辑器件接收到接口板上的硬件可编程逻辑器件发来的该报文之后,会对该报文进行地址转换。
具体的,根据该报文的五元组信息从如表3所示的NAT地址转换表中查找到对应的五元组信息,将该报文的五元组信息转换为查找到的五元组信息。
本申请实施例的技术方案中,在分布式系统架构中,在接口板和业务板上设置硬件可编程逻辑器件,通过这些硬件可编程逻辑器件共同实现NAT的分布式处理,由于硬件的处理速度比软件快很多,而且,硬件要处理的任务单一,具有更高的处理性能,因此,提高了分布式系统的NAT处理能力,能够满足对NAT处理性能的更高需求。
其中,在上述方法的步骤S110和步骤S114之前,还需要创建如表4所示的分布式映射表:
表4
以预定算法是Hash算法为例,分布式映射表的大小由Hash值的取值范围决定。假设,将Hash值记为HashIdx,HashIdx的取值范围设置为0~65535,则,分布式映射表的大小即为65536bytes(字节)。每一个表项对应于一个Hash值,占用1byte。每一个表项中均包括:Sel(选择)标志位和HandleIdx,其中,首bit为Sel标志位,后面的7个bit为HandleIdx。下面分别对Sel标志位和HandleIdx进行详细介绍。
Sel标志位:用于指示本表项中的HandleIdx是否为空,如果Sel的值置为0,则表示对应的HandleIdx为空,即,还没有为本表项对应的Hash值分配业务板,这时,需要根据业务板获取机制获取到业务板索引,然后把业务板索引添加到本表项中的HandleIdx中。如果Sel的值置为1,则表示对应的HandleIdx不为空,即,已经为本表项对应的Hash值分配了业务板,该业务板的索引就是本表项中的HandleIdx的值。
HandleIdx:是本表项对应的Hash值对应的业务板索引,当业务板的最大数量为128时,HandleIdx的取值范围为0~127。
在实际实施过程中,如表4所示的分布式映射表可以由一个大小为65536的数组来实现,数组中的每一个元素占用一个byte。例如,用一个字符数组来实现该分布式映射表,该字符数组用C语言表示为:
char mapping[65536]
此时,Hash值HashIdx与该字符数组下标一一对应。如:当HashIdx=21时,该HashIdx对应的表项为:mapping[21],该表项占用的1个字节中的首bit为Sel标志位,后面7bit为HandleIdx。
其中,在初始创建好如表4所示的分布式映射表之后,该分布式映射表中的各个表项中的Sel标志位均设置为0,对应的HandleIdx的值均为空,后续,当有需要进行NAT的报文后,接口板上的硬件可编程逻辑器件按照上述方法执行到步骤S108或步骤S112时,若根据得到的运算值(例如Hash值)从如表4所示的分布式映射表中查找到的对应表项中的Sel标志位为0,此时再按照业务板获取机制,为该运算值获取对应的业务板索引,并添加到该表项的HandleIdx中。其中,业务板获取机制的具体过程可以参见步骤S302~步骤S308,这里不再赘述。
由上,在步骤S108和步骤S112中,按照预定算法对该报文的相关信息进行运算的方法可以按照以下几种情况进行:
情况1:当确定出的NAT类型中包括的NAT方向是正向NAT,且该NAT类型中包括的需要转换的IP地址类型是源IP地址时,根据预定算法对该报文的第一相关信息进行运算;
情况2:当确定出的NAT类型中包括的NAT方向是反向NAT,且该NAT类型中包括的需要转换的IP地址类型是目的IP地址时,根据预定算法对该报文的第二相关信息进行运算;
在情况1和情况2中,当第一相关信息中包括:获取的NAT后的IP地址(即为NAT后的源IP地址)、该报文的目的IP地址和目的端口标识时,第二相关信息中包括:该报文的目的IP地址、源IP地址、源端口标识;当第一相关信息中包括:获取的NAT后的IP地址(即为NAT后的源IP地址)、该报文的目的IP地址、目的端口标识和协议号时,第二相关信息中包括:该报文的目的IP地址、源IP地址、源端口标识和协议号。
情况3:当确定出的NAT类型中包括的NAT方向是正向NAT,且该NAT类型中包括的需要转换的IP地址类型是目的IP地址时,根据预定算法对该报文的第三相关信息进行运算;
情况4:当确定出的NAT类型中包括的NAT方向是反向NAT,且该NAT类型中包括的需要转换的IP地址类型是源IP地址时,根据预定算法对该报文的第四相关信息进行运算;
在情况3和情况4中,当第三相关信息中包括:获取的NAT后的IP地址(即为NAT后的目的IP地址)、该报文的源IP地址、源端口标识时,第四相关信息中包括:该报文的源IP地址、目的IP地址、目的端口标识;当第三相关信息中包括:获取的NAT后的IP地址(即为NAT后的目的IP地址)、该报文的源IP地址、源端口标识和协议号时,第四相关信息中包括:该报文的源IP地址、目的IP地址、目的端口标识和协议号。
以该预定算法是Hash算法为例,在上述四种情况中,按照以下公式进行Hash运算:
正向NAT和转换源IP地址:Hash值SouHashIdx=FuncHash(NAT后的源IP地址,目的IP地址,目的端口标识);
反向NAT和转换目的IP地址:Hash值ReSouHashIdx=FuncHash(目的IP地址,源IP地址,源端口标识);
正向NAT和转换目的IP地址:Hash值DestHashIdx=FuncHash(NAT后的目的IP地址,源IP地址,源端口标识);
反向NAT和转换源IP地址:Hash值ReDestHashIdx=FuncHash(源IP地址,目的IP地址,目的端口标识);
或者,
正向NAT和转换源IP地址:Hash值SouHashIdx=FuncHash(NAT后的源IP地址,目的IP地址,目的端口标识,协议号);
反向NAT和转换目的IP地址:Hash值ReSouHashIdx=FuncHash(目的IP地址,源IP地址,源端口标识,协议号);
正向NAT和转换目的IP地址:Hash值DestHashIdx=FuncHash(NAT后的目的IP地址,源IP地址,源端口标识,协议号);
反向NAT和转换源IP地址:Hash值ReDestHashIdx=FuncHash(源IP地址,目的IP地址,目的端口标识,协议号)。
其中,FuncHash(x)表示Hash算法的函数。
由上可见,由于对应于反向NAT和转换目的IP地址的报文(为了描述方便,将这种报文称为第一反向报文)是对应于正向NAT和转换源IP地址的报文(为了描述方便,将这种报文称为第一正向报文)的回应报文,因此,第一反向报文中的源IP地址就是第一正向报文中的目的IP地址,第一反向报文中的目的IP地址就是第一正向报文中的NAT后的源IP地址,第一反向报文中的目的端口就是第一正向报文中的源端口,也就是说,在针对第一正向报文进行Hash运算时所依据的参数:NAT后的源IP地址、目的IP地址,目的端口标识,与在针对第一反向报文进行Hash运算时所依据的参数:目的IP地址、源IP地址、源端口标识,是相同的,故而,得到的Hash值也是相同的,根据Hash值查找到的业务板也是相同的,从而,能够保证一条数据流以及该数据流的回应数据流能够由同一业务板进行NAT处理,保证了来回路径的一致性。
同样,由于对应于反向NAT和转换源IP地址的报文(为了描述方便,将这种报文称为第二反向报文)是对应于正向NAT和转换目的IP地址的报文(为了描述方便,将这种报文称为第二正向报文)的回应报文,因此,第二反向报文中的源IP地址就是第二正向报文中的NAT后的目的IP地址,第二反向报文中的目的IP地址就是第二正向报文中的源IP地址,第二反向报文中的源端口就是第二正向报文中的目的端口,也就是说,在针对第二正向报文进行Hash运算时所依据的参数:NAT后的目的IP地址、源IP地址、源端口标识,与在针对第二反向报文进行Hash运算时所依据的参数:源IP地址、目的IP地址、目的端口标识,是相同的,故而,得到的Hash值也是相同的,从而,能够保证一条数据流以及该数据流的回应数据流能够由同一业务板进行NAT处理,保证了来回路径的一致性。
另外,由于一个报文以及该报文的回应报文中的协议号是不会改变的,因此,在上述四种情况中计算Hash值时,所依据的参数还可以包括协议号,此时,依然可以保证一条数据流以及该数据流的回应数据流能够由同一业务板进行NAT处理,保证来回路径的一致性。
另外,在步骤S108和步骤S112中,根据得到的运算值,从如表4所示的分布式映射表中查找到对应的业务板索引的方法,如图4所示,包括以下步骤:
步骤S302,从如表4所示的分布式映射表中查找到与该运算值(例如,Hash值)对应的表项;之后执行步骤S304;
步骤S304,判断查找到的表项中包括的业务板索引HandleIdx的值是否为空,若不为空,则执行步骤S306,否则,执行步骤S308;
具体的,判断查找到的表项中包括的Sel标志位的值是否为0,若是0,则说明该表项中的业务板索引HandleIdx的值为空,否则,说明该表项中的业务板索引HandleIdx的值不为空。
步骤S306,获取查找到的表项中的业务板索引HandleIdx的值;
步骤S308,获取本地保存的选择变量m,将查找到的表项中的业务板索引HandleIdx的值设置为(m+1)%M,获取该业务板索引的值(m+1)%M,将该选择变量m更新为m+1;其中,M为业务板总数,m=1,2,...,%为取模运算符。
例如,假设M=4,即,分布式系统架构中共有4块业务板,这4块业务板的索引分别为1,2,3,4。通过上述步骤S302~步骤S308,可以采用轮循方式依次选择这四个业务板中的一个业务板。
本申请实施例中,接口板和业务板上的硬件可编程逻辑器件为FPGA,如图5所示,NAT处理方法的具体流程包括如下步骤:
步骤S402,接口板上的FPGA在接收到需要进行NAT的报文之后,根据该报文的源IP地址或目的IP地址,从分流表中查找该报文对应的NAT类型、NAT地址映射表的索引、以及业务板索引;查找结果是查找到的业务板索引的值为空,则执行步骤S404;
步骤S404,判断查找到的NAT类型中包括的NAT方向是否为正向NAT,若是,则执行步骤S406,否则,执行步骤S414;
步骤S406,从查找到的NAT地址映射表的索引所指示的如表2所示的NAT地址映射表中,获取地址指针CurNatAddrIdx的当前值所指向的IP地址NatAddr,作为该报文的NAT后的IP地址;之后执行步骤S408;
步骤S408,判断查找到的NAT类型中包括的需要转换的IP地址类型是否为源IP地址,若是,则执行步骤S410,否则,执行步骤412;
步骤S410,按照以下公式计算Hash值HashIdx;之后执行步骤S420;
HashIdx=SouHashIdx=FuncHash(NAT后的源IP地址,目的IP地址,目的端口标识,协议号)
步骤S412,按照以下公式计算Hash值HashIdx;之后执行步骤S420;
HashIdx=DestHashIdx=FuncHash(NAT后的目的IP地址,源IP地址,源端口标识,协议号)
步骤S414,判断查找到的NAT类型中包括的需要转换的IP地址类型是否为源IP地址,若是,则执行步骤S416,否则,执行步骤418;
步骤S416,按照以下公式计算Hash值HashIdx;之后执行步骤S420;
HashIdx=ReDestHashIdx=FuncHash(源IP地址,目的IP地址,目的端口标识,协议号)
步骤S418,按照以下公式计算Hash值HashIdx;之后执行步骤S420;
HashIdx=ReSouHashIdx=FuncHash(目的IP地址,源IP地址,源端口标识,协议号)
步骤S420,从如表4所示的分布式映射表中,查找到与HashIdx对应的业务板索引HandleIdx的值;之后执行步骤S422;
步骤S422,将该报文和相关内容发送给查找到的HandleIdx的值所指示的业务板;之后执行步骤S424;
其中,如果是正向NAT,则将该报文、获取到的NAT后的IP地址、以及确定出的NAT类型,发送给该业务板;如果是反向NAT,则将该报文发送给该业务板。
步骤S424,业务板上的FPGA接收到该报文和相关内容后,根据该相关信息对该报文进行地址转换。
其中,业务板上的FPGA接收到该报文、获取到的NAT后的IP地址、以及确定出的NAT类型之后,当该NAT类型中包括的需要转换的IP地址类型是源IP地址时,将该报文的源IP地址转换为获取的NAT后的IP地址,将转换前的五元组信息与转换后的五元组信息之间的对应关系记录到如表3所示的NAT地址转换表中;当该NAT类型中包括的需要转换的IP地址类型是目的IP地址时,将该报文的目的IP地址转换为获取的NAT后的IP地址,将转换前的五元组信息与转换后的五元组信息之间的对应关系记录到如表3所示的NAT地址转换表中;
业务板上的FPGA接收到该报文之后,根据该报文的五元组信息从如表3所示的NAT地址转换表中查找到对应的五元组信息,将该报文的五元组信息转换为查找到的五元组信息。
本申请实施例中还提供一种可以应用该方法的装置,该装置应用于接口板的硬件可编程逻辑器件上。
如图6所示,该装置中可以包括以下模块:接收模块10、确定模块20、获取模块30、运算模块40、查找模块50、发送模块60和保存模块70,其中:
接收模块10,用于接收需要进行NAT的报文;
确定模块20,用于在接收模块10接收到需要进行NAT的报文之后,从分流表中查找该报文对应的NAT类型、NAT地址映射表的索引和业务板索引;其中,NAT类型中包括:NAT方向和需要转换的IP地址类型;
获取模块30,用于若确定模块20查找到的业务板索引的值为空,则在确定模块20查找到的NAT类型中包括的NAT方向是正向NAT时,从确定模块20查找到的NAT地址映射表的索引所指示的NAT地址映射表中,为该报文获取NAT后的IP地址;
运算模块40,用于在获取模块30获取到NAT后的IP地址之后,按照预定算法对该报文的相关信息进行运算;
查找模块50,用于根据运算模块40得到的运算值,从分布式映射表中查找到对应的业务板索引;
发送模块60,用于若确定模块20查找到的业务板索引的值为空,则在确定模块20查找到的NAT类型中包括的NAT方向是正向NAT时,将接收模块10接收到的报文、获取模块30获取的NAT后的IP地址、以及确定模块20查找到的NAT类型,发送给查找模块50查找到的业务板索引所指示的业务板,以便该业务板上的硬件可编程逻辑器件根据获取的NAT后的IP地址、以及该NAT类型对该报文进行地址转换;
保存模块70,用于保存分流表、NAT地址映射表和分布式映射表。
其中,NAT地址映射表中包括:地址指针和N个IP地址,该地址指针用于指示当前要选择的IP地址的索引,N为正整数;则,获取模块中包括:地址指针获取单元、IP地址查找单元和指针更新单元,其中:
地址指针获取单元,用于从确定模块确定出的索引所指示的NAT地址映射表中,获取地址指针的当前值n;
IP地址查找单元,用于根据地址指针获取单元获取到的当前值n,从该NAT地址映射表中查找到对应的IP地址,作为为该报文获取的NAT后的IP地址;
指针更新单元,用于将该NAT地址映射表中的地址指针的当前值n更新为(n+1)%N,其中,n=1,2,...,N,%为取模运算符。
另外,运算模块40,还用于若确定模块20查找到的业务板索引的值为空,则在确定模块20查找到的NAT类型中包括的NAT方向是反向NAT时,按照上述预定算法对该报文的相关信息进行运算;
发送模块60,还用于若确定模块20查找到的业务板索引的值为空,则在确定模块20查找到的NAT类型中包括的NAT方向是反向NAT时,将接收模块10接收到的报文发送给查找模块50查找到的业务板索引所指示的业务板,以便该业务板上的硬件可编程逻辑器件对该报文进行地址转换。
其中,运算模块中包括:第一运算单元和第二运算单元,其中:
第一运算单元,用于当确定模块查找到的NAT类型中包括的NAT方向是正向NAT,且该NAT类型中包括的需要转换的IP地址类型是源IP地址时,根据预定算法对该报文的第一相关信息进行运算;
第二运算单元,用于当确定模块查找到的NAT类型中包括的NAT方向是反向NAT,且该NAT类型中包括的需要转换的IP地址类型是目的IP地址时,根据预定算法对该报文的第二相关信息进行运算;
其中,当第一相关信息中包括:获取的NAT后的IP地址,该报文的目的IP地址和目的端口标识时,第二相关信息中包括:该报文的目的IP地址、源IP地址、源端口标识;
当第一相关信息中包括:获取的NAT后的IP地址,该报文的目的IP地址、目的端口标识和协议号时,第二相关信息中包括:该报文的目的IP地址、源IP地址、源端口标识和协议号。
另外,运算模块中还包括:第三运算单元和第四运算单元,其中:
第三运算单元,用于当确定模块查找到的NAT类型中包括的NAT方向是正向NAT,且该NAT类型中包括的需要转换的IP地址类型是目的IP地址时,根据预定算法对该报文的第三相关信息进行运算;
第四运算单元,用于当确定模块查找到的NAT类型中包括的NAT方向是反向NAT,且该NAT类型中包括的需要转换的IP地址类型是源IP地址时,根据预定算法对该报文的第四相关信息进行运算;
其中,当第三相关信息中包括:获取的NAT后的IP地址,该报文的源IP地址、源端口标识时,第四相关信息中包括:该报文的源IP地址、目的IP地址、目的端口标识;
当第三相关信息中包括:获取的NAT后的IP地址,该报文的源IP地址、源端口标识和协议号时,第四相关信息中包括:该报文的源IP地址、目的IP地址、目的端口标识和协议号。
其中,查找模块中包括:表项查找单元、判断单元、索引值获取单元,其中:
表项查找单元,用于从分布式映射表中查找到与该运算值对应的表项,其中,分布式映射表的每一个表项中包括:业务板索引;
判断单元,用于判断表项查找单元查找到的表项中包括的业务板索引的值是否为空;
索引值获取单元,用于若判断单元的判断结果是不为空,则获取表项查找单元查找到的表项中的业务板索引的值;还用于若判断单元的判断结果是为空,则获取本地保存的选择变量m,将表项查找单元查找到的表项中的业务板索引的值设置为(m+1)%M,获取该业务板索引的值(m+1)%M,将该选择变量m更新为m+1;其中,M为业务板总数,m=1,2,...,%为取模运算符。
另外,该装置中还包括:分流表更新模块,其中:分流表更新模块,用于在查找模块从分布式映射表中查找到对应的业务板索引之后,将分流表中与该报文对应的为空的业务板索引,更新为从分布式映射表中查找到的业务板索引的值;发送模块,还用于若确定模块查找到的业务板索引的值不为空,则将接收模块接收到的报文发送给确定模块查找到的业务板索引所指示的业务板,以便该业务板上的硬件可编程逻辑器件对该报文进行地址转换。
另外,该装置中还包括:分流表创建模块,其中:
分流表创建模块,用于预先在保存模块中创建分流表,其中,分流表的每一个表项中包含有:转换前的IP地址、包括正向NAT和需要转换的IP地址类型的NAT类型、转换后的IP地址所在的NAT地址映射表的索引、与业务板索引之间的对应关系,该业务板索引的值为空;
分流表更新模块,用于在获取模块为该报文获取到NAT后的IP地址之后,在分流表中添加一表项,添加的表项中包含有:获取模块获取到的NAT后的IP地址、包括反向NAT和需要转换的IP地址类型的NAT类型、NAT地址映射表的索引、与业务板索引之间的对应关系;其中,当确定模块查找到的NAT类型中包括的需要转换的IP地址类型是源IP地址时,该添加的表项中的需要转换的IP地址类型是目的IP地址,当确定模块查找到的NAT类型中包括的需要转换的IP地址类型是目的IP地址时,该添加的表项中的需要转换的IP地址类型是源IP地址;该添加的表项中的NAT地址映射表的索引和业务板索引的值为空。
另外,业务板上的硬件可编程逻辑器件中包括以下模块:
接收模块,用于接收接口板上的硬件可编程逻辑器件发来的报文、NAT后的IP地址、以及NAT类型;还用于接收接口板上的硬件可编程逻辑器件发来的报文;
地址转换模块,用于在接收模块接收到上述报文、NAT后的IP地址、以及NAT类型之后,当该NAT类型中包括的需要转换的IP地址类型是源IP地址时,将该报文的源IP地址转换为该NAT后的IP地址,将转换前的五元组信息与转换后的五元组信息之间的对应关系记录到NAT地址转换表中;当该NAT类型中包括的需要转换的IP地址类型是目的IP地址时,将该报文的目的IP地址转换为该NAT后的IP地址,将转换前的五元组信息与转换后的五元组信息之间的对应关系记录到NAT地址转换表中;还用于在接收模块接收到上述报文之后,根据该报文的五元组信息从NAT地址转换表中查找到对应的五元组信息,将该报文的五元组信息转换为查找到的五元组信息。
显然,本领域技术人员可以将上述功能模块实现于现有的硬件可编程逻辑器件,如FPGA上。
综上,本申请以上实施例可以达到以下技术效果:
(1)在分布式系统架构中,在接口板和业务板上设置硬件可编程逻辑器件,通过这些硬件可编程逻辑器件共同实现NAT的分布式处理,由于硬件的处理速度比软件快很多,而且,硬件要处理的任务单一,具有更高的处理性能,因此,提高了分布式系统的NAT处理能力,能够满足对NAT处理性能的更高需求。
(2)利用需要进行NAT的报文的IP地址、端口标识、协议号等信息来决定将需要进行NAT的报文分发到分布式系统的哪一块业务板上,可以比较均衡地将不同数据流的报文分发到不同业务板上进行地址转换。
另外,接口板上的硬件可编程逻辑器件统一为所有正向报文(即对应于正向NAT的报文)分配IP地址作为NAT后的IP地址,而且,在针对对应于正向NAT和需要转换源IP地址的第一正向报文计算Hash值时所依据的参数,以及在针对反向NAT和需要转换目的IP地址的第一反向报文(即第一正向报文的回应报文)计算Hash值时所依据的参数,是相同的,因此,得到的Hash值也是相同的,从而,根据Hash值查找到的业务板也是相同的,从而,能够保证一条数据流以及该数据流的回应数据流能够由同一业务板进行NAT处理,保证了来回路径的一致性,增加了分布式系统的NAT处理容量。
同样,在针对对应于正向NAT和需要转换目的IP地址的第二正向报文计算Hash值时所依据的参数,以及在针对反向NAT和需要转换源IP地址的第二反向报文(即第二正向报文的回应报文)计算Hash值时所依据的参数,是相同的,因此,得到的Hash值也是相同的,从而,根据Hash值查找到的业务板也是相同的,从而,能够保证一条数据流以及该数据流的回应数据流能够由同一业务板进行NAT处理,保证了来回路径的一致性,增加了分布式系统的NAT处理容量。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。