




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGE目录摘要 1关键词 11前言 31.1基于UDP的防火墙穿透技术的研究意义: 32防火墙技术研究 42.1防火墙的工作原理 42.2防火墙的类型 42.2.1数据包过滤(Packetfiltering) 42.2.2应用级网关(Circuitgateway) 52.2.3电路级网关(Applicationgateway) 52.3防火墙的结构形式 52.3.1包过滤防火墙(Packetfilterfirewall) 52.3.2双宿网关防火墙(Dual-homedgatewayfirewall) 52.3.3屏蔽主机防火墙(Screenedhostfirewall) 62.3.4屏蔽子网防火墙(Screenedsubnetfirewall) 62.4防火墙技术 62.4.1网络地址转换(NAT) 62.4.2实施DNS(Domainnamesystem,域名系统) 62.4.3透明接入技术 72.4.4动态监视技术 72.4.5适应代理技术 73NAT技术研究 73.1基于UDP的防火墙穿透技术 93.1.1NAT技术 93.2网络地址和端口转换(NAPT) 93.2.1锥形NAT 103.2.2对称NAT 114基于UDP协议P2P通信的实现方式及原理 124.1UDP协议的论述 124.1.1UDP协议的简单论述 124.1.2UDP和TCP协议的区别 134.2P2P概述 134.3基于UDP协议P2P通信的实现方式 144.3.1中继站方式 144.3.2反向连接(逆向连接)方式 154.3.3UDP穿孔技术 164.3.4固定端口映射 184.3.5STUN(SimpleTraversaofUDPthroughNATs) 184.3.6UDP端口号预测(UDPportnumberforecast) 194.4采用UDP打洞技术穿透NAT原理介绍 195基于UDP穿透NAT的视频传输的实现 215.1服务器实现 215.2客户端实现 225.3影响基于UDP穿透NAT的关键因素 245.3.1NAT设备的种类 245.3.2UDP连接空闲时间 246结束语 25参考文献: 26致谢 27PAGE23基于UDP的防火墙穿透技术研究摘要:通过探索网络地址转换设备在进行UDP(UserDatagramProtocol)端口映射所存在的临时时间窗口,论述了使用UDP穿透网络地址转换设备的原理。引入检测及握手服务器及其所实现的数据包反射服务,来检测动态映射的端口信息以及网络地址转换设备在进行端口映射的特性。探讨了不同类型的网络地址转换设备对这种实现的影响,给出了检测过程以及建立端对端通讯过程的具体流程。这种实现可被广泛应用在IP语音、实时视频、文件共享以及分布式计算等应用中。网络中存在的NetworkAddressTranslation(NAT)使得PeertoPeer(P2P)通信存在极大的困难,因此穿透NAT已经成为P2P应用必须面对和解决的问题。本文介绍了几种穿透NAT的技术并分析了其各自的特点,指出了影响NAT穿透的关键因素,并给出了采用简单却健壮性很好的UDP打洞技术穿透NAT的实例,最后得出结论。关键词:NAT;UDP打洞;端对端;网络地址转换;防火墙;端口映射ResearchonUDP-basedFireWallPenetrationMethodAbstract:ByexploringthetemporaryUDP(userdatagramprotocol)port2mappingtimewindowonNAT(net2workaddresstranslation)devices,theprincipalofusingUDPtoworkthroughNATdeviceswaspresented.Adetec2tionandhandshakingserverwasproposedtosolvethedetectionofdynamicallymappedUDPports.Withpacketre2flectingserviceimplementedatdetectionandhandshakingserver,port2mappingcharacteristicsofNATdeviceandtheexternalmappedUDPportscanbediscovered.Theproceduresofthediscoveryprocessandtheproceduresofcompletingapeertopeerconnectionwerepresented.TheimplementationcanbenefitabroadrangeofapplicationslikevoiceoverIP,real2timevideo,file2sharingandpeertopeerbaseddistributedcomputing.NetworkAddressTranslation(NAT)causesdifficultiesforpeer2to2peer(P2P)communication,andthereforeNATtraversalhasbecomeaproblemtobefacedandsolvedbyP2Papplication.ThepaperintroducesseveralNATtraversaltech2niquesandanalysestheirrespectivecharacteristics,notesthekeyfactorsaffectingNATtraversal,andhasgivenagoodexampleusingoneofthesimplestbutmostrobustNATtraversaltechniques.Atlast,thepaperdrawstheconclusion.Keywords:NAT;UDPholepunching;peertopeer;networkaddresstranslation;firewall;portmapping1前言1.1基于UDP的防火墙穿透技术的研究意义:防火墙技术是目前相对成熟、应用广泛的网络安全技术,它通过监测、限制和更改跨越防火墙的数据流等多种技术,尽可能地对外部网络屏蔽有关被保护网络的结构信息,通过它可以隔离风险区域和安全区域的连接,同时不会妨碍对风险区域的访问,防火墙可以监控进出网络的通讯量,预防不希望的、未授权的信息进出被保护的网络,筑起网络的第一道安全防线。但要注意一点,防火墙在某种意义上是很愚蠢的,管理员对防火墙的过分依赖以及从而产生的懈怠情绪将不可避免的形成安全上的重大隐患,利用绕过防火墙端口屏蔽的方法来逃脱防火墙的监视。UDP协议即用户数据报协议,是定义用来在互连网络环境中提供包交换的计算机通信的协议。它是Internet上广泛采用的通信协议之一。UDP协议是一个无连接协议,发送端和接收端不建立连接;并且不提供数据传送的保证机制,不确保数据的发送和接收顺序;还有UDP不提供信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大地提高了执行速度。正是UDP具有这样的优点,所以在基于UDP协议上研究防火墙的穿透技术,使视频、音频、文件等大规模数据得到更好的网络传输。
2防火墙技术研究2.1防火墙的工作原理一般说来,防火墙包括如下几个基本组成部分(见下图)。过滤器(filter)(有时也称屏蔽)用于阻断一定类型的通信传输。网关是一台或一组机器,它提供中继服务,以补偿过滤器的影响。驻有网关的网络常被叫做非军事区(DeMilitarizedZone,DMZ).DMZ中的网关有时还由一个内部网关(internalgateway)协助工作。一般情况下,两个网关通过内部过滤器到内部的连接比外部网关到其它内部主机的连接更为开放。外部过滤器可用来保护网关免受攻击,而内部过滤器用来应付一个网关遭到破坏后所带来的后果,两个过滤器均可保护内部网络,使之免受攻击。一个暴露的网关机器通常被叫做堡垒机(bastionhost)。防火墙的基本功能有:过滤进、出网络的数据;管理进、出网络的访问行为;封堵某些禁止的业务;记录通过防火墙的信息内容和活动;对网络攻击进行检测和报警。图2.1:防火墙的基本组成部分Firewall2.2防火墙的类型目前而言,我们将防火墙分为以下三种主要类别:数据包过滤(packetfiltering)、应用网关(applicationgateway)以及电路网关(circuitgateway).通常情况下,可同时使用多个这样的防火墙。2.2.1数据包过滤(Packetfiltering)数据包过滤的工作方法是通过基于数据包的源地址、目的地址或端口来进行投递的。它是依据一些预定好的规则(信息过滤规则)来决定是否让数据通过防火墙(对内或对外),这些规则可根据IP包中的信息进行设置,也可根据路由器知道的信息如数据包到达端口,出去端口进行设置。这些规则由屏蔽路由器强制设置,也称它为包过滤规则。在主机和网络一级,利用数据包过滤很容易实现允许或禁止访问。2.2.2应用级网关(Circuitgateway)在防火墙设计中,应用级网关比较特别,相对来说比其它方法安全得多。它不使用通用目标机制来允许不同种类的通信,而是针对每个应用使用专用的代码。其特点是:不必担心不同过滤规则集之间的相互影响,也不必担忧数千台号称对外部提供安全服务的主机中的漏洞,只需仔细检查选择的数个程序。其最大的优点是:它易于记录并控制所有的进/出通信,这一点在某些环境中是相当重要的.出站FTP通信被限制到授权的个人,同时有效的带宽也受到限制。其意图在于防止有价值的公司程序和数据被盗用。在限制内部人员转储文件到磁盘或软盘的同时,它也成了对付缺少物理存取手段的电子入侵者的强大武器。但是,对于大多数据所提供的服务来说,需要特殊的用户程序或多种用户接口。2.2.3电路级网关(Applicationgateway)电路级网关是网络对外连接中最喜欢采用的方式。电路网关对TCP连接实行中继。调用者与网关的TCP端口相连,TCP又连接到该网关另一边上的某一目的地址上。在调用期间,网关中继程序复制往返的字节。一般来说,这些中继服务在字节通过时并不对其进行验证,但对字节数和TCP目的地进行记录,这些记录对网络安全是有用的。电路中继带来的问题是要求提供新客户程序。2.3防火墙的结构形式由于网络的拓扑结构、应用不同,防火墙的配置和实现方式也千差万别,以下是几种常用防火墙的结构形式。2.3.1包过滤防火墙(Packetfilterfirewall)包过滤防火墙能提供廉价但有用的网关安全等级,它往往可以用一台过滤路由器来实现,它的过滤能力来自路由器软件。包过滤防火墙一般设置在网络层,依据信息过滤规则对进出内部网络的信息进行分析,允许授权信息通过,禁止非授权信息通过,对所接收的每一个数据包作允许或拒绝的决定。这种防火墙比较简单,但安全性能差,它无法提供使用者身份认证的功能。2.3.2双宿网关防火墙(Dual-homedgatewayfirewall)双宿网关结构是围绕至少具有两个网络接口的堡垒主机而构成的。双宿网关的内外网络均可与堡垒主机实施通信,但内外网络之间不可直接通信,内外网络之间的IP数据流被堡垒主机完全切断。堡垒主机可以通过代理或让用户直接注册到其上,来达到很高程度的网络控制。双宿网关的结构采用主机取代路由器执行安全控制功能,从而达到受保护网除了看到堡垒主机外,不能看到其它任何系统的效果。同时堡垒主机不转发TCP/IP通信报文,网络中所有服务都必须由此主机的相应代理程序来完成。所以堡垒主机的性能非常重要。2.3.3屏蔽主机防火墙(Screenedhostfirewall)屏蔽主机防火墙使用应用网关提供代理服务。其结构中提供安全保护的主机仅仅与内部网相连,还有一台单独的过滤路由器,该路由器强迫所有到达它的数据包发送到被屏蔽主机。该防火墙系统实现了网络层安全(包过滤)和应用层安全(代理服务),所以其安全等级比包过滤防火墙要高。通常在路由器上设过滤规则,并使堡垒主机成为从外部网络可直接到达的主机。要访问内部系统或服务的外部系统都须与此主机相连。2.3.4屏蔽子网防火墙(Screenedsubnetfirewall)一个屏蔽子网防火墙由两个屏蔽路由器构成。它们是用来创建一个称为屏蔽子网或非军事化区域(DMZ)的外部网络段。DMZ把堡垒主机看成是应用层网关,在堡垒主机上,可以运行各种各样代理服务器。除了外部网络段,也有一个被屏蔽路由器所分开的内部网络段。应用两个路由器更加安全,只有堡垒主机和代理服务器能被外界看到,而看不到其它的东西。通过使用屏蔽子网隔离堡垒主机,能够削弱外部网络对堡垒主机的攻击,同时加强了内部网络的安全。2.4防火墙技术防火墙技术有很多种,其中有的技术已广泛应用,但更多新技术正在研究和改进之中。下面是几种较新的防火墙技术:2.4.1网络地址转换(NAT)内部网络采用的是私有地址(未注册的IP地址),若要与外部通信,需要公网地址,网络地址转换能将未注册的IP地址映射成合法的公网地址。网络地址转换分静态地址和动态地址两种转换模式,静态地址转换支持一对一的永久地址映射,而动态地址转换则是根据内部用户的需求临时分配公网地址,其地址映射是暂时的。这种技术既解决了IP地址不足的问题,同时又隐藏了内部网络真正的IP,使黑客无法直接攻击内部网络,加强了内部网的安全性。2.4.2实施DNS(Domainnamesystem,域名系统)当内部网络使用没有注册的IP地址,或是防火墙进行IP转换时,DNS也必须经过转换。在设置防火墙后,所有的DNS的请求都必须经过防火墙转发。这时可根据需要将DNS系统设为内部DNS、FW、DNS及DMZ、DNZ结构。在ISP注册全部域名,向ISP提供全部DMZ域名服务器地址;修改DMZ域名服务器,在其中加入指针记录指向防火墙,所有接收到的电子邮件由防火墙转发;修改内部网域名服务器,将所有对Internet的域名解析请求送给防火墙,配置防火墙的DNS,作为连接内部网和Internet的中介。2.4.3透明接入技术不透明的堡垒主机接入时要修改网络拓扑结构,内部子网用户要更改网关,路由器要更改路由配置等,而且路由器和子网用户都需要知道堡垒主机的IP,一旦整个子网的IP地址改动了,针对堡垒主机的相关改动相当烦人。透明接入技术的实现完全克服了以上的种种缺陷,同时,具有透明代理功能的堡垒主机对路由器和子网用户而言是完全透明的,也就是说,他们根本感觉不到防火墙的存在,犹如网桥一样。透明接入的关键技术是ARP(AddressResolutionProtocol,即地址解析协议)代理和路由转发。2.4.4动态监视技术它采用了一个检测模块(一个在网关上执行网络安全策略的软件引擎)。检测模块在不影响网络正常工作的前提下,采用抽取相关数据的方法对网络通信的各层实施监测,抽取部分数据(状态信息)并动态地保存起来,作为以后制定安全决策的参考。检测模块支持多种协议和应用程序,并可以很容易地实现应用和服务的扩充。2.4.5适应代理技术自适应代理技术是根据用户定义的安全规则,动态适应传送中的分组流量。它允许用户根据具体需求,自己定义防火墙策略,而不会牺牲速度或安全性.如果安全要求高,那么最初的安全检查仍在应用层进行,保证实现传统代理防火墙的最大安全性;而一旦代理明确了会话的所有细节,那么其后的数据包就可以直接经过速度快得多的网络层。这样一来,自适应代理防火墙就拥有了和传统代理防火墙一样的安全性,同时又具有了分组状态检查防火墙的速度。NAT技术研究NAT是一个IETF标准,允许一个机构以一个地址出现在Internet上。NAT将每个局域网节点的地址转换成一个IP地址,反之亦然。它也可以应用到防火墙技术里,把个别IP地址隐藏起来不被外界发现,使外界无法直接访问内部网络设备,同时,它还帮助网络可以超越地址的限制,合理地安排网络中的公有Internet地址和私有IP地址的使用。即基本的NAT实现的功能很简单,在子网内使用一个保留的IP子网段,这些IP对外是不可见的。子网内只有少数一些IP地址可以对应到真正全球唯一的IP地址。NAT(NetworkAddressTranslators)网络地址转换:网络地址转换是在IP地址日益缺乏的情况下产生的,它的主要目的就是为了能够地址重用。3.1基于UDP的防火墙穿透技术3.1.1NAT技术NAT技术有三种类型:静态NAT(StaticNAT)、动态地址NAT(PooledNAT)、网络地址端口转换NAPT(Port-LevelNAT)。其中静态NAT设置起来最为简单和最容易实现的一种,内部网络中的每个主机都被永久映射成外部网络中的某个合法的地址。而动态地址NAT则是在外部网络中定义了一系列的合法地址,采用动态分配的方法映射到内部网络。NAPT则是把内部地址映射到外部网络的一个IP地址的不同端口上。根据不同的需要,三种NAT方案各有利弊。静态转换是最简单的一种转换方式,它在NAT表中为每一个需要转换的内部地址创建了固定的转换条目,映射了唯一的全局地址。内部地址与全局地址一一对应。每当内部节点与外界通信时,内部地址就会转化为对应的全局地址。动态地址NAT只是转换IP地址,它为每一个内部的IP地址分配一个临时的外部IP地址,主要应用于拨号,对于频繁的远程联接也可以采用动态NAT。当远程用户联接上之后,动态地址NAT就会分配给他一个IP地址,用户断开时,这个IP地址就会被释放而留待以后使用。网络地址端口转换NAPT(NetworkAddressPortTranslation)是人们比较熟悉的一种转换方式。NAPT普遍应用于接入设备中,它可以将中小型的网络隐藏在一个合法的IP地址后面。NAPT与动态地址NAT不同,它将内部连接映射到外部网络中的一个单独的IP地址上,同时在该地址上加上一个由NAT设备选定的UDP端口号。3.2网络地址和端口转换(NAPT)这是最普遍的情况,网络地址/端口转换器检查、修改包的IP地址和TCP/UDP端口信息,这样,更多的内部主机就可以同时使用一个公网IP地址。当一个内部网主机通过NAT打开一个“外出”的TCP或UDP会话时,NAPT分配给这个会话一个公网IP和端口,用来接收外网的响应的数据包,并经过转换通知内部网的主机。这样做的效果是,NAPT在[私有IP:私有端口]和[公网IP:公网端口]之间建立了一个端口绑定。端口绑定指定了NAPT将在这个会话的生存期内进行地址转换任务。这中间存在一个这样的问题,如果P2P应用程序从内部网络的一个[私有IP地址:端口]对同时发出多条会话给不同的外网主机,那么NAT会怎样处理呢?这又可以分为锥形NAT(CONENAT)与对称NAT(SYMMTRICNAT)两大类来考虑:3.2.1锥形NAT(为什么叫做锥形呢?终端和外部服务器都通过NAT分派的绑定地址对来传送信息,就象一个漏斗一样,筛选并传递信息)。当建立了一个[私有IP:端口]-[公网IP:端口]端口绑定之后,对于来自同一个[私有IP:端口]会话,锥形NAT服务器允许发起会话的应用程序重复使用这个端口绑定,一直到这个会话结束才解除(端口绑定)。例如,假设ClientA通过一个锥形NAT同时发起两个外出的连接,它使用同一个内部端口(:1234)给公网的两台不同的服务器,S1和S2。锥形NAT只分配一个公网IP和端口(1:62000)给这个两个会话,通过地址转换可以确保Client使用端口的“同一性”(即这个Client只使用这个端口)。而基础NATs和防火墙却不能修改经过的数据包端口号,它们可以看作是锥形NAT的精简版本。进一步分析可以将CONENAT分为全双工锥形NAT(FULLCONE),受限制锥形NAT(RESTRICTCONE)与端口受限锥形NAT(PORTRESTRICTCONE)三大类,以下是详细论述:(1)全双工锥形NAT当内部主机发出一个“外出”的连接会话,就会创建了一个公网/私网地址,一旦这个地址对被创建,全双工锥形NAT会接收随后任何外部端口传入这个公共端口地址的通信。因此,全双工锥形NAT有时候又被称为"混杂"NAT。(2)受限制锥形NAT受限制的锥形NAT会对传入的数据包进行筛选,当内部主机发出“外出”的会话时,NAT会记录这个外部主机的IP地址信息,所以,也只有这些有记录的外部IP地址,能够将信息传入到NAT内部,受限制的锥形NAT有效的给防火墙提炼了筛选包的原则——即限定只给那些已知的外部地址“传入”信息到NAT内部。(3)端口受限锥形NAT端口受限制的锥形NAT,与受限制的锥形NAT不同的是:它同时记录了外部主机的IP地址和端口信息,端口受限制的锥形NAT给内部节点提供了同一级别的保护,在维持端口“同一性”过程中,将会丢弃对称NAT传回的信息。3.2.2对称NAT对称NAT,与ConeNAT是大不相同的,并不对会话进行端口绑定,而是分配一个全新的公网端口给每一个新的会话。还是上面那个例子:如果ClientA(:1234)同时发起两个"外出"会话,分别发往S1和S2。对称NAT会分配公共地址1:62000给Session1,然后分配另一个不同的公共地址1:62001给Session2。对称NAT能够区别两个不同的会话并进行地址转换,因为在Session1和Session2中的外部地址是不同的,正是因为这样,Client端的应用程序就迷失在这个地址转换边界线了,因为这个应用程序每发出一个会话都会使用一个新的端口,无法保障只使用同一个端口了。在TCP和UDP通信中,(到底是使用同一个端口,还是分配不同的端口给同一个应用程序),锥形NAT和对称NAT各有各的理由。当然锥形NAT在根据如何公平地将NAT接受的连接直达一个已创建的地址对上有更多的分类。这个分类一般应用在UDP通信(而不是TCP通信上),因为NATs和防火墙阻止了试图无条件传入的TCP连接,除非明确设置NAT不这样做。4基于UDP协议P2P通信的实现方式及原理UDP是简单的传输协议,是无连接的协议,不提供可靠性措施。但是UDP的传输效率非常高。它与TCP协议不同,传输数据之前不需要建立一种虚拟的连接关系,只需知道对方的IP地址和UDP端口,就可以进行数据传输。在P2P网络中,采用UDP协议进行通信的关键是如果对主机进行定位和寻址。但有时候无法完成主机的定位和寻址,此时就得采取其他方式实现主机间的通信。4.1UDP协议的论述4.1.1UDP协议的简单论述UDP协议(UserDatagramProtocol),即用户数据报协议,是定义用来在互连网络环境中提供包交换的计算机通信的协议。它是Internet上广泛采用的通信协议之一。UDP协议直接位于IP协议的顶层,属于传输层协议,它提供向另一用户程序发送信息的最简便的协议机制。此协议是面向操作的,未提供提交和复制保护。UDP协议的主要作用是将网络数据流量压缩成数据报的形式。一个典型的数据报就是一个二进制数据的传输单位。每一个数据报的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。UDP报头由4个域组成,其中每个域各占用2个字节,具体如下:UDP协议使用端口号为不同的应用保留其各自的数据传输通道。UDP和TCP协议正是采用这一机制实现对同一时刻内多项应用同时发送和接收数据的支持。数据发送一方(可以是客户端或服务器端)将UDP数据报通过源端口发送出去,而数据接收一方则通过目标端口接收数据。有的网络应用只能使用预先为其预留或注册的静态端口;而另外一些网络应用则可以使用未被注册的动态端口。因为UDP报头使用两个字节存放端口号,所以端口号的有效范围是从0到65535。一般来说,大于49151的端口号都代表动态端口。
数据报的长度是指包括报头和数据部分在内的总的字节数。因为报头的长度是固定的,所以该域主要被用来计算可变长度的数据部分(又称为数据负载)。数据报的最大长度根据操作环境的不同而各异。从理论上说,包含报头在内的数据报的最大长度为65535字节。不过,一些实际应用往往会限制数据报的大小,有时会降低到8192字节。
UDP协议使用报头中的校验值来保证数据的安全。校验值首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。如果某个数据报在传输过程中被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的校验计算值将不会相符,由此UDP协议可以检测是否出错。4.1.2UDP和TCP协议的区别UDP和TCP协议的主要区别是两者在如何实现信息的可靠传递方面不同。TCP协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才继续传送其它信息,否则将一直等待直到收到确认信息为止。
与TCP不同,UDP协议并不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示。因此,通常人们把UDP协议称为不可靠的传输协议。
相对于TCP协议,UDP协议的另外一个不同之处在于如何接收突发性的多个数据报。不同于TCP,UDP并不能确保数据的发送和接收顺序。与TCP协议不同,UDP协议是一个无连接协议,发送端和接收端不建立连接;UDP协议不提供数据传送的保证机制,可以说它是一种不可靠的传输协议;UDP协议也不能确保数据的发送和接收顺序,实际上,这种乱序性很少出现,通常只是在网络非常拥挤的情况下才可能发生。既然UDP协议有着如此多的缺点,那么它存在的意义何在?其实正是由于UDP协议的这些缺点,才使得它具有许多TCP协议所望尘莫及的优势。TCP协议植入的各种安全保障功能加大了执行过程中的系统开销,使速度受到严重的影响;而UDP不提供信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大地提高了执行速度。UDP协议执行速度快,适合视频、音频、文件等大规模数据的网络传输。UDP协议不存在TCP协议中的服务端和客户端之分,相对于TCP协议的C/S模型,UDP协议的通信模型更为对称。在UDP协议网络通信中,根据功能的不同,可以划分为发送端和接收端,但这种划分是一种动态的划分,而不是绝对的,同一个套接字在某一时刻发送数据,那么就是发送端,而在另一时刻接收数据,那么就是接受端。也就是说,同一套接字既可以是发送端也可以是接收端。4.2P2P概述P2P即PeertoPeer,称为点对点连接或对等网络,是一种全新的互联网络技术,它将传统的以服务器为中心的互联网应用模式提升为以用户为中心的对等模式。P2P使得网络上的沟通变得容易、更直接共享和交互。使用P2P技术人们可以直接连接到其他用户的计算机,而不是像过去那样连接到服务器去浏览与下载。P2P技术(PeertoPeer),也称为对等网络技术,是一种网络结构的思想。P2P与目前网络中占据主导地位的客户端/服务器结构(Client/Server)的一个本质区别是,整个网络结构中不存在中心节点(或中心服务器)。在P2P结构中,每一个节点(peer)大都同时具有信息消费者、信息提供者和信息通讯三方面的功能。P2P网络中,每一个节点所拥有的权利和义务都是对等的。但在实际应用中,没有服务器的方案很少见,往往采用混合方案,即,应用软件的索引编写和搜索机制大多采用客户机/服务器模式,而数据传输机制大多采用P2P方式,即不同客户间可以不经过服务器而直接传输数据。P2P引导网络计算模式从集中式向分布式偏移,也就是说网络应用的核心从中央服务器向网络边缘的终端设备扩散:服务器到服务器、服务器到PC机、PC机到PC机,PC机到WAP手机……所有网络节点上的设备都可以建立P2P对话。这使人们在Internet上的共享行为被提到了一个更高的层次,使人们以更主动深刻的方式参与到网络中去。4.3基于UDP协议P2P通信的实现方式基于UDP协议P2P通信的实现方式归纳起来有以下几种:4.3.1中继站方式这种方式是最简单的,也是一种比较可靠的P2P通信方式。实现原理如下:位于两个不同NAT(NATA,NATB)之后的两台主机A和主机B,都已经各自发起UDP连接到一个众所周知的、具有合法公网IP地址的服务器S上。由于主机A和主机B都位于NAT之后,没有合法的公网IP或固定的UDP端口来直接建立两者间的通讯。所以两者间的通讯由服务器S来中转完成。如图(4.2):服务器S服务器SNATANATB主机A主机B图4.2:中继站方式实现P2P通信Fig4.2:Relaystationstoachievepeer-to-peercommunication这种通信方式的最大优势是只要主机A和主机B与服务器建立连接后,通讯可以永远工作下去。但是这种通信方式消耗了服务器的处理能力和网络带宽,同时主机A和主机B之间的信息等待时间加长了。4.3.2反向连接(逆向连接)方式这种方式仅工作在只有一个主机在NAT后面,另外的主机拥有合法公网IP地址。实现原理如下:假设主机A在NAT后面,主机B拥有合法的公网IP地址。主机A有私网IP地址,并且应用程序使用UDP端口1234。主机A已经和公共IP地址为1端口1235的服务器S建立一个连接。具有公网IP地址(1)的NATA已经分配端口号62000为A与S的会话提供临时的公共端点地址:因此服务器S认为主机A的IP地址为1,端口为62000。然而主机B有他自己的固定IP地址(),并且应对于P2P用程序在B的1234端口接受UDP连接(如图4.3)。服务器S服务器S1:1235NATA1:62000主机A:1234主机B:1234图4.3:反向连接方式实现P2P通信Fig4.3:ReverseconnectingmeansP2PCommunications现在假设主机B想要发起一个与主机A的P2P的通讯会话。B可能首先接通主机A的地址,或者在主机A的私网地址:1234,或者在A的公网地址1:62000。但是以这两种情况,连接将会失败。以第一种情况,直接连接到IP地址将会完全被网络终止,因为不是一个公网的IP地址。以第二种情况,从B发出的UDP请求将会直接的到达NATA端口62000,但是NATA通常将会拒绝连接请求,因为NATA此时仅仅允许向外发出的连接。在试图建立一个直接到A的连接失败后,主机B能够通过服务器S来中转一个请求到主机A,使A发出一个“反向的”连接请求到主机B。主机A在收到这个要求后,开始发起一个到B的公网IP地址和端口号上UDP连接。这样A与B就可以相互建立连接了。目前大部分的P2P系统都采用这种方式。这种工作方式的主要局限性就是仅适合通讯点中的一方在NAT的后面:如果通讯点都在NAT后面,那么这种方式就行不通了。因此反向连接不是一种通用的解决问题方法,也是不推荐的通信策略。4.3.3UDP穿孔技术UDP穿孔技术(UDPHolePunching)是根据建立好的NAT协议来允许P2P应用程序“Punchholes”(穿孔)通过NAT和防火墙并且相互之间建立直接的连接技术,这种工作方式更适用于基于UDP协议的P2P通信。在应用这种技术时,我们首先要考虑两种情景。第一种情况,普遍情况,P2P通讯的两个主机位于不同的NAT后面。第二种情况,两个主机实际上位于同一个NAT的后面,但是(主机)未必知道这种情况。(1)主机位于不同的NAT后面假设两个主机A和B都有私网IP地址并且位于不同的NAT后面。P2P应用程序运行在主机A和B以及服务器S上,各自使用UDP端口1234。A和B已经各自与服务器S建立了UDP通讯会话,NATA分配A的公共UDP端口62000用于A与S的会话,NATB分配B的公共UDP端口31000用于B与S的会话(如图4.4)。服务器S服务器S1:1234NATAA-S1:62000NATBB-S:31000主机A:1234主机B:1234图4.4:主机位于不同的NAT后面Fig4.4:MainframelocatedindifferentbehindNAT现在假设主机A想要与主机B直接建立一个UDP会话。假如A简单的发送UDP请求到B的公共地址:31000,那么NATB通常将会丢弃这个消息,因为源地址和端口号与和他所发起的外部会话建立连接的目的地址和端口号不匹配。类似的,如果B简单的发送UDP请求到A的公共地址,那么NATA也将丢弃这个消息。假设A发送UDP请求到B的公共地址,同时通过服务器S转播一个消息到达B,消息内容是要求B发送UDP请求到A的公共地址。A的往外直接到达B的公共地址(:31000)的消息将会使得NATA在A的私有地址和B的公共地址之间建立一个新的通讯会话,同时B的消息(A通过S要求B发送的)到达A的公共地址(1:62000)将会使得NATB在B的私有地址和A公共地址之间建立一个新的通讯会话。一旦新的UDP会话在每一方向上都建立成功,那么主机A和B就能够相互直接通信而不再需要借助服务器S了。(2)主机位于相同的NAT后面现在考虑两个主机(可能不知道)位于相同的NAT后面的情况,也就是两个主机存在于相同的私网地址空间中。假设主机A已经与服务器S建立了一个UDP会话,公共NAT为该会话分配公共端口62000。主机B也已经与服务器S建立了一个UDP会话,公共NAT为该会话分配公共端口620001(如图4.5)。服务器S服务器S1:1235NATA-S1:62000B-S1:62001主机A:1234主机B:1234图4.5:主机位于相同的NAT后面Fig4.5:MainframeatthesamebehindNAT假设A和B使用UDP穿孔技术作为方案,使用服务器S作为引导来建立一个通讯通道。那么A和B就可以互相知道对方的公共IP地址和端口号,并且可以相互向公共地址上发送消息。这两个主机若要能够以这种方式相互通话,只有在NAT允许内部的网络主机能够和内部的其他主机进行UDP会话的情况下才可以实现。即使NAT支持这种解释和转寄的步骤,很明显在这种环境下是不必要的,反而会增加A和B之间的对话反应时间,同时也增加NAT的负担。4.3.4固定端口映射现有的NAT大体上可分为SNAT(SymmetricNAT)和CNAT(ConeNAT)两种类型。CNAT在把私网IP和端口映射为公网IP和端口后将维持不变,即从一个给定的部分(私有IP地址和UDP端口号)到一个解析的部分(公共IP地址和UDP端口号)维持着一个单独的、固定的映射。而SNAT恰恰相反,私网IP和端口到公网IP和端口的映射是变化的,每一个新的连接都会分配新的映射。若要使用UDP穿孔技术时采用上述方案要注意:它仅工作在所有的NAT都是CNAT的情况下。可喜的是现在大所数NAT都是CNAT。因此基于UDP穿孔技术的上述方案在P2P通讯的实施中是非常可行的,而且是应用最广的。服务器S服务器S1:1234NATAA-S1:62000A-B1:65001NATBB-S:31000B-A:34001主机A:1234主机B:1234图4.6:固定端口映射Fig4.6:Fixedportmapping4.3.5STUN(SimpleTraversaofUDPthroughNATs)STUN即UDP对NAT的简单穿越方式,是一种由IETF研制的UDP流协议穿透NAT的协议。假设节点S和A分别为STUNSERVER和位于NAT之后的STUNCLIENTA向NAT外的S通过UDP发送请求STUN消息,S收到请求消息后产生响应消息,响应消息中携带请求消息的源端口(即A在NAT上对应的外部端口)。响应消息通过NAT发送给A,A通过响应消息中的内容得知NAT设备的类型及其在NAT上对应的外部地址,并且将其填入以后呼叫协议的UDP负载中,告知对端,本端的RTP接收地址和端口号为NAT外的地址和端口号。由于通过STUN协议已在NAT上预先建立媒体流的NAT映射表项,故媒体流可顺利穿越NAT。该方法最大的优点是无需对现有NAT设备做任何改动,缺点在于需要应用程序支持STUNCLIENT的功能。4.3.6UDP端口号预测(UDPportnumberforecast)采用这种方法需要节点通信时预测NAT的端口号,并且应用程序需预先知道对方节点的NAT是什么类型,这样就增大了算法的复杂度,也降低了其在真实网络环境中的普适性。有许多因素会导致这个方法失败:如果这个预测的新端口恰好已经被一个不相关的会话所使用,那么NAT就会跳过这个端口号,这个连接就会宣告失败;如果两个NAT有时或者总是不按照顺序来生成新的端口号,那么这个方法也是行不通的。只要任何一个NAT方包含以上碰到的问题,这个方法变得如此脆弱而且不堪一击。因此,不推荐使用这个方法。4.4采用UDP打洞技术穿透NAT原理介绍通过上述分析可知,UDP打洞是一种穿透NAT的有效办法,在此以相对复杂的情况(主机位于相同的NAT后面)为例采用打洞技术实现NAT的穿透。实现两个内网的主机通讯的两边都无法主动发出连接请求,谁也不知道谁的公网地址,那我们如何来打这个洞呢?我们需要一个服务器来联系这两个内网主机。如图(4.7)所示:ServerServerSNATA外网IP:内网IP:NATB外网IP:6内网IP:ClientA0:4000ClientB0:40000图4.7:P2P软件穿透NATFig4.7:P2PsoftwarepenetratesNAT首先,ClientA登录服务器,NATA为这次的Session分配了一个端口60000,那么ServerS收到的ClientA的地址是:60000,这就是ClientA的外网地址了。同样,ClientB登录ServerS,NATB给此次Session分配的端口是40000,那么ServerS收到的B的地址是6:40000。此时,ClientA与ClientB都可以与ServerS通信了。如果ClientA此时想直接发送信息给ClientB,那么他可以从ServerS那儿获得B的公网地址6:40000,是不是ClientA向这个地址发送信息ClientB就能收到了呢?答案是不行,因为如果这样发送信息,NATB会将这个信息丢弃(因为这样的信息是不请自来的,为了安全,大多数NAT都会执行丢弃动作)。现在我们需要的是在NATB上打一个方向为(即ClientA的外网地址)的洞,那么ClientA发送到6:40000的信息,ClientB就能收到了。当然这个打洞的命令是由ServerS来发的。总结一下这个过程:如果ClientA想向ClientB发送信息,那么ClientA发送命令给ServerS,请求ServerS命令ClientB向ClientA方向打洞,然后ClientA就可以通过ClientB的外网地址与ClientB通信了。5基于UDP穿透NAT的视频传输的实现视频传输采用客户机/服务器模式,服务器选用一台PC,服务器和客户机软件的开发工具为VisualC++6.0,Microsoft公司的VisualC++编程语言应用灵活功能强大,VC++语言有着对底层操作的明显优越性,并对网络编程有强大的支持。此次视频传输是基于UDP的NAT穿透,不考虑数据在传输过程中丢失现象,采用客户机/服务器模式可以充分共享服务器资源,如CPU资源、存储资源等,并且能够充分发挥服务器的强大处理能力。作为提供客户机/服务器模式上互连环境,网络系统的资源利用率同样可以容易达到理想的程度。因为在客户机/服务器之间传递的信息只是服务请求和服务结果,网络中没有必要传输大量数据或文件内容,可以以大大地节省通信带宽,减少网络负荷。5.1服务器实现服务器端主要在此次实现中主要是记录客户端的名字以及端口号,方便客户端进行查询。如图5.1所示:图5.1服务器未开启Fig5.1Notopenserver图5.2服务器开启Fig5.2OpenServer5.2客户端实现客户端从服务器端获得对方的端口后,输入IP和对方的端口号就可以直接进行视频传输。如图所示:图5.3客户端未连接界面图Fig5.3Clientwasnotconnectedtothemapinterface图5.4客户端1显示图Fig5.4Client1Illustration图5.5客户端2显示图Fig5.5Client2Illustration5.3影响基于UDP穿透NAT的关键因素5.3.1NAT设备的种类由于各种原因现有NAT设备并没有统一规范标准,UDP打洞的实现有赖于NAT设备生产厂商,目前约有82%的NAT设备支持基于UDP打洞技术。STUN协议将现有NAT粗略分为4种类型,即FullCone、RestrictedCone、PortRestrictedCone和Symmetric。前三种统称为ConeNAT,有一个共同点:从同一个内部地址和端口出来的数据包,NAT都将它转换成同一个外部地址和端口。但是Symmetric有点不同,具体表现在:只要是从同一个内部地址和端口出来,且到同一个外部目标地址和端口,则NAT也都将它转换成同一个外部地址和端口。但如果从同一个内部地址和端口出来,是到另一个外部目标地址和端口,则NAT将使用不同的映射,转换成不同的端口(外部地址只有一个,故不变)。而且和PortRestrict2edCone一样,只有曾经收到过内部地址发来包的外部地址,才能通过NAT映射后的地址向该内部地址发包。根据BryanFord的分析,可以得出:只要两侧NAT都属于ConeNAT,即可实现NAT的穿透。5.3.2UDP连接空闲时间UDP是无连接的协议,NAT对UDP传输的映射是动态的,大多数NAT只是简单地与UDP连接空闲时间相联系,也就是说经过一段时间之后,如果没有数据通过映射关系会自动解除,即UDP连接会被关闭。而不幸的是对于这
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 战略合作委托代理运输合同
- 销售代理合同模板
- 标准个人居间代理合同模板
- 超市兼职员工劳动合同范本
- 智能家居定制合同
- 技术服务合同意向协议书
- 食品进出口合同范本
- 家具维修与家庭生活习惯改变考核试卷
- 地震勘探仪器的采购与供应链管理策略考核试卷
- 木地板行业人力资源管理与培训考核试卷
- 生物产品检验检疫基础知识单选题100道及答案
- 江苏省中职《英语》学业水平考试备考试题集(含历年真题)
- Unit 3 Environmental Protection Reading and Thinking 选择性必修第三册
- 2025年合伙型公司新合伙人加入协议
- 小学道德与法治课堂教学中提升学生核心素养策略
- 2025年安全员之C证(专职安全员)考试题库
- 中水回用项目可行性研究报告
- 2025城市商铺买卖合同书
- 基于主题式教学法的初级汉语综合课《我的低碳生活》教学设计
- 微信公众号运营及推广合同
- 2025年春新北师大版物理八年级下册课件 第六章 质量和密度 第一节 物体的质量及其测量
评论
0/150
提交评论