logo好方法网

P2P网络中NAT打洞方法、装置、设备及可读存储介质


技术摘要:
本发明公开了一种P2P网络中NAT打洞方法、装置、设备及可读存储介质,所述方法包括:在两方网络设备获取各自的已知外网端口后,通过服务器与对方的网络设备交换各自的内网端口与外网端口;通过比对网络设备的内网端口与外网端口判断该网络设备对应的网关是否具备预设的  全部
背景技术:
在P2P网络中的两个网络设备建立连接的过程中,需要该网络中的两个网络设备 通过网关来进行打洞。在网关上,首先需要有来自内部网络的网络设备的包发往外部,此时 在网关上留下对应的映射,映射是指,该网络设备在网关中的内网端口为X:x,外网端口为 X’:x’,映射为X:x<-X’:x’,在形成映射之后,一定条件下,外网发往X’:x’的包将会被转发 给X:x。该条件和NAT类型有关。该映射一般被称为“洞”,此时来自外部网络设备的数据包才 能通过这个“洞”,经过网关保存的映射,转发给对应的内部网络设备。在“洞”出现之前,所 有外部网络发往该洞的包都会被丢弃。 参见图1,可以简略代表两个网络设备在P2P网络中的情况: X是位于内网里面的网络设备,其内网的IP和Port分别为X:x。经过网关之后,映射 到外网的IP和Port分别是X1’:x1’和X2’:x2’。Y1和Y2是外网设备,对应的外网IP和Port为 Y1:y1和Y2:y2。而这两个设备之间具有如下各种NAT类型: 1.外网端口:设备直接暴露在外网环境内,X=X1’=X2’,x=x1’=x2’。 2.全锥形:当X:x向外部设备Y1:y1发过包过后,形成了外部IP:Port=X1’:x1’,任 意的外部设备(Y1和Y2)发往X1’:x1’的包都能直接被转发给X:x;X:x向Y2:y2发包时,将会 复用端口X1’:x1’,X1’=X2’,x1’=x2’。 3.地址限制锥型:当X:x向外部设备Y1:y1发过包过后,形成了外部IP:Port=X1’: x1’,只有来自Y1的包(Y1:y1,Y1:y2…)才能通过X1’:x1’,其他包都会被丢弃;只有当X:x向 Y2发过包后,此时NAT的外网端口复用了X1’:x1’,来自Y2的包才能通过X1’:x1’,X1’=X2’, x1’=x2’。 4.地址和端口限制锥形:当X:x向外部设备Y1:y1发过包过后,形成了外部IP:Port =X1’:x1’,只有来自Y1:y1的包才能通过X1’:x1’,其他的包(包括Y1:y2,Y2:y2)都会被丢 弃;只有当X:x向Y2:y2发过包后(复用X1’:x1’),来自Y2:y2的包才能通过X1’:x1’到达X:x, X1’=X2’,x1’=x2’。 5.对称型:在上面第4点的大部分基础上,X:x发往不同的IP:Port(Y1:y1,Y2:y2) 将在NAT外网上映射为不同的端口(X1’=X2’,x1’≠x2’)。 现有的P2P打洞流程如图2所示: 在两个NAT网关网络下分别各有1台设备X,Y希望进行P2P打洞。其内网端口分别为 X:x和Y:y。X和打洞服务器通信之后,映射到外网的端口为X1’:x1’,并被打洞服务器告知该 IP:Port。Y和打洞服务器通信之后,映射到外网的端口为Y1’:y1’,并被打洞服务器告知该 IP:Port。X和Y通过外部的云服务器交换信息之后知道了各自的外网端口,此时X向Y1’:y1’ 发包,Y向X1’:x1’发包。然后有以下几种情况: 4 CN 111600968 A 说 明 书 2/10 页 (1)两边都是锥形拓扑(包含外网端口,即上述的1、2、3、4这些NAT类型)。此时,X通 过X1’:x1’向Y1’:y1’发包,Y通过Y1’:y1’向X1’:x1’发包。仅在开始时,发包较慢的一方会 在网关丢弃对方的包,之后X和Y即可收到对方的包,然后可以成功建立连接。 (2)一边是对称型拓扑(假设为设备Y),一边是外网端口、全锥形或者地址限制锥 形(上述的1、2、3这些NAT类型,假设为设备X)。此时由于Y是对称型拓扑,当Y向X1’:x1’发包 时,将会在NAT上映射一个和打洞服务器通信时的映射Y1’:y1’的不同的端口,即Y1’:y2’。 此时由于Y1’:y1’未向X1’:x1’发过包,此时来自X1’:x1’的包将会全部被丢弃。但是由于此 时X已经向Y发过包了,此时X1’:x1’将可以通过所有来自Y1’的包,因此Y1’:y2’可以通过 X1’:x1’到达X,X此时则可以通过解析包获知Y1’:y2’,然后向Y1’:y2’发包,此时双方都收 到了来自对方的包,打洞成功,可以建立连接。 (3)一边是对称型拓扑(假设为设备Y),一边为地址和端口限制锥形(假设为设备 X)。此时由于Y是对称型拓扑,当Y向X1’:x1’发包时,将会在NAT上映射一个和打洞服务器通 信时的映射Y1’:y1’的不同的端口,即Y1’:y2’。此时由于Y1’:y1’未向X1’:x1’发过包,此时 来自X1’:x1’的包将会全部被丢弃。而X1’:x1’未向Y1’:y2’发过包,因此来自Y1’:y2’的包 也会被全部丢弃,所以打洞无法成功。 (4)两边都为对称型拓扑。设备X和打洞服务器通信的映射外网端口为X1’:x1’,当 向Y1’:y1发包时,会映射出新端口,为X1’:x2’,但是由于Y1’:y1’未向X1’:x2’发过包,这些 包都会被网关丢弃;设备Y和打洞服务器通信的映射外网端口为Y1’:y1’,当向X1’:x1发包 时,会映射出新端口,为Y1’:y2’,但是由于X1’:x1未向Y1’:y2’发过包,因此这些包都会被 网关丢弃,所以打洞无法成功。 综上所述,P2P网络中两个设备打洞成功与否的情况可归结为以下的表格所示的 情形: 由此可见,当要建立P2P连接的两方的网络设备中一方对应的NAT为对称型NAT,而 另一方对应的NAT为以下中的一种:对称型NAT、地址和端口限制锥形NAT时,现有的P2P打洞 方法是无法打洞成功的。 5 CN 111600968 A 说 明 书 3/10 页
技术实现要素:
本发明实施例的目的是提供一种P2P网络中NAT打洞方法、装置、设备及可读存储 介质,可以在兼容现有的P2P打洞方式的情况下确保各种NAT型的P2P打洞都能够成功。 为实现上述目的,本发明一实施例提供了一种P2P网络中NAT打洞方法,其中,要建 立P2P连接的两方网络设备中至少有一方对应的网关具有所述端口映射规律,所述端口映 射规律包括:外网端口号呈规律地变化或保持和对应的网络设备的内网端口号相同;所述 方法应用于第一方网络设备中,所述方法包括: 在所述两方网络设备获取各自的已知外网端口后,通过服务器与第二方网络设备 交换各自的内网端口与外网端口; 通过比对网络设备的内网端口与外网端口判断该网络设备对应的网关是否具备 所述端口映射规律; 若本网络设备对应的网关不具备所述端口映射规律,本网络设备通过其内网端口 向第二方网络设备的预测外网端口发送打洞请求; 若本网络设备对应的网关具备所述端口映射规律且第二方网络设备对应的网关 不具备所述端口映射规律,本网络设备新申请一个内网端口,通过新申请的内网端口向第 二方网络设备的已知外网端口发送打洞请求; 若所述两方网络设备对应的网关均具备所述端口映射规律,本网络设备新申请一 个内网端口,通过新申请的内网端口向第二方网络设备的预测外网端口发送打洞请求; 当本网络设备接收到第二方网络设备发送的打洞请求或者第二方网络设备接收 到本网络设备的打洞请求时,本网络设备与第二方网络设备的P2P连接建立。 作为上述方案的改进,要建立P2P连接的两方的网络设备中一方对应的NAT为对称 型NAT,另一方对应的NAT为以下中的一种:对称型NAT、地址和端口限制锥形NAT;且为对称 型NAT的一方网络设备对应的网关具有预设的端口映射规律。 作为上述方案的改进,在所述两方网络设备获取各自的已知外网端口后,通过所 述服务器与第二方网络设备交换各自的内网端口与外网端口之前,所述方法还包括: 基于本网络设备已知的内网端口通过网关向打洞服务器发送打洞探测数据包,以 使所述打洞服务器对接收到的所述打洞探测数据包进行解析得到本网络设备的外网端口 并通过所述网关将外网端口信息返回给本网络设备;其中,所述网关保存本网络设备的内 网端口与外网端口的映射关系。 作为上述方案的改进,所述本网络设备通过其内网端口向第二方网络设备的预测 外网端口发送打洞请求,包括: 基于本网络设备的已知外网端口通过网关向第二方网络设备的预测外网端口发 送打洞请求,并接收第二方网络设备基于其新申请的内网端口发送的打洞请求,第二方网 络设备到本网络设备的P2P连接建立。 作为上述方案的改进,所述本网络设备新申请一个内网端口,通过新申请的内网 端口向第二方网络设备的已知外网端口发送打洞请求,包括: 本网络设备新申请一个内网端口,通过新申请的内网端口向第二方网络设备的已 知外网端口发送打洞请求,接收第二方网络设备基于其已知外网端口发送的打洞请求,第 二方网络设备到本网络设备的P2P连接建立。 6 CN 111600968 A 说 明 书 4/10 页 作为上述方案的改进,所述本网络设备新申请一个内网端口,通过新申请的内网 端口向第二方网络设备的预测外网端口发送打洞请求,包括: 本网络设备新申请一个内网端口,通过新申请的内网端口向第二方网络设备的预 测外网端口发送打洞请求,接收第二方网络设备基于其新申请的内网端口发送的打洞请 求,第二方网络设备到本网络设备的P2P连接建立。 作为上述方案的改进,网络设备的预测外网端口的预测值c为:c=a b*(x-1),其 中,a为初次映射的外网端口的值,x为映射次数(x≥1),b为规律变化的值;网络设备的新申 请的内网端口=该网络设备的已知的内网端口 N;N为预设的数值或者两方网络设备自动 协商的数值。 本发明另一实施例对应提供了一种P2P网络中NAT打洞装置,其中,要建立P2P连接 的两方网络设备中至少有一方对应的网关具有所述端口映射规律,所述端口映射规律包 括:外网端口号呈规律地变化或保持和对应的网络设备的内网端口号相同;所述装置包括: 端口交换模块,用于在所述两方网络设备获取各自的已知外网端口后,通过服务 器与第二方网络设备交换各自的内网端口与外网端口; 端口比对模块,用于通过比对网络设备的内网端口与外网端口判断该网络设备对 应的网关是否具备所述端口映射规律; 第一打洞模块,用于若本网络设备对应的网关不具备所述端口映射规律,本网络 设备通过其内网端口向第二方网络设备的预测外网端口发送打洞请求; 第二打洞模块,用于若本网络设备对应的网关具备所述端口映射规律且第二方网 络设备对应的网关不具备所述端口映射规律,本网络设备新申请一个内网端口,通过新申 请的内网端口向第二方网络设备的已知外网端口发送打洞请求; 第三打洞模块,用于若所述两方网络设备对应的网关均具备所述端口映射规律, 本网络设备新申请一个内网端口,通过新申请的内网端口向第二方网络设备的预测外网端 口发送打洞请求; P2P连接建立模块,用于当本网络设备接收到第二方网络设备发送的打洞请求或 者第二方网络设备接收到本网络设备的打洞请求时,本网络设备与第二方网络设备的P2P 连接建立。 本发明另一实施例提供了一种网络设备,包括处理器、存储器以及存储在所述存 储器中且被配置为由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实 现上述发明实施例所述的P2P网络中NAT打洞方法。 本发明另一实施例提供了一种计算机可读存储介质,所述计算机可读存储介质包 括存储的计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在 设备执行上述发明实施例所述的P2P网络中NAT打洞方法。 相比于现有技术,本发明实施例提供的所述P2P网络中NAT打洞方法、装置、设备及 可读存储介质,当要建立P2P连接的两方的网络设备中一方对应的NAT为对称型NAT,而另一 方对应的NAT为以下中的一种:对称型NAT、地址和端口限制锥形NAT时,在所述两方网络设 备获取各自的已知外网端口后,通过所述服务器与第二方网络设备交换各自的内网端口与 外网端口;通过比对网络设备的内网端口与外网端口判断该网络设备对应的网关是否具备 预设的端口映射规律;若相关的网络设备对应的网关具有所述端口映射规律,则通过相关 7 CN 111600968 A 说 明 书 5/10 页 的网络设备的预测的外网端口和新申请的内网端口来进行打洞,确保P2P打洞能够成功。此 外,本发明实施例的打洞方法不和现有的打洞方式冲突,可以用于作为对现有的打洞方式 的补充。由上分析可知,本发明实施例在兼容现有的P2P打洞方式的情况下,能够确保各种 NAT型的P2P打洞都能够成功。 附图说明 图1是现有的两个网络设备进行P2P打洞的简化示意图; 图2是现有的两个网络设备进行P2P打洞的具体示意图; 图3是本发明一实施例提供的一种P2P网络中NAT打洞方法的流程示意图; 图4是本发明实施例的两个网络设备进行P2P打洞的示意图; 图5是本发明一实施例提供的一种P2P网络中NAT打洞装置的结构示意图。
下载此资料需消耗2积分,
分享到:
收藏