CN104506460B - 一种实现napt端口资源分配的方法 - Google Patents

一种实现napt端口资源分配的方法 Download PDF

Info

Publication number
CN104506460B
CN104506460B CN201410836844.XA CN201410836844A CN104506460B CN 104506460 B CN104506460 B CN 104506460B CN 201410836844 A CN201410836844 A CN 201410836844A CN 104506460 B CN104506460 B CN 104506460B
Authority
CN
China
Prior art keywords
port
integer
total
index
data
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.)
Active
Application number
CN201410836844.XA
Other languages
English (en)
Other versions
CN104506460A (zh
Inventor
马海
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Maipu Communication Technology Co Ltd
Original Assignee
Maipu Communication Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Maipu Communication Technology Co Ltd filed Critical Maipu Communication Technology Co Ltd
Priority to CN201410836844.XA priority Critical patent/CN104506460B/zh
Publication of CN104506460A publication Critical patent/CN104506460A/zh
Application granted granted Critical
Publication of CN104506460B publication Critical patent/CN104506460B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Computer And Data Communications (AREA)

Abstract

本发明涉及数据通信领域中的端口分配技术,其公开了一种实现NAPT端口资源分配的方法,解决传统技术中端口资源分配方案存在的分配效率低、命中率低的问题。本发明将需要管理的端口资源中的各个端口与一段连续内存M中的比特位一一关联对应,将M中连续字长个位作为一个整数使用,从而将对M中位的管理转换为对整数集合的位运算;通过逐层压缩的方式,最终将所有需要管理的端口资源映射到一个整数R上,在进行端口分配时,以整数R为基础通过判断其各个位的状态来确定该位对应的下一层整数中是否存在可用端口,然后再通过所述下一层整数中的各个位的状态来确定该位对应的后一层整数中是否存在可用端口,基于此方式最终查找到可用端口。

Description

一种实现NAPT端口资源分配的方法
技术领域
本发明涉及数据通信领域中的端口分配技术,具体涉及一种实现NAPT(网络地址端口转换)端口资源分配的方法。
背景技术
NAT协议是一种将私网的私有IP地址与公网的合法IP地址相互转换的接入技术。基本的网络地址转换(basic NAT)仅对报文的源IP地址进行映射转换,而网络地址端口转换(NAPT)对源IP地址以及源端口号都要进行映射转换。由于IPv4地址即将耗尽,基本的网络地址转换对缓解IPv4地址即将耗尽的问题作用不大,所以网络地址转换(NAT)协议用于将私网地址动态转换为合法的公网地址时,即将IP报文IP头中的IP地址转换为另一个IP地址,多为网络地址端口转换,此时通常会将大量的私网地址转换为一个或几个公网地址,并且每一对正在使用的私网IP地址端口对将与一对公网IP地址端口对形成映射关系,通过这些公网IP地址端口对实现对因特网的访问。
在构建网络地址端口转换的地址转换表时需要先构造私网IP地址端口对与公网IP地址端口对的映射关系。理论上说一个公网IP地址端口对可以通过五元组(源IP、目的IP、源端口、目的端口、协议号)的方式实现与不同的私网IP地址端口对形成映射关系;但在实际的应用中,通常同一公网IP地址端口对只会与一个私网IP地址端口对形成映射关系,因为在某些情况下,可能需要对公网IP地址端口对进行溯源,若同一个公网IP地址端口对与多个私网IP地址端口对形成映射,那么就无法进行溯源。
在构造映射关系时,通过一定的方式计算出使用哪个公网IP地址后,还应当计算出一个16位的端口号,并且这个端口号还没有被其它使用了这个公网IP地址的映射关系使用,一个公网地址有65536个端口,其中部分端口还要保留为特殊应用。目前的端口分配方法,主要有以下两种:
1)NAT服务器为每个公网地址初始化一个端口资源列表,采用遍历端口资源列表的方法来获取可用端口,并将成功获取的端口标记为已占用。
2)NAT服务器采用随机分配一个端口,并通过查询现有地址转换表的方式判断该端口是否已经被使用的方法来获取端口。
传统的端口资源分配方式效率低下,采用遍历资源列表的方法会耗费大量的时间来进行遍历;随机分配的方法会出现一个命中率的问题,存在一定的失败率,可能需要多次尝试才能成功分配一个可用端口,且无法分配所有端口,造成端口资源的浪费。
发明内容
本发明所要解决的技术问题是:提出一种实现NAPT端口资源分配的方法,解决传统技术中端口资源分配方案存在的分配效率低、命中率低的问题。
字长为计算机能够在同一时间处理的二进制数最长位数在本发明实施例中,在本发明实施例中,用n表示一个整数,则[n]表示能被字长整除的且不小于n的最小整数。M(n)表示n除以字长所得余数;D(n)表示n除以字长所得商。
本发明解决其技术问题所采用的技术方案是:
一种实现NAPT端口资源分配的方法,包括:
将需要管理的端口资源中的各个端口与一段连续内存M中的比特位一一关联对应,将M中连续字长个位作为一个整数使用,从而将对M中位的管理转换为对整数集合的位运算;通过逐层压缩的方式,最终将所有需要管理的端口资源映射到一个整数R上,在进行端口分配时,以整数R为基础通过判断其各个位的状态来确定该位对应的下一层整数中是否存在可用端口,然后再通过所述下一层整数中的各个位的状态来确定该位对应的后一层整数中是否存在可用端口,基于此方式最终查找到可用端口。
该方法还包括:记录上次分配端口成功时所使用的整数集合中的某个整数的位置,下一次分配端口时如果该整数中存在可用端口,则直接使用该整数进行端口资源的分配。
具体的,该方法包括以下步骤:
A.创建用于对端口资源进行管理的端口资源管理节点N,在节点N中包括以下各个字段:
起始端口base字段、结束端口end字段、整型指针data字段、索引值index字段、指针数组bi字段、深度值depth字段;
所述整型指针data用于端口资源的管理,其指向内存中的每个比特位与需要管理的端口一一对应;
所述索引值index用于索引data指向内存中的整数;
所述指针数组bi中的每个元素都是一个整型指针,用于逐层压缩data指向的内存的比特信息;
所述深度值depth用于表示二维数组bi的大小;
B.初始化端口资源管理节点N,初始化过程包括:
B1.将index初始化为0,计算可使用端口的总数total和深度值depth值;
B2.根据total和depth值计算出管理端口资源所需的总内存量tm;
B3.申请一块内存量为tm的连续的内存;并初始化data、bi及bi的各元素的指向;
B4.将申请的内存的内容初始化为全1;
B5.分别将bi各元素、data中最后一个整数中需要重新置0的比特位重新置0;
在初始化过程完成后,data中的每一个位表示一个端口的使用情况,1表示对应的端口可用,0表示对应的端口不可用;
C.当需要分配一个可用端口时,先根据index在data中找到整数data[index],如果data[index]为0,则通过bi重新计算index的值;然后计算出整数data[index]的某个1比特位在data[index]中的位置偏移量offset,即可计算出对应的端口号,从而分配该端口。
进一步的,还包括步骤:
D.当有端口被释放时,根据该被释放的端口值定位其对应的比特位以及该比特位对应的整数在data中的索引值index,然后将该比特位置为1,以表示该对应的端口可用,并更新bi中与该比特位有关联的元素内容。
具体的,步骤B1中,计算可使用端口的总数total和深度值depth值的方法为:
首先根据base与end的值计算可使用端口的总数total值:total=end–base+1;
然后根据total值计算出depth,计算方法如下:
1)将depth初始化为0;
2)depth加1,total的值更新为D([total];
3)循环步骤2)直至D([total])为1;
其中,D([total])表示total除以字长所得的商。
具体的,步骤B2中,所述管理端口所需的总内存量tm包括:data指向的内存、bi指向的内存,以及bi各元素指向的内存,根据total以及depth计算出管理端口所需的总内存量tm的方法如下:
1)将tm初始化为depth与BYTES_PTR之积,t初始化为D([total]);
2)如果depth不为0,则重复步骤3直到depth为0位置;
3)t的值更新为D([t]),tm加上t与BYTES_LONG之积,depth减1,其中t与BYTES_LONG之积就是bi[depth-1]指向的内存的字节数;
4)tm的值加上D([total])与BYTES_LONG之积;
其中,BYTES_PTR表示一个指针数据类型的字节数,BYTES_LONG表示一个整数的字节数,t是一个用于辅助计算的整数。
具体的,步骤B5中,分别将bi各元素、data中最后一个整数中需要重新置0的比特位重新置0的方法如下:
1)找到data中的最后一个整数L,如果M(total)不为0,则将L的第M(total)位及第M(total)位之后的所有位置0,将total的值更新为D([total]);
2)找到bi[depth-1]中的最后一个整数L,如果M(total)不为0,则将L的第M(total)位及第M(total)位之后的所有位置0,将total的值更新为D([total]);
3)重复步骤2),直至depth为0;
其中,M(total)表示total除以字长所得的余数。
具体的,步骤B中,在初始化过程完成后,可以通过data中某一位在对应的整数I中的偏移量offset和整数I在data中的索引值index来计算该位对应的端口号,或者通过某一位对应的端口号来计算该位在对应整数I中的偏移量offset和整数I在data中的索引值index:
其中,通过data中某一位在对应的整数I中的偏移量offset和整数I在data中的索引值index来计算该位对应的端口号的方法是:
端口号=index×字长+offset+base;
通过某一位对应的端口号来计算该位在对应整数I中的偏移量offset和整数I在data中的索引值index的方法是:
index=D(端口号–base);
offset=M(端口号–base)。
具体的,步骤C,通过bi重新计算index的值的方法为:
1)index、t、t0、t1的初始值设为0;
2)从bi[t]中的第index个整数中获取一个1比特位,将其保存在t0中,然后将t1的值加上t0,接着将index的值更新为t1,最后t加1;
3)重复步骤2)直至t的值不小于depth为止;
其中,t,t0,t1是用于辅助计算的整数。
具体的,步骤C中,还包括:
在根据data[index]计算出一个可用端口并进行分配后,将data[index]中对应的位标记为0后,并同步更新bi中与该位有关联的各元素中的内容。
本发明的有益效果是:在建立NAT会话进行端口分配时,使用很少的内存就可以提供o(logN)时间复杂度的端口分配,避免了遍历或者多次查找,且提高了端口利用率,只要还有端口可用,就不存在分配失败的情况,提升了设备的业务性能,缓解了NAT会话建立速率、端口利用率与内存占用之间的矛盾,保证私网用户上网体验。
附图说明
图1是端口资源管理节点N的各字段示意图;
图2是二维数组bi的各元素与data之间的关系;
图3是对端口资源管理节点N进行初始化后内存布局示意图;
图4a、4b、4c是32位系统上节点N初始化后bi各元素以及data指向的内存内容示例,其中图4a针对total=34的端口资源情况,图4b针对total=40的端口资源情况,图4c针对total=82的端口资源情况。
具体实施方式
本发明旨在提出一种实现NAPT端口资源分配的方法,解决传统技术中端口资源分配方案存在的分配效率低、命中率低的问题,从而更加合理和高效地对端口资源进行管理,保障NAT服务器在各种情况下均能高效地完成IP地址端口对的映射,充分利用外网端口资源。
本发明方案的主导思想是:(1)将需要管理的端口资源P中的各个端口与一段连续内存M中的比特位一一对应,将端口资源的管理转化为对M中比特位的管理,值为1的比特位表示对应的端口可用,值为0的比特位表示对应的端口不可用;(2)M中连续字长个位可以作为一个整数使用,对M中位的管理转换为对一些整数(这些整数构成一个整数集合S)的位运算,进而将端口资源的管理转化为集合S中的整数的位运算,并且可以通过整数值是否为0来判断该整数的所有位对应的端口中是否还有可用端口;(3)为了更高效地计算出P中的可用端口,即M中值为1的比特位的位置,S中的每一个整数A与另一个整数B的某个位b形成一一映射关系(如果A为0,则b为0;如果A不为0,则b为1),并借助b来管理A,这样整数B就可以同时管理字长个数的整数,而B又可以与另一个整数C的某个比特位c形成一一映射关系(如果B为0,则c为0;如果B不为0,则c为1),通过这样的方式,需要管理的端口资源最终都可以映射到一个整数R上,并以R为根基可以快速找到一个可用端口;(4)为了进一步提高计算效率,可以记录上次分配端口成功时所使用的S中的整数T的位置,下一次分配端口时如果T的值不为0,则可以直接使用T进行端口资源的分配。
下面结合附图及实施例对本发明的方案作更进一步的描述:
在本例中,实现NAPT端口资源分配的方法包括以下步骤:
1)创建用于对端口资源进行管理的端口资源管理节点N,节点N包括:
起始端口(base)、结束端口(end)、一个整型指针(用于端口资源的管理,指向的内存的每个比特位与需要管理的端口一一对应,data)、索引值index,用于索引data执向的内存中的整数,这个整数是上次分配源端口成功时所使用的整数)、一个指针数组(每个元素是一个整型指针,具体实现则使用二维整型指针,用于逐层压缩data指向的内存的比特信息,优化端口资源的管理,bi)、一个深度值(用于表示二维数组bi的大小,depth);端口资源管理节点N的各字段如图1所示。
2)初始化节点N,初始化过程如下:
a)index初始化为0,根据base与end的值计算出可使用端口的总数total,其中base与end都应当大于0且end不应当小于base;计算公式如为:total=end–base+1。
b)根据total计算出depth,即二维数组bi的大小。depth不为0时,二维数组bi的各元素与data之间的关系,一种简单的情况如图2所示。
在图2中,对于data中(data指向的内存中,下同)的每个整数I,都与bi[0]中的某个比特位b一一对应,如果I为0,则b为0;如果I不为0,则b为1;反过来看,如果b为1,则I一定不为0,也就是I中至少有一个比特位为1;如果b为0,则I一定为0,即I的所有位对应的端口中一定没有可用端口。这样,data中的比特位位信息就压缩到了bi[0]中了(更复杂的情况下,如果depth大于1,data中的比特位信息压缩到bi[depth-1]中,而bi[depth-1]中的比特位信息又可以压缩到bi[depth-2]中,如此重复,最终就可以将data中的比特位信息压缩到bi[0]中);
通过bi这个二维数组,从bi[0]开始,可以快速地找到一个data中的整数I,I的所有位对应的端口中一定还有可用端口,接下来只需要找到整数I中某个1比特位,就如同找到了一个可用端口。如果depth为0,则表示不需要对data中的比特信息进行压缩,也就不需要二维数组了。depth的计算方法如下:
1.将depth初始值设为0;
2.如果D([total])不为1,则重复如步骤3直到D([total])为1;
3.depth加1,total的值更新为D([total])。
c)根据total以及depth计算出管理端口所需的总内存量tm,其中包括data指向的内存、bi指向的内存,以及bi各元素指向的内存。计算方法如下,其中BYTES_PTR表示一个指针数据类型的字节数,BYTES_LONG表示一个整数的字节数,t是一个用于辅助计算的整数:
1.将tm初始化为depth与BYTES_PTR之积,t初始化为D([total]);
2.如果depth不为0,则重复步骤3直到depth为0位置;
3.t的值更新为D([t]),tm加上t与BYTES_LONG之积,depth减1,其中t与BYTES_LONG之积就是bi[depth-1]指向的内存的字节数;
4.tm的值加上D([total])与BYTES_LONG之积。
计算出需要的内存总量之后,可以申请一块连续的内存,并初始化data,bi,以及bi各元素的指向初始化之后,内存布局如图3所示。
d)在步骤c申请的内存中,从bi[0]指向的内存处开始,将申请的内存的内容初始化为全1;
e)接下来需要分别将bi各元素、data中最后一个整数中需要重新置0的比特位重新置0,方法如下,其中t是一个用于辅助计算的整数:
1.找到data中的最后一个整数L,如果M(total)不为0,则将L的第M(total)位之后(包括第M(total)位)的所有位置0,将total的值更新为D([total]);
2.如果depth不为0,则进行步骤3,直到depth为0为止;
3.找到bi[depth-1]中的最后一个整数L,如果M(total)不为0,则将L的第M(total)位之后(包括第M(total)位)的所有位置0,将total的值更新为D([total])。
f)此时,data中的每一个位表示一个端口的使用情况,1表示对应的端口可用,0表示对应的端口不可用。假如data中位b在对应的整数I中的偏移量为offset,整数I在data中的索引值为index,那么:
端口号=index×字长+offset+base。
反过来,也可以通过端口号计算对应位的index和offset:
index=D(端口号–base);
offset=M(端口号–base)。
至此,节点N的初始化完成。假如在32位系统上,初始化后节点bi各元素以及data指向的内存内容可能如图4a、4b、4c所示:
即使depth为1,bi[0]也能同时管理字长个数的整数,但如果需要管理的端口资源比较少,没有必要为bi[0]的每个位都映射一个整数,而是采用按需映射的方式,这样可以有效地节约系统内存。如果需要管理的端口数小于字长,那么depth为0,这时候就不需要bi这个二维数组了。
3)当需要分配一个可用端口时,先根据index在data中找到整数data[index],如果data[index]为0,则通过bi重新计算index的值;然后通过一定的算法计算出整数data[index]的某个1比特位在data[index]中的位置偏移量offset,即可计算出对应的端口号。对于如何从一个整数中获取一个1比特位,不在本发明的范畴,此处不进行过多的阐释。
对于需要重新计算index的情况,计算过程如下,其中t,t0,t1是用于辅助计算的整数:
1.index、t、t0、t1的初始值设为0;
2.如果depth不为0,且t的值小于depth,那么进行步骤3直到t的值不小于depth为止;
3.从bi[t]中的第index个整数中获取一个1比特位,将其保存在t0中,然后将t1的值加上t0,接着将index的值更新为t1,最后t加1;
在根据data[index]计算出一个可用端口,并将data[index]中对应的位标记为0后,需要同步更新bi各元素中的内容。也就是如果data[index]的值变为0了,bi[depth-1]中与data[index]对应的为位b需要置0,如果bi[depth–1]中b所在的整数变为0,还需要继续更新bi[depth-2],……,如此下去,直到上层中对应的比特位所在的整数不为0为止。
4)当有端口被释放时,可以根据端口值直接定位对应的比特位b以及该比特位对应的整数I在data中的索引值index,然后将b置为1,表示对应的端口可用了。这时候,需要同步更新bi各元素中的内容,bi[depth-1]中与data[index]对应的为位c需要置1,bi[depth–1]中c所在的整数在bi[depth-2]中对应的比特位置1,如此下去,直到bi[0]中对应的比特位置1为止。
在实际应用中,因为部分端口被作为特殊应用,公网端口不应当使用这些端口,那么需要管理的端口就不是连续的。可以在初始化之后分配端口之前,先将那些不能被分配出去的端口占用,这些端口就永远不会被分配出去,达到管理不连续端口的目的。
当depth不为0时,bi[0]指向的整数为0,表示已经无可用端口,否则还存在可用端口;depth为0时,data[0]为0,则表示已经无可用端口,否则还存在可用端口。

Claims (9)

1.一种实现NAPT端口资源分配的方法,其特征在于,包括:
将需要管理的端口资源中的各个端口与一段连续内存M中的比特位一一关联对应,将M中连续字长个位作为一个整数使用,从而将对M中位的管理转换为对整数集合的位运算;通过逐层压缩的方式,最终将所有需要管理的端口资源映射到一个整数R上,在进行端口分配时,以整数R为基础通过判断其各个位的状态来确定该位对应的下一层整数中是否存在可用端口,然后再通过所述下一层整数中的各个位的状态来确定该位对应的后一层整数中是否存在可用端口,基于此方式最终查找到可用端口;
该方法具体包括以下步骤:
A.创建用于对端口资源进行管理的端口资源管理节点N,在节点N中包括以下各个字段:
起始端口base字段、结束端口end字段、整型指针data字段、索引值index字段、指针数组bi字段、深度值depth字段;
所述整型指针data用于端口资源的管理,其指向内存中的每个比特位与需要管理的端口一一对应;
所述索引值index用于索引data指向内存中的整数;
所述指针数组bi中的每个元素都是一个整型指针,用于逐层压缩data指向的内存的比特信息;
所述深度值depth用于表示二维数组bi的大小;
B.初始化端口资源管理节点N,初始化过程包括:
B1.将index初始化为0,计算可使用端口的总数total和深度值depth值;
B2.根据total和depth值计算出管理端口资源所需的总内存量tm;
B3.申请一块内存量为tm的连续的内存;并初始化data、bi及bi的各元素的指向;
B4.将申请的内存的内容初始化为全1;
B5.分别将bi各元素、data中最后一个整数中需要重新置0的比特位重新置0;
在初始化过程完成后,data中的每一个位表示一个端口的使用情况,1表示对应的端口可用,0表示对应的端口不可用;
C.当需要分配一个可用端口时,先根据index在data中找到整数data[index],如果data[index]为0,则通过bi重新计算index的值;然后计算出整数data[index]的某个1比特位在data[index]中的位置偏移量offset,即可计算出对应的端口号,从而分配该端口。
2.如权利要求1所述的一种实现NAPT端口资源分配的方法,其特征在于,还包括:记录上次分配端口成功时所使用的整数集合中的某个整数的位置,下一次分配端口时如果该整数中存在可用端口,则直接使用该整数进行端口资源的分配。
3.如权利要求1所述的一种实现NAPT端口资源分配的方法,其特征在于,还包括步骤:
D.当有端口被释放时,根据该被释放的端口值定位其对应的比特位以及该比特位对应的整数在data中的索引值index,然后将该比特位置为1,以表示该对应的端口可用,并更新bi中与该比特位有关联的元素内容。
4.如权利要求1所述的一种实现NAPT端口资源分配的方法,其特征在于,步骤B1中,计算可使用端口的总数total和深度值depth值的方法为:
首先根据base与end的值计算可使用端口的总数total值:total=end–base+1;
然后根据total值计算出depth,计算方法如下:
将depth初始化为0;
depth加1,total的值更新为D([total]),循环执行本步骤;直至D([total])为1;
其中,D([total])表示[total]除以字长所得的商。
5.如权利要求4所述的一种实现NAPT端口资源分配的方法,其特征在于,步骤B2中,所述管理端口所需的总内存量tm包括:data指向的内存、bi指向的内存,以及bi各元素指向的内存,根据total以及depth计算出管理端口所需的总内存量tm的方法如下:
1)将tm初始化为depth与BYTES_PTR之积,t初始化为D([total]);
2)如果depth不为0,则重复步骤3)直到depth为0位置;
3)t的值更新为D([t]),tm加上t与BYTES_LONG之积,depth减1,其中t与BYTES_LONG之积就是bi[depth-1]指向的内存的字节数;
4)tm的值加上D([total])与BYTES_LONG之积;
其中,BYTES_PTR表示一个指针数据类型的字节数,BYTES_LONG表示一个整数的字节数,t是一个用于辅助计算的整数。
6.如权利要求4所述的一种实现NAPT端口资源分配的方法,其特征在于,步骤B5中,分别将bi各元素、data中最后一个整数中需要重新置0的比特位重新置0的方法如下:
找到data中的最后一个整数L,如果M(total)不为0,则将L的第M(total)位及第M(total)位之后的所有位置0,将total的值更新为D([total]);
找到bi[depth-1]中的最后一个整数L,如果M(total)不为0,则将L的第M(total)位及第M(total)位之后的所有位置0,将total的值更新为D([total]),循环执行本步骤,直至depth为0;
其中,M(total)表示total除以字长所得的余数。
7.如权利要求6所述的一种实现NAPT端口资源分配的方法,其特征在于,步骤B中,在初始化过程完成后,可以通过data中某一位在对应的整数I中的偏移量offset和整数I在data中的索引值index来计算该位对应的端口号,或者通过某一位对应的端口号来计算该位在对应整数I中的偏移量offset和整数I在data中的索引值index:
其中,通过data中某一位在对应的整数I中的偏移量offset和整数I在data中的索引值index来计算该位对应的端口号的方法是:
端口号=index×字长+offset+base;
通过某一位对应的端口号来计算该位在对应整数I中的偏移量offset和整数I在data中的索引值index的方法是:
index=D(端口号–base);
offset=M(端口号–base)。
8.如权利要求1所述的一种实现NAPT端口资源分配的方法,其特征在于,步骤C,通过bi重新计算index的值的方法为:
index、t、t0、t1的初始值设为0;
从bi[t]中的第index个整数中获取一个1比特位,将其保存在t0中,然后将t1的值加上t0,接着将index的值更新为t1,最后t加1,循环执行本步骤,直至t的值不小于depth为止;
其中,t,t0,t1是用于辅助计算的整数。
9.如权利要求8所述的一种实现NAPT端口资源分配的方法,其特征在于,步骤C中,还包括:
在根据data[index]计算出一个可用端口并进行分配后,将data[index]中对应的位标记为0后,并同步更新bi中与该位有关联的各元素中的内容。
CN201410836844.XA 2014-12-29 2014-12-29 一种实现napt端口资源分配的方法 Active CN104506460B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410836844.XA CN104506460B (zh) 2014-12-29 2014-12-29 一种实现napt端口资源分配的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410836844.XA CN104506460B (zh) 2014-12-29 2014-12-29 一种实现napt端口资源分配的方法

Publications (2)

Publication Number Publication Date
CN104506460A CN104506460A (zh) 2015-04-08
CN104506460B true CN104506460B (zh) 2018-01-26

Family

ID=52948175

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410836844.XA Active CN104506460B (zh) 2014-12-29 2014-12-29 一种实现napt端口资源分配的方法

Country Status (1)

Country Link
CN (1) CN104506460B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106534394B (zh) * 2015-09-15 2020-01-07 瞻博网络公司 用于管理端口的设备、系统和方法
US10305815B2 (en) * 2016-04-29 2019-05-28 Huawei Technologies Co., Ltd. System and method for distributed resource management
CN106254577B (zh) * 2016-09-18 2019-04-19 东软集团股份有限公司 端口分配的方法及装置
CN108600282A (zh) * 2017-11-30 2018-09-28 深圳市牛鼎丰科技有限公司 微服务发布方法、装置、存储介质和计算机设备
CN111447300A (zh) * 2020-03-26 2020-07-24 深信服科技股份有限公司 一种目标端口确定方法、装置、设备及可读存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6480501B1 (en) * 1997-12-30 2002-11-12 International Business Machines Corporation Process for transporting a cell through a switching structure base on a single stage switch
CN101247421A (zh) * 2008-03-28 2008-08-20 杭州华三通信技术有限公司 分布式架构下nat地址池的自适应分配方法和系统
CN101335770A (zh) * 2008-08-06 2008-12-31 杭州华三通信技术有限公司 一种网络地址端口转换方法和装置
CN103685600A (zh) * 2013-12-11 2014-03-26 河海大学 基于rb树和位图混合的网络地址端口转换池管理方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6480501B1 (en) * 1997-12-30 2002-11-12 International Business Machines Corporation Process for transporting a cell through a switching structure base on a single stage switch
CN101247421A (zh) * 2008-03-28 2008-08-20 杭州华三通信技术有限公司 分布式架构下nat地址池的自适应分配方法和系统
CN101335770A (zh) * 2008-08-06 2008-12-31 杭州华三通信技术有限公司 一种网络地址端口转换方法和装置
CN103685600A (zh) * 2013-12-11 2014-03-26 河海大学 基于rb树和位图混合的网络地址端口转换池管理方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
SIP穿越NAT方案的研究与实现;王旭龙;<中国优秀硕士学位论文全文数据库信息科技辑>;20141115(第11期);正文第4章第4.2.3节 *

Also Published As

Publication number Publication date
CN104506460A (zh) 2015-04-08

Similar Documents

Publication Publication Date Title
CN104506460B (zh) 一种实现napt端口资源分配的方法
CN106375176B (zh) 一种物理机接入云平台的方法
CN103797774B (zh) 一种网络地址转换设备及方法
CN102055817B (zh) 同源地址束汇聚方法及同源汇聚网络路由系统
CN104468412B (zh) 基于rss的网络会话数据包分发方法及系统
AU2013375618B2 (en) Load sharing method and apparatus
CN107249046A (zh) 一种基于区块链的分布式云存储系统构建方法
CN107317887B (zh) 一种负载均衡方法、装置和系统
CN105556916B (zh) 网络流的信息统计方法和装置
CN102594942B (zh) 实现网络地址转换的方法及系统
CN107171792A (zh) 一种虚拟密钥池及量子密钥资源的虚拟化方法
CN101610295B (zh) 使用非特定IPv6地址的无状态IPv4/IPv6分组转换方法
CN105635332A (zh) 一种多虚拟机共用单外网ip的方法
CN109634966A (zh) 基于哈希算法的千万级网络会话表管理方法、系统、介质和设备
CN106850547A (zh) 一种基于http协议的数据还原方法及系统
CN107835259A (zh) 一种基于IPv6解决信息孤岛问题的互联互通装置
CN103024089B (zh) 网络地址转换方法和设备
CN109447820A (zh) 数据处理方法、装置、计算机设备及存储介质
CN106506719A (zh) 命名数据网络中分发策略的配置方法及配置系统
CN109146677A (zh) 并行构建区块链视图的方法、计算机系统和可读存储介质
CN103281211A (zh) 大规模网络节点分组管理系统及管理方法
CN116982307A (zh) 用于在群聚基础设施中强制实施功能过滤规则的方法和计算设备
CN106789727A (zh) 报文分类方法和装置
CN104486453A (zh) 一种老化时间的调整方法及装置
CN104904187A (zh) 处理网络中的协议地址的方法和处理设备

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant