APP下载

分析基于NAT穿越技术的P2P通信方案的研究与实现

2018-11-07李健江

电脑知识与技术 2018年21期
关键词:实现方法

李健江

摘要:P2P技术具有便利性、便捷性等特点,因此P2P技术在日常应用中十分广泛,然而NAT设备的广泛存在,在很大程度上限制了P2P网络的应用范围。整个系统中的索引服务器作为对等点联络中心,并记录对等点网络特性,为通信的对等点提供信息查询。而采用中间索引服务器则可以查询中间节点,辅助打洞技术从而实现NAT的穿越,从而很好地解决了不同网络主机间P2P通信问题。

关键词:NAT穿越技术;P2P;通信方案;实现方法

中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2018)21-0045-02

1 背景

P2P(Peer-to-Peer)网络模型当中具有很多对称点(节点),是指每个对等点不仅是获取资源的对象,同时也是资源的提供对象。各个对等点具备相同责任与能力协同完成任务,并且对等点之间不依赖集中服务器,而是通过直连共享资源、处理资源、存储资源等方法。近些年来,P2P技术已经逐渐成为社会关注的热点。而采用P2P这种新型网络通信思想,需要重点考虑传播模式、形态、信息流向、内容结构、传统控制等问题。随着当今网络技术普及度越来越高,硬件与软件更新迭代速度加快,个人计算机也在不断的进步和更新,边缘网络信息数量越来越多,导致互联网中的客户机和服务器通信模式已经被P2P所取代。但从目前网络技术发展现状来看,P2P广泛存在于NAT(netword address transition)设备中,给内部私有的网络主机中增设一道屏障。基于此,为了能够充分发挥P2P通信技术的积极作用,必须要实现NAT穿越,确保两个对等点间无阻通信。

2 P2P和NAT概述

2.1 P2P

简单来说,P2P就是对点通信,也可以称之为对等联网。当然,P2P在不同的领域也有不同含义,该文的P2P主要是指通信模式、逻辑网络模型。P2P网络中的对等点地位都是相同的,每个对等点同时扮演者资源接收者和发送者双重角色,也就是客户机和服务器。对等点间可以直接通信、处理运算、存储、资源共享等功能。在实际应用中,P2P网络具备拓展性强、隐私性好、性能高、可分散等优势,因此P2P技术在信息共享、分布式计算、网络存储等诸多领域都有十分广阔的应用前景。

2.2 NAT

NAT技术的出现在很大程度上缓解了IPv4资源短缺的弊端。简单来说,NAT是指网络地址转换,作为一种将内部网络个人IP地址转化成为为外部网络公共IP地址,这样即可在同一个平台上实现多个个人网络连接,让公网IP连接到因特网中,从而缓解了公网IP短缺等问题。NAT设备中的STUN分组不同可以划分为不同端口映射方式,其中包括:Restricted Cone NAT、Full Cone NAT、Port Restricted ConeNAT和Symmetric NAT。

2.3 NAT对P2P的影响

NAT技术在网络技术中的应用十分广泛,包括环节IPv4资源短缺、设立防火墙、加强计算机安全等。但是NAT设备却给P2P通信带来了巨大的影响,无法充分发挥P2P网络的积极作用。这主要是因为NAT不允许外网访问内网主机,从而保证内网主机的安全,导致Internet上的公网IP不可直接访问NAT控制下的主机,并且NAT下的主机之间无法进行相互识别,也不能直接传送相关信息。因此,想要在公共网络环境下加强P2P通信,必须要采用相关方法对NAT障碍进行穿越。

3 基于NAT穿越技术的P2P通信方案

3.1 反向连接技术

如图1所示,如果通信双方只有一方设置了NAT时,则可以采用反向连接技术实现P2P通信。图中Client A(拥有私有 IP地址 10.0.0.1)在NAT后,以TCP端口1234为切入点,直接连接到Medi-Server S(拥有公网IP地址18.181.0.31)的TCP端口1235中,这样NAT A(拥有公网IP地址155.99.25.11)为了能够匹配TCP端口的62000。而Client B(拥有公网IP地址138.76.29.7)通多端口中的1234連接到Medi-Server S的TCP端口1235上。这样A、B两点就可在S上个获得堆放的公网,其[IP 地址: 端口]对应为[138.76.29.7:1234]和[155.99.25.11:62000],实现在本地端口即可侦听,从而获取相应的信息。

该设定中,由于端口B中有公网IP,因此A要向B发送通信请求,则可以通过TCP直接连接到 B[138.76.29.7:1234]。而如果B想要通过TCP连接到A[155.99.25.11:62000],则会连接失败,这是因为在A连接到了NAT,即使是B发送了TCP SYN请求到达端口62000,但是NAT A会直接将此通信请求拒绝,当作是公网IP处理。想要实现B→A的通信方案,需要B在 Medi-Server S上给A发送连接请求,再反过来让A连接到B,这样即可实现A、B的TCP连接。

3.2 UDP打洞技术

反向连接技术虽然在实际应用中具有局限性,并且需要多项请求,但是以中间服务器作为媒介实现P2P通信的思想却是打洞技术实现的基础。该项技术能够让通信双方在中间服务器中构建一个可以点对点的UDP,从而实现P2P通信。

由于个人主机的网络环境存在多种情况,最为普遍的就是双方都在不同NAT后,而打洞技术可以很好地实现NAT穿越。如图2,Client A位于在NAT A后,Client B在NAT B后,在A、B共同向S发送了UDP通信请求后,NAT A为A和S间通信匹配出了UDP端口62000,NAT B为B和S之间匹配到了UDP端口31000,此时的A、B共同在S上获得了对方的公网,其[IP地址: 端口] 分别对应[138.76.29.7:31000]和[155.99.25.11:62000]。

结合NAT特点,其不允许外网主机访问内网主机,所以实现通信的前提条件是:此消息[IP地址 : 端口]对于某个先前通过NAT内部发起的通信目的[IP地址 : 端口]相匹配。从而实现A→B的对点对通信。

如果A简单地向B发送消息,由于NAT B中内部向外发送通信只是B和S间的通信,所以通信连接的目的[IP地址 : 端口]是[18.181.0.31:1234],NAT B所接受到的消息端口为[155.99.25.11:62000],所以[IP地址 : 端口]不匹配,这时NAT B就会自动摒弃这一消息。

想要实现A、B无阻通信,需要事先构建和B点对点的UDP通信,A向B第一发送消息时[138.76.29.7:31000],会以S为平台转发通信请求,让B向A[155.99.25.11:62000]发送消息(打洞消息),这时会在NAT B上留下标志信息[155.99.25.11:62000](洞,发送信息过程的打洞过程),之后即可将[155.99.25.11:62000]消息传输到NAT内部,因此在A第二次向B发送消息时,即可直接将消息传输到NAT B内部。这是因为第一次向B[138.76.29.7:31000]发送消息过程中,NAT A已经在B[138.76.29.7:31000]中预留下了“洞”,因此从B→A发送[155.99.25.11:62000]打洞消息后会直接进入到NAT A内,所以在以后的A、B消息传输即可采用P2P网络,而不需要借助Medi-Server S平台。

3.3 P2P通信方案

通信双方A和B在不了解对方网络环境的情况下,如IP可能位于一级NAT后,也可能位于多级NAT后,如果网络环境不明确就无法实现P2P通信,这就需要考虑在此条件下如何实现P2P通信。

首先,A在NAT后,B也在NAT后时,则A可以利用打洞技术向B发送UDP通信请求即可实现二者的通信;其次,A在NAT后,B拥有公网IP时,则可以采用TCP直接与B通信,也可以采用UDP通信;再次,A、B都拥有公网IP,此时A可以向TCP连接B,也可以同UDP连接;最后,A拥有公网、B在NAT后。A可以采用反向连接方法构建与B之间的TCP连接,也可以利用打洞技术和B构建娘UDP通信实现P2P连接。

在实际实现过程中,借助Socket网络编程实现了P2P通信系统,主要是由P2P Client和P2P Medi-Server組成。在系统中采用了以上方案,并通过VMware Workstation软件模拟NAT多级网络环境,进行网络环境测试,对其中所出现的Cone NAT都保持了良好的通信状态。其中,要考虑到打洞消息在网络中可能出现堵塞或丢包等情况,因此在打洞过程中要间隔发送一定数量的打洞消息,直到打洞出现结果(成功或失败)。如图3所示,是 P2P通信系统中Medi-Server的通信记录,B和A先后登录到Medi-Server中,由于A和B都在NAT后,所以在A向B发送通信请求时,即可通过Medi-Server发送打洞请求,让B向A公网 [IP 地址 : 端口 ] 发打洞消息进行打洞。

4 结束语

综上所述,针对NAT影响P2P通信问题,该文提出了反向连接技术以及UDP打洞技术,实现NAT穿越的P2P通信方案,让NAT后主机通信不需要通过中间服务器实现真正的P2P直接通信。通过实践证明,上述几种方法十分有效,值得推广。

参考文献:

[1] 徐向阳, 韦昌法. 基于NAT穿越技术的P2P通信方案的研究与实现[J]. 计算机工程与设计, 2007, 28(7): 1559-1561.

[2] 秦添. P2P网络中NAT穿透方法的研究与实现[D]. 长沙: 湖南大学, 2010.

[3] 张泽鹏. P2P网络中NAT穿透技术的研究与实现[D]. 北京: 北京邮电大学, 2010.

[4] 刁一然. 基于XMPP协议的即时通讯系统P2P-NAT穿透技术研究及实现[D]. 哈尔滨: 哈尔滨工业大学, 2014.

[5] 卢启芳. P2P中基于UDP的NAT穿越方案的研究与实现[D]. 贵阳: 贵州大学, 2010.

[6] 黄方亮, 俞磊, 黄炎. 基于NAT穿透技术的P2P解决方案研究与设计[J]. 兰州文理学院学报: 自然科学版, 2014, 28(5): 52-56.

【通联编辑:谢媛媛】

猜你喜欢

实现方法
高职英语教学价值定位及其实现
工程地质在优慕课教学资源平台信息化教学案例