CN116436929B - 利用服务器组装udp报文的辅助p2p打洞方法和服务器 - Google Patents
利用服务器组装udp报文的辅助p2p打洞方法和服务器 Download PDFInfo
- Publication number
- CN116436929B CN116436929B CN202310703007.9A CN202310703007A CN116436929B CN 116436929 B CN116436929 B CN 116436929B CN 202310703007 A CN202310703007 A CN 202310703007A CN 116436929 B CN116436929 B CN 116436929B
- Authority
- CN
- China
- Prior art keywords
- server
- ports
- port
- nat
- nat gateway
- 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
Links
- 238000004080 punching Methods 0.000 title claims abstract description 43
- 238000000034 method Methods 0.000 title claims abstract description 35
- 238000005516 engineering process Methods 0.000 claims abstract description 11
- 238000001514 detection method Methods 0.000 claims description 22
- 230000004044 response Effects 0.000 claims description 16
- 230000005641 tunneling Effects 0.000 claims description 15
- 230000005540 biological transmission Effects 0.000 abstract description 4
- 230000008901 benefit Effects 0.000 description 12
- 241001602876 Nata Species 0.000 description 6
- 230000003993 interaction Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 230000007613 environmental effect Effects 0.000 description 4
- 101100515934 Bacillus subtilis (strain 168) natB gene Proteins 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000002349 favourable effect Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000007792 addition Methods 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000006798 recombination Effects 0.000 description 1
- 238000005215 recombination Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/104—Peer-to-peer [P2P] networks
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L61/00—Network arrangements, protocols or services for addressing or naming
- H04L61/09—Mapping addresses
- H04L61/25—Mapping addresses of the same type
- H04L61/2503—Translation of Internet protocol [IP] addresses
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/14—Session management
- H04L67/141—Setup of application sessions
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/164—Adaptation or special uses of UDP protocol
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D30/00—Reducing energy consumption in communication networks
- Y02D30/50—Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请涉及网络传输技术领域,且更为具体地,涉及一种利用服务器组装UDP报文的辅助P2P打洞方法和服务器,方法包括:通过服务器获取需要进行P2P连接的第一设备的源地址和目标地址;基于原始套接字技术组装UDP报文,在UDP报文中记录第二设备的源地址和目标地址,其中,第二设备的源地址为第二设备对应的第二nat网关的地址,以提示UDP报文来源于第二nat网关,第二设备的目标地址为第一nat网关的地址;探测第一nat网关的类型,从第一nat网关上选择n个端口;通过服务器将UDP报文封装为n个包并发送至第一nat网关,在第一nat网关通过n个端口中的第一端口将UDP报文转发至第一设备时完成打洞。相比于现有技术方案,本发明能够显著提升打洞效率及成功率。
Description
技术领域
本发明涉及网络传输技术领域,且更为具体地,涉及一种利用服务器组装UDP报文的辅助P2P打洞方法和服务器。
背景技术
随着ipv4地址池耗尽,接入互联网的设备越来越多,为了让设备彼此间高效通信,P2P(peer to peer,端到端的直连技术)打洞技术应用越发频繁。P2P打洞技术是通过中间服务器的协助在通信双方的nat(Network Address Translation,网络地址转换)网关上建立相关的映射关系,使得双方发送的报文能够直接穿透对方的nat网关,实现P2P直连。而如何提高打洞成功率,提升打洞速度,也成为了需要面对的问题。
现有技术中,打洞思路基本都是先探测nat类型,然后根据nat类型决定是否可以打洞及预测nat洞(即端口)的位置,即打洞的本质就是寻找nat上端口的位置,从而让包直接通过端口穿越nat到达对端。现有技术的缺点在于,两端设备(peer)参与打洞的过程中,受限于设备性能及网络环境限制,导致设备同时发包的数量受限,为确保打洞效率,只能缩小发包的端口范围,若恰好洞的位置超出预测范围,则打洞失败。
发明内容
为了解决上述技术问题,提出了本申请,以提供一种能够克服设备性能及网络环境限制、扩大打洞探测端口范围的一种利用服务器组装UDP报文的辅助P2P打洞方法和服务器。
第一方面,本发明提供一种利用服务器组装UDP报文的辅助P2P打洞方法,包括:通过服务器获取需要进行P2P连接的第一设备的源地址和目标地址,其中,所述源地址为所述第一设备对应的第一nat网关的地址,所述目标地址为所述第一设备需要连接的第二设备对应的第二nat网关的地址;基于原始套接字技术组装UDP报文,在所述UDP报文中记录所述第二设备的源地址和目标地址,其中,所述第二设备的源地址为所述第二设备对应的第二nat网关的地址,以提示所述UDP报文来源于所述第二nat网关,所述第二设备的目标地址为所述第一nat网关的地址;探测所述第一nat网关的类型,根据探测结果从所述第一nat网关上选择n个端口;按照已选择的所述n个端口,通过所述服务器将所述UDP报文封装为n个包并发送至所述第一nat网关,在所述第一nat网关通过所述n个端口中的第一端口将所述UDP报文转发至所述第一设备时完成打洞,并将所述第一端口作为洞口。
优选地,前述的利用服务器组装UDP报文的辅助P2P打洞方法,在“通过服务器获取需要进行P2P连接的第一设备的源地址和目标地址”之前,还包括:获取服务器集群中的多个服务器的CPU、内存及网络资源总量及占用量,对所述多个服务器进行评分:
其中,为所述多个服务器中第j个服务器的得分,/>为所述第j个服务器的CPU总量,/>为所述第j个服务器的CPU占用量,/>为所述多个服务器的CPU总量中的最大值,/>为所述第j个服务器的内存总量,/>为所述第j个服务器的内存占用量,为所述多个服务器的内存总量中的最大值,/>为所述第j个服务器的网络资源总量,/>为所述第j个服务器的网络资源占用量,/>为所述多个服务器的网络资源中的最大值,/>、/>、/>为CPU、内存及网络资源对应的权重系数。
优选地,前述的利用服务器组装UDP报文的辅助P2P打洞方法,“探测所述第一nat网关的类型,根据探测结果从所述第一nat网关上选择n个端口”的步骤包括:查找与所述第一nat网关类型相同的x个nat网关;获取所述x个nat网关的历史开放端口记录;统计所述历史开放端口记录中相同类型的端口的开放概率:
其中,为所述历史开放端口记录中所有类型端口中的第k个类型端口的开放概率,/>为第k个类型端口的开放次数,/>为第k个类型端口在所述x个nat网关中每个网关的开放时间,/>为所述x个nat网关中每个网关的工作时间;根据开放概率的高低顺序,从所述历史开放端口记录中所有类型端口中取前n个类型的端口,以及对照所述前n个类型的端口从所述第一nat网关上选择所述n个端口。
优选地,前述的利用服务器组装UDP报文的辅助P2P打洞方法,“通过所述服务器将所述UDP报文封装为n个包并发送至所述第一nat网关”的步骤包括:按照所述n个端口对应的开放概率高低,将所述n个包依次通过所述n个端口发送至所述第一nat网关。
优选地,前述的利用服务器组装UDP报文的辅助P2P打洞方法,“根据探测结果从所述第一nat网关上选择n个端口”的步骤,还包括:检测所述第一设备的历史业务;从所述第一nat网关中选择用于传输所述历史业务的数据的m个端口;在所述n个端口中加入所述m个端口后去重,以对所述n个端口更新。
优选地,前述的利用服务器组装UDP报文的辅助P2P打洞方法,“将所述第一端口作为洞口”的步骤包括:在所述第一nat网关还通过所述n个端口中的第二端口将所述UDP报文转发至所述第一设备时,比较所述第一端口的响应速率和所述第二端口的响应速率;在所述第一端口的响应速率高于所述第二端口的响应速率时,将所述第一端口作为洞口。
第一方面,本发明提供一种服务器,所述服务器用于利用原始套接字组装UDP报文辅助进行P2P打洞,包括:地址获取模块,获取需要进行P2P连接的第一设备的源地址和目标地址,其中,所述源地址为所述第一设备对应的第一nat网关的地址,所述目标地址为所述第一设备需要连接的第二设备对应的第二nat网关的地址;报文组装模块,基于原始套接字技术组装UDP报文,在所述UDP报文中记录所述第二设备的源地址和目标地址,其中,所述第二设备的源地址为所述第二设备对应的第二nat网关的地址,以提示所述UDP报文来源于所述第二nat网关,所述第二设备的目标地址为所述第一nat网关的地址;网关探测模块,探测所述第一nat网关的类型,根据探测结果从所述第一nat网关上选择n个端口;报文发送模块,按照已选择的所述n个端口,通过所述服务器将所述UDP报文封装为n个包并发送至所述第一nat网关,在所述第一nat网关通过所述n个端口中的第一端口将所述UDP报文转发至所述第一设备时完成打洞,并将所述第一端口作为洞口。
优选地,前述的服务器,还包括:服务器评分模块,获取服务器集群中的多个服务器的CPU、内存及网络资源总量及占用量,对所述多个服务器进行评分:
其中,为所述多个服务器中第j个服务器的得分,/>为所述第j个服务器的CPU总量,/>为所述第j个服务器的CPU占用量,/>为所述多个服务器的CPU总量中的最大值,/>为所述第j个服务器的内存总量,/>为所述第j个服务器的内存占用量,为所述多个服务器的内存总量中的最大值,/>为所述第j个服务器的网络资源总量,/>为所述第j个服务器的网络资源占用量,/>为所述多个服务器的网络资源中的最大值,/>、/>、/>为CPU、内存及网络资源对应的权重系数。
优选地,前述的服务器,所述网关探测模块包括:网关查找模块,查找与所述第一nat网关类型相同的x个nat网关;记录获取模块,获取所述x个nat网关的历史开放端口记录;概率统计模块,统计所述历史开放端口记录中相同类型的端口的开放概率:
其中,为所述历史开放端口记录中所有类型端口中的第k个类型端口的开放概率,/>为第k个类型端口的开放次数,/>为第k个类型端口在所述x个nat网关中每个网关的开放时间,/>为所述x个nat网关中每个网关的工作时间;端口选择模块,根据开放概率的高低顺序,从所述历史开放端口记录中所有类型端口中取前n个类型的端口,以及对照所述前n个类型的端口从所述第一nat网关上选择所述n个端口。
优选地,前述的服务器,所述报文发送模块按照所述n个端口对应的开放概率高低,将所述n个包依次通过所述n个端口发送至所述第一nat网关。
本发明上述一个或多个技术方案,至少具有如下一种或多种有益效果:
本发明的技术方案,与现有技术方案不同,并没有仅使用两端设备进行P2P打洞,而是让服务器参与其中,相比于两端设备,服务器在性能及网络环境方面更具有优势,两端设备在发送大规模的包时效率较低、耗时较长,而服务器发送同等规模的包效率更高、耗时更短,因此服务器相对于两端设备而言更适合执行P2P打洞任务,尤其是通过发包探测nat洞口位置的过程,本发明中服务器在发包时,在包中报文注明来源地址为设备的地址,即服务器“模拟”设备进行发包,从而确保对方设备在接收到包,即探测到洞口时,能够记录对方设备的地址以与对方设备进行数据交互,从而完成P2P打洞。
附图说明
通过结合附图对本申请实施例进行更详细的描述,本申请的上述以及其他目的、特征和优势将变得更加明显。附图用来提供对本申请实施例的进一步理解,并且构成说明书的一部分,与本申请实施例一起用于解释本申请,并不构成对本申请的限制。在附图中,相同的参考标号通常代表相同部件或步骤。
图1为根据本申请实施例的一种利用服务器组装UDP报文的辅助P2P打洞方法的流程图;
图2为根据本申请实施例的一种利用服务器组装UDP报文的辅助P2P打洞方法的工作原理图;
图3为根据本申请实施例的一种利用服务器组装UDP报文的辅助P2P打洞方法的局部流程图;
图4为根据本申请实施例的一种利用服务器组装UDP报文的辅助P2P打洞方法的另一局部流程图;
图5为根据本申请实施例的一种利用服务器组装UDP报文的辅助P2P打洞方法的流程图;
图6为根据本申请实施例的一种服务器的框图;
图7为根据本申请实施例的另一种服务器的框图。
具体实施方式
下面参照附图来描述本发明的一些实施方式。本领域技术人员应当理解的是,这些实施方式仅仅用于解释本发明的技术原理,并非旨在限制本发明的保护范围。
如图1所示,本发明的一个实施例中提供一种利用服务器组装UDP报文的辅助P2P打洞方法,包括:
步骤S110,通过服务器获取需要进行P2P连接的第一设备的源地址和目标地址,其中,源地址为第一设备对应的第一nat网关的地址,目标地址为第一设备需要连接的第二设备对应的第二nat网关的地址。
本实施例中,对于第一设备、第二设备的类型不进行限制,例如,可以是计算机、手机等;本实施例中,对第一nat网关、第二nat网关的类型不进行限制,现有技术中的nat网关型号都适用。本实施例中,对服务器的数量不限制,可以是单个服务器也是多个服务器,也可以是云服务器集群中划分出的多个虚拟服务器。
步骤S120,基于原始套接字技术组装UDP(User Datagram Protoco,用户数据报协议)报文,在UDP报文中记录第二设备的源地址和目标地址,其中,第二设备的源地址为第二设备对应的第二nat网关的地址,以提示UDP报文来源于第二nat网关,第二设备的目标地址为第一nat网关的地址。
本实施例中,原始套接字是一种允许用户自己组包的技术。本实施例中,与现有技术不同,UDP报文还可以由服务器组装并发送,而非仅由两端设备完成,服务器将UDP报文中的源地址设置为第二设备对应的第二nat网关的地址,表示该UDP报文从第二设备发出,即服务器实现对第二设备的“模拟”。
步骤S130,探测第一nat网关的类型,根据探测结果从第一nat网关上选择n个端口。
本实施例中,根据第一nat网关的类型,可以预测第一nat网关上开放的端口,即洞口的位置。
步骤S140,按照已选择的n个端口,通过服务器将UDP报文封装为n个包并发送至第一nat网关,在第一nat网关通过n个端口中的第一端口将UDP报文转发至第一设备时完成打洞,并将第一端口作为洞口。
根据本实施例的技术方案,由服务器的性能及网络环境都优于第二设备,所以服务器发送完n个包的效率要高于第二设备,可见相对于现有技术方案,本实施例的P2P打洞方案在效率上有了显著提高。例如,如果需要发送400个包才能探测到洞的位置,假定单台设备1秒可发送20个包,则需要400/20=20秒才能完成,如果有4台服务器参与进来,假设每台服务器相当于一台终端,则仅需400/20/4=5秒即可完成。
进一步地,在第一nat网关还通过n个端口中的第二端口将UDP报文转发至第一设备时,比较第一端口的响应速率和第二端口的响应速率;在第一端口的响应速率高于第二端口的响应速率时,将第一端口作为洞口。
本实施例中,在同时发现两个可作为洞口的端口时,比较两个端口的响应速率,将响应速率较高的端口作为洞口,有利于保障设备间的直连数据交互质量。
根据本实施例技术方案的一个具体实现方式如图2所示,peerA、peerB之间需要直连交互时,将自身数据(连接目标地址、源地址等信息)同步到服务器。服务器模拟peerB并组包,发送到natA。根据探测到的natA的类型,假定natA洞(开放端口)范围为[1100,1120],则服务器需要至少发送20个包(每个端口都要发送1个包),peerA在收到包后,就可以确认nat洞的位置了。同样地,服务器也可以模拟peerA发包,找出natB的洞的位置。实际生产环境中,考虑到设备发包效率及环境限制,往往都会尽量缩小发包端口范围,从而造成部分情况下,打洞失败。而本实施例充分发挥服务器的优势,扩大发包的端口范围,提升打洞成功率,并在一定程度上提升打洞效率。
根据本发明的技术方案,没有仅使用两端设备进行P2P打洞,而是让服务器参与其中,相比于两端设备,服务器在性能及网络环境方面更具有优势,两端设备在发送大规模的包时效率较低、耗时较长,而服务器发送同等规模的包效率更高、耗时更短,因此服务器相对于两端设备而言更适合执行P2P打洞任务,尤其是通过发包探测nat洞口位置的过程,本实施例中服务器在发包时,在包中报文注明来源地址为设备的地址,即服务器“模拟”设备进行发包,从而确保对方设备在接收到包,即探测到洞口时,能够记录对方设备的地址以与对方设备进行数据交互,从而完成P2P打洞。
如图3所示,本发明的另一个实施例中提供一种利用服务器组装UDP报文的辅助P2P打洞方法,相对于前述的实施例,在步骤S110之前,还包括:
步骤S310,获取服务器集群中的多个服务器的CPU、内存及网络资源总量及占用量,对多个服务器进行评分:
其中,为多个服务器中第j个服务器的得分,/>为第j个服务器的CPU总量,/>为第j个服务器的CPU占用量,/>为多个服务器的CPU总量中的最大值,/>为第j个服务器的内存总量,/>为第j个服务器的内存占用量,/>为多个服务器的内存总量中的最大值,/>为第j个服务器的网络资源总量,/>为第j个服务器的网络资源占用量,/>为多个服务器的网络资源中的最大值,/>、/>、/>为CPU、内存及网络资源对应的权重系数。
本实施例中,服务器的资源主要包括CPU、内存和网络资源,基于上述公式,将服务器的CPU、内存和网络资源转换为对服务器进行评价的评分,使得服务器间的优劣差距得以准确量化。
步骤S320,按照多个服务器的得分,从多个服务器中选择一个服务器,用于获取第一设备的源地址和目标地址。
根据本实施例的技术方案,根据服务器的CPU、内存和网络资源对服务器进行评分,以从服务器集群中选出适于执行P2P打洞任务的服务器。
如图4所示,本发明的另一个实施例中提供一种利用服务器组装UDP报文的辅助P2P打洞方法,相对于前述的实施例,步骤S130包括:
步骤S410,查找与第一nat网关类型相同的x个nat网关。
步骤S420,获取x个nat网关的历史开放端口记录。
本实施例中,x个nat网关的历史开放端口记录中记录了不同类型端口的历史开放情况,对于预测同类型第一nat网关上的开放端口具有重要的参考价值。
步骤S430,统计历史开放端口记录中相同类型的端口的开放概率:
其中,为历史开放端口记录中所有类型端口中的第k个类型端口的开放概率,/>为第k个类型端口的开放次数,/>为第k个类型端口在x个nat网关中每个网关的开放时间,/>为x个nat网关中每个网关的工作时间。
本实施例中,基于上述公式,依据历史记录中端口的开放次数和开放时间,准确地对不同类型端口的开放概率进行评估量化。
步骤S440,根据开放概率的高低顺序,从历史开放端口记录中所有类型端口中取前n个类型的端口,以及对照前n个类型的端口从第一nat网关上选择n个端口。
此时步骤S140包括:按照n个端口对应的开放概率高低,将n个包依次通过n个端口发送至第一nat网关。
本实施例中,按照n个端口开放概率的高低顺序发包,有利于优先将包发送到作为洞口的开放端口,即提早完成打洞。
根据本实施例的技术方案,以x个nat网关的历史开放端口记录中的端口开放次数和时间为依据,准确地分析了第一nat网关中不同端口开放的可能性,从而精准预测第一nat网关上的洞口范围,以提升发送报文探测洞口的效率。
如图5所示,本发明的另一个实施例中提供一种利用服务器组装UDP报文的辅助P2P打洞方法,相对于前述的实施例,步骤S130还包括:
步骤S510,检测第一设备的历史业务。
步骤S520,从第一nat网关中选择用于传输历史业务的数据的m个端口。
步骤S530,在n个端口中加入m个端口后去重,以对n个端口更新。
本实施例中,取n个端口与m个端口的最大集合,利用服务器的性能和网络环境优势进一步扩大了洞口探测范围。
根据本实施例的技术方案,根据第一设备的历史业务,预测第一设备常用的端口范围,同时将其纳入洞口探测范围,以进一步提升打洞成功率。
如图6所示,本发明的一个实施例中提供一种服务器,用于利用原始套接字组装UDP报文辅助进行P2P打洞,包括:
地址获取模块610,获取需要进行P2P连接的第一设备的源地址和目标地址,其中,源地址为第一设备对应的第一nat网关的地址,目标地址为第一设备需要连接的第二设备对应的第二nat网关的地址。
本实施例中,对于第一设备、第二设备的类型不进行限制,例如,可以是计算机、手机等;本实施例中,对第一nat网关、第二nat网关的类型不进行限制,现有技术中的nat网关型号都适用。本实施例中,对服务器的数量不限制,可以是单个服务器也是多个服务器,也可以是云服务器集群中划分出的多个虚拟服务器。
报文组装模块620,基于原始套接字技术组装UDP(User Datagram Protoco,用户数据报协议)报文,在UDP报文中记录第二设备的源地址和目标地址,其中,第二设备的源地址为第二设备对应的第二nat网关的地址,以提示UDP报文来源于第二nat网关,第二设备的目标地址为第一nat网关的地址。
本实施例中,原始套接字是一种允许用户自己组包的技术。本实施例中,与现有技术不同,UDP报文还可以由服务器组装并发送,而非仅由两端设备完成,服务器将UDP报文中的源地址设置为第二设备对应的第二nat网关的地址,表示该UDP报文从第二设备发出,即服务器实现对第二设备的“模拟”。
网关探测模块630,探测第一nat网关的类型,根据探测结果从第一nat网关上选择n个端口。
本实施例中,根据第一nat网关的类型,可以预测第一nat网关上开放的端口,即洞口的位置。
报文发送模块640,按照已选择的n个端口,通过服务器将UDP报文封装为n个包并发送至第一nat网关,在第一nat网关通过n个端口中的第一端口将UDP报文转发至第一设备时完成打洞,并将第一端口作为洞口。
根据本实施例的技术方案,由服务器的性能及网络环境都优于第二设备,所以服务器发送完n个包的效率要高于第二设备,可见相对于现有技术方案,本实施例的P2P打洞方案在效率上有了显著提高。例如,如果需要发送400个包才能探测到洞的位置,假定单台设备1秒可发送20个包,则需要400/20=20秒才能完成,如果有4台服务器参与进来,假设每台服务器相当于一台终端,则仅需400/20/4=5秒即可完成。
进一步地,在第一nat网关还通过n个端口中的第二端口将UDP报文转发至第一设备时,比较第一端口的响应速率和第二端口的响应速率;在第一端口的响应速率高于第二端口的响应速率时,将第一端口作为洞口。
本实施例中,在同时发现两个可作为洞口的端口时,比较两个端口的响应速率,将响应速率较高的端口作为洞口,有利于保障设备间的直连数据交互质量。
根据本实施例技术方案的一个具体实现方式如图2所示,peerA、peerB之间需要直连交互时,将自身数据(连接目标地址、源地址等信息)同步到服务器。服务器模拟peerB并组包,发送到natA。根据探测到的natA的类型,假定natA洞(开放端口)范围为[1100,1120],则服务器需要至少发送20个包(每个端口都要发送1个包),peerA在收到包后,就可以确认nat洞的位置了。同样地,服务器也可以模拟peerA发包,找出natB的洞的位置。实际生产环境中,考虑到设备发包效率及环境限制,往往都会尽量缩小发包端口范围,从而造成部分情况下,打洞失败。而本实施例充分发挥服务器的优势,扩大发包的端口范围,提升打洞成功率,并在一定程度上提升打洞效率。
根据本发明的技术方案,没有仅使用两端设备进行P2P打洞,而是让服务器参与其中,相比于两端设备,服务器在性能及网络环境方面更具有优势,两端设备在发送大规模的包时效率较低、耗时较长,而服务器发送同等规模的包效率更高、耗时更短,因此服务器相对于两端设备而言更适合执行P2P打洞任务,尤其是通过发包探测nat洞口位置的过程,本实施例中服务器在发包时,在包中报文注明来源地址为设备的地址,即服务器“模拟”设备进行发包,从而确保对方设备在接收到包,即探测到洞口时,能够记录对方设备的地址以与对方设备进行数据交互,从而完成P2P打洞。
本发明的另一个实施例中提供一种服务器,相对于前述的实施例,还包括:
服务器评分模块,获取服务器集群中的多个服务器的CPU、内存及网络资源总量及占用量,对多个服务器进行评分:
其中,为多个服务器中第j个服务器的得分,/>为第j个服务器的CPU总量,/>为第j个服务器的CPU占用量,/>为多个服务器的CPU总量中的最大值,/>为第j个服务器的内存总量,/>为第j个服务器的内存占用量,/>为多个服务器的内存总量中的最大值,/>为第j个服务器的网络资源总量,/>为第j个服务器的网络资源占用量,/>为多个服务器的网络资源中的最大值,/>、/>、/>为CPU、内存及网络资源对应的权重系数。
本实施例中,服务器的资源主要包括CPU、内存和网络资源,基于上述公式,将服务器的CPU、内存和网络资源转换为对服务器进行评价的评分,使得服务器间的优劣差距得以准确量化。
服务器选择模块,按照多个服务器的得分,从多个服务器中选择一个服务器,用于获取第一设备的源地址和目标地址。
根据本实施例的技术方案,根据服务器的CPU、内存和网络资源对服务器进行评分,以从服务器集群中选出适于执行P2P打洞任务的服务器。
如图7所示,本发明的另一个实施例中提供一种服务器,相对于前述的实施例,网关探测模块包括:
网关查找模块710,查找与第一nat网关类型相同的x个nat网关。
记录获取模块720,获取x个nat网关的历史开放端口记录。
本实施例中,x个nat网关的历史开放端口记录中记录了不同类型端口的历史开放情况,对于预测同类型第一nat网关上的开放端口具有重要的参考价值。
概率统计模块730,统计历史开放端口记录中相同类型的端口的开放概率:
其中,为历史开放端口记录中所有类型端口中的第k个类型端口的开放概率,/>为第k个类型端口的开放次数,/>为第k个类型端口在x个nat网关中每个网关的开放时间,/>为x个nat网关中每个网关的工作时间。
本实施例中,基于上述公式,依据历史记录中端口的开放次数和开放时间,准确地对不同类型端口的开放概率进行评估量化。
端口选择模块740,根据开放概率的高低顺序,取开放概率最高的n个端口根据开放概率的高低顺序,从历史开放端口记录中所有类型端口中取前n个类型的端口,以及对照前n个类型的端口从第一nat网关上选择n个端口。
此时报文发送模块按照n个端口对应的开放概率高低,将n个包依次通过n个端口发送至第一nat网关。
本实施例中,按照n个端口开放概率的高低顺序发包,有利于优先将包发送到作为洞口的开放端口,即提早完成打洞。
根据本实施例的技术方案,以x个nat网关的历史开放端口记录中的端口开放次数和时间为依据,准确地分析了第一nat网关中不同端口开放的可能性,从而精准预测第一nat网关上的洞口范围,以提升发送报文探测洞口的效率。
本发明的另一个实施例中提供一种服务器,相对于前述的实施例,网关探测模块还检测第一设备的历史业务,并从第一nat网关中选择用于传输历史业务的数据的m个端口,在n个端口中加入m个端口后去重,以对n个端口更新。
本实施例中,取n个端口与m个端口的最大集合,利用服务器的性能和网络环境优势进一步扩大了洞口探测范围。根据本实施例的技术方案,根据第一设备的历史业务,预测第一设备常用的端口范围,同时将其纳入洞口探测范围,以进一步提升打洞成功率。
以上结合具体实施例描述了本申请的基本原理,但是,需要指出的是,在本申请中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势、效果等是本申请的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本申请为必须采用上述具体的细节来实现。
本申请中涉及的器件、装置、设备、系统的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、系统。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。
还需要指出的是,在本申请的装置、设备和方法中,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本申请的等效方案。
提供所公开的方面的以上描述以使本领域的任何技术人员能够做出或者使用本申请。对这些方面的各种修改对于本领域技术人员而言是非常显而易见的,并且在此定义的一般原理可以应用于其他方面而不脱离本申请的范围。因此,本申请不意图被限制到在此示出的方面,而是按照与在此公开的原理和新颖的特征一致的最宽范围。
为了例示和描述的目的已经给出了以上描述。此外,此描述不意图将本申请的实施例限制到在此公开的形式。尽管以上已经讨论了多个示例方面和实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。
Claims (8)
1.一种利用服务器组装UDP报文的辅助P2P打洞方法,其特征在于,包括:
通过服务器获取需要进行P2P连接的第一设备的源地址和目标地址,其中,所述源地址为所述第一设备对应的第一nat网关的地址,所述目标地址为所述第一设备需要连接的第二设备对应的第二nat网关的地址,所述服务器的性能及网络环境都优于所述第二设备;
基于原始套接字技术组装UDP报文,在所述UDP报文中记录所述第二设备的源地址和目标地址,其中,所述第二设备的源地址为所述第二设备对应的第二nat网关的地址,以提示所述UDP报文来源于所述第二nat网关,所述第二设备的目标地址为所述第一nat网关的地址;
探测所述第一nat网关的类型,根据探测结果从所述第一nat网关上选择n个端口;
按照已选择的所述n个端口,通过所述服务器将所述UDP报文封装为n个包并发送至所述第一nat网关,在所述第一nat网关通过所述n个端口中的第一端口将所述UDP报文转发至所述第一设备时完成打洞,并将所述第一端口作为洞口,
其中,在“通过服务器获取需要进行P2P连接的第一设备的源地址和目标地址”之前,还包括:
获取服务器集群中的多个服务器的CPU、内存及网络资源总量及占用量,对所述多个服务器进行评分:
其中,为所述多个服务器中第j个服务器的得分,/>为所述第j个服务器的CPU总量,/>为所述第j个服务器的CPU占用量,/>为所述多个服务器的CPU总量中的最大值,/>为所述第j个服务器的内存总量,/>为所述第j个服务器的内存占用量,为所述多个服务器的内存总量中的最大值,/>为所述第j个服务器的网络资源总量,/>为所述第j个服务器的网络资源占用量,/>为所述多个服务器的网络资源总量中的最大值,/>、/>、/>为CPU、内存及网络资源对应的权重系数;
按照所述多个服务器的得分,从所述多个服务器中选择一个服务器,用于获取所述第一设备的源地址和目标地址。
2.根据权利要求1所述的利用服务器组装UDP报文的辅助P2P打洞方法,其特征在于,“探测所述第一nat网关的类型,根据探测结果从所述第一nat网关上选择n个端口”的步骤包括:
查找与所述第一nat网关类型相同的x个nat网关;
获取所述x个nat网关的历史开放端口记录;
统计所述历史开放端口记录中相同类型的端口的开放概率:
其中,为所述历史开放端口记录中所有类型端口中的第k个类型端口的开放概率,/>为第k个类型端口的开放次数,/>为第k个类型端口在所述x个nat网关中每个网关的开放时间,/>为所述x个nat网关中每个网关的工作时间;
根据开放概率的高低顺序,从所述历史开放端口记录中所有类型端口中取前n个类型的端口,以及对照所述前n个类型的端口从所述第一nat网关上选择所述n个端口。
3.根据权利要求2所述的利用服务器组装UDP报文的辅助P2P打洞方法,其特征在于,“通过所述服务器将所述UDP报文封装为n个包并发送至所述第一nat网关”的步骤包括:
按照所述n个端口对应的开放概率高低,将所述n个包依次通过所述n个端口发送至所述第一nat网关。
4.根据权利要求1所述的利用服务器组装UDP报文的辅助P2P打洞方法,其特征在于,“根据探测结果从所述第一nat网关上选择n个端口”的步骤,还包括:
检测所述第一设备的历史业务;
从所述第一nat网关中选择用于传输所述历史业务的数据的m个端口;
在所述n个端口中加入所述m个端口后去重,以对所述n个端口更新。
5.根据权利要求1所述的利用服务器组装UDP报文的辅助P2P打洞方法,其特征在于,“将所述第一端口作为洞口”的步骤包括:
在所述第一nat网关还通过所述n个端口中的第二端口将所述UDP报文转发至所述第一设备时,比较所述第一端口的响应速率和所述第二端口的响应速率;
在所述第一端口的响应速率高于所述第二端口的响应速率时,将所述第一端口作为洞口。
6.一种服务器,其特征在于,所述服务器用于利用原始套接字组装UDP报文辅助进行P2P打洞,包括:
地址获取模块,获取需要进行P2P连接的第一设备的源地址和目标地址,其中,所述源地址为所述第一设备对应的第一nat网关的地址,所述目标地址为所述第一设备需要连接的第二设备对应的第二nat网关的地址,所述服务器的性能及网络环境都优于所述第二设备;
报文组装模块,基于原始套接字技术组装UDP报文,在所述UDP报文中记录所述第二设备的源地址和目标地址,其中,所述第二设备的源地址为所述第二设备对应的第二nat网关的地址,以提示所述UDP报文来源于所述第二nat网关,所述第二设备的目标地址为所述第一nat网关的地址;
网关探测模块,探测所述第一nat网关的类型,根据探测结果从所述第一nat网关上选择n个端口;
报文发送模块,按照已选择的所述n个端口,通过所述服务器将所述UDP报文封装为n个包并发送至所述第一nat网关,在所述第一nat网关通过所述n个端口中的第一端口将所述UDP报文转发至所述第一设备时完成打洞,并将所述第一端口作为洞口,
其中,所述服务器还包括:
服务器评分模块,获取服务器集群中的多个服务器的CPU、内存及网络资源总量及占用量,对所述多个服务器进行评分:
其中,为所述多个服务器中第j个服务器的得分,/>为所述第j个服务器的CPU总量,/>为所述第j个服务器的CPU占用量,/>为所述多个服务器的CPU总量中的最大值,/>为所述第j个服务器的内存总量,/>为所述第j个服务器的内存占用量,为所述多个服务器的内存总量中的最大值,/>为所述第j个服务器的网络资源总量,/>为所述第j个服务器的网络资源占用量,/>为所述多个服务器的网络资源总量中的最大值,/>、/>、/>为CPU、内存及网络资源对应的权重系数;
服务器选择模块,按照所述多个服务器的得分,从所述多个服务器中选择一个服务器,用于获取所述第一设备的源地址和目标地址。
7.根据权利要求6所述的服务器,其特征在于,所述网关探测模块包括:
网关查找模块,查找与所述第一nat网关类型相同的x个nat网关;
记录获取模块,获取所述x个nat网关的历史开放端口记录;
概率统计模块,统计所述历史开放端口记录中相同类型的端口的开放概率:
其中,为所述历史开放端口记录中所有类型端口中的第k个类型端口的开放概率,/>为第k个类型端口的开放次数,/>为第k个类型端口在所述x个nat网关中每个网关的开放时间,/>为所述x个nat网关中每个网关的工作时间;
端口选择模块,根据开放概率的高低顺序,从所述历史开放端口记录中所有类型端口中取前n个类型的端口,以及对照所述前n个类型的端口从所述第一nat网关上选择所述n个端口。
8.根据权利要求7所述的服务器,其特征在于,
所述报文发送模块按照所述n个端口对应的开放概率高低,将所述n个包依次通过所述n个端口发送至所述第一nat网关。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310703007.9A CN116436929B (zh) | 2023-06-14 | 2023-06-14 | 利用服务器组装udp报文的辅助p2p打洞方法和服务器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310703007.9A CN116436929B (zh) | 2023-06-14 | 2023-06-14 | 利用服务器组装udp报文的辅助p2p打洞方法和服务器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116436929A CN116436929A (zh) | 2023-07-14 |
CN116436929B true CN116436929B (zh) | 2023-09-08 |
Family
ID=87087688
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310703007.9A Active CN116436929B (zh) | 2023-06-14 | 2023-06-14 | 利用服务器组装udp报文的辅助p2p打洞方法和服务器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116436929B (zh) |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101945141A (zh) * | 2010-09-17 | 2011-01-12 | 北京神州泰岳软件股份有限公司 | 基于tcp的穿越nat设备的方法及系统 |
CN103442224A (zh) * | 2013-09-09 | 2013-12-11 | 杭州巨峰科技有限公司 | 一种基于nat穿透的视频监控访问策略和实现方法 |
US8917311B1 (en) * | 2014-03-31 | 2014-12-23 | Apple Inc. | Establishing a connection for a video call |
CN105577851A (zh) * | 2015-12-29 | 2016-05-11 | 深圳市科漫达智能管理科技有限公司 | 一种p2p通信方法、p2p服务器以及终端 |
CN108989488A (zh) * | 2018-09-06 | 2018-12-11 | 腾讯科技(深圳)有限公司 | 网络地址转换设备的穿越方法、装置及存储介质 |
CN111314498A (zh) * | 2020-01-21 | 2020-06-19 | 山东汇贸电子口岸有限公司 | 网络地址转换方法和nat网关 |
CN111600968A (zh) * | 2020-03-31 | 2020-08-28 | 普联技术有限公司 | P2p网络中nat打洞方法、装置、设备及可读存储介质 |
WO2020199396A1 (zh) * | 2019-03-29 | 2020-10-08 | 深圳市网心科技有限公司 | Nat穿透方法和系统、电子设备和存储介质 |
WO2022143127A1 (zh) * | 2020-12-31 | 2022-07-07 | 华为技术有限公司 | 一种访问局域网服务设备的方法及电子设备 |
CN115022281A (zh) * | 2022-06-16 | 2022-09-06 | 杭州楷知科技有限公司 | 一种nat穿透的方法、客户端及系统 |
CN116132451A (zh) * | 2023-01-19 | 2023-05-16 | 大陆软件系统开发中心(重庆)有限公司 | 用于点对点通信的方法、系统、计算机存储介质及电子设备 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009065996A1 (en) * | 2007-11-22 | 2009-05-28 | Nokia Corporation | Virtual network interface for relayed nat traversal |
CN106550058A (zh) * | 2015-09-17 | 2017-03-29 | 群晖科技股份有限公司 | 网络地址转换穿透方法以及使用该方法的系统 |
-
2023
- 2023-06-14 CN CN202310703007.9A patent/CN116436929B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101945141A (zh) * | 2010-09-17 | 2011-01-12 | 北京神州泰岳软件股份有限公司 | 基于tcp的穿越nat设备的方法及系统 |
CN103442224A (zh) * | 2013-09-09 | 2013-12-11 | 杭州巨峰科技有限公司 | 一种基于nat穿透的视频监控访问策略和实现方法 |
US8917311B1 (en) * | 2014-03-31 | 2014-12-23 | Apple Inc. | Establishing a connection for a video call |
CN105577851A (zh) * | 2015-12-29 | 2016-05-11 | 深圳市科漫达智能管理科技有限公司 | 一种p2p通信方法、p2p服务器以及终端 |
CN108989488A (zh) * | 2018-09-06 | 2018-12-11 | 腾讯科技(深圳)有限公司 | 网络地址转换设备的穿越方法、装置及存储介质 |
WO2020199396A1 (zh) * | 2019-03-29 | 2020-10-08 | 深圳市网心科技有限公司 | Nat穿透方法和系统、电子设备和存储介质 |
CN111314498A (zh) * | 2020-01-21 | 2020-06-19 | 山东汇贸电子口岸有限公司 | 网络地址转换方法和nat网关 |
CN111600968A (zh) * | 2020-03-31 | 2020-08-28 | 普联技术有限公司 | P2p网络中nat打洞方法、装置、设备及可读存储介质 |
WO2022143127A1 (zh) * | 2020-12-31 | 2022-07-07 | 华为技术有限公司 | 一种访问局域网服务设备的方法及电子设备 |
CN115022281A (zh) * | 2022-06-16 | 2022-09-06 | 杭州楷知科技有限公司 | 一种nat穿透的方法、客户端及系统 |
CN116132451A (zh) * | 2023-01-19 | 2023-05-16 | 大陆软件系统开发中心(重庆)有限公司 | 用于点对点通信的方法、系统、计算机存储介质及电子设备 |
Non-Patent Citations (1)
Title |
---|
"无结构P2P系统中一种UDP协议穿透 NAT技术的研究";蔡祖恋, 刘克剑, 甘春娇, 张英英;《西华大学学报》;第28卷(第4期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN116436929A (zh) | 2023-07-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103067534B (zh) | 一种NAT实现系统、方法及Openflow交换机 | |
CN110300115A (zh) | 一种基于多通道的数据传输方法以及相关装置 | |
US20050105474A1 (en) | System and method for measuring per node packet loss in a wireless network | |
CN101843079A (zh) | 传输对潜在配置的选择 | |
CN110752943B (zh) | 一种输电线路分布式故障诊断系统及方法 | |
WO2021164261A1 (zh) | 云网络设备的测试方法、存储介质和计算机设备 | |
CN101945043A (zh) | 基于IPv6的下一代互联网拓扑发现系统及实现方法 | |
CN1848778A (zh) | 用于监控信令消息行进的方法和网络监控装置 | |
US8472420B2 (en) | Gateway device | |
CN111629452A (zh) | 一种数据传输控制方法、装置、存储介质及电子设备 | |
CN108270602A (zh) | 一种数据链路的检测方法、装置及系统 | |
CN101123582B (zh) | 一种私网终端间的通讯方法 | |
CN111629024A (zh) | 一种数据传输控制方法、装置、存储介质及电子设备 | |
CN109379291A (zh) | 一种组网中服务请求的处理方法及装置 | |
CN108667732A (zh) | 一种报文转发方法及装置 | |
CN111934936A (zh) | 网络状态检测方法、装置、电子设备及存储介质 | |
CN104506450A (zh) | 媒体资源反馈方法及装置 | |
CN101552745A (zh) | 一种实现nat的方法及装置 | |
CN107547346A (zh) | 一种报文传输方法和装置 | |
CN102970387A (zh) | 一种域名解析方法、装置及系统 | |
JP2014078773A (ja) | データ管理システム | |
CN104521211A (zh) | 一种会话连接建立的方法、装置和系统 | |
CN116436929B (zh) | 利用服务器组装udp报文的辅助p2p打洞方法和服务器 | |
CN111464879B (zh) | 一种数据通信的方法及装置 | |
KR100854681B1 (ko) | 인터넷 프로토콜 유비쿼터스 센서 네트워크와 단순네트워크 관리 프로토콜 망을 상호 연동하기 위한게이트웨이 및 인터넷 프로토콜 유비쿼터스 센서네트워크와 단순 네트워크 관리 프로토콜 망과의 상호 연동방법. |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |