1、第8章 P2P原理与应用P2P概述P2P网络体系P2P增强机制P2P核心技术NAT及其穿透技术1 P2P网络概念l计算机网络 因特网 Internetl网络资源和内容的中心化到边缘化的转变;l从C/SP2Pl P2P=分布式的极端(since 1956年)实线表示物理连接虚线表示逻辑连接计算模式演变OVERLAY网络loverlay networks(重叠网、覆盖网、应用层网络)在现有网络体系结构上新加一层建立一个使用已有的Internet传输的虚拟网络Internet曾经是一个部署在电话网上的重叠网络l挑战如何创新和部署 at scaleOVERLAY网络结构P2P网络定义lIntel工作组
2、:通过系统之间直接交换来共享计算机资源和服务的一种应用模式;l通俗理解:以非集中方式使用分布式资源来完成关键任务的一类系统和应用。资源包括计算能力、存储能力、数据内容、网络带宽和其它资源等关键任务可能是分布式计算、数据/内容共享,通信和协同、或平台服务P2P网络模型 Overlay Network routing table peer 1 Internet:Supporting Netork A Generic Topological Model of P2P Systems routing and locating algorithm Data Storage Data Cache rout
3、ing table peer 2 routing and locating algorithm Data Storage Data Cache routing table peer n routing and locating algorithm Data Storage Data Cache P2P网络特点lP2P:Peer to Peer对等网络peer结点(对等机)在行为上是自由的任意加入、退出,不受其它结点限制,功能上是平等的不管实际能力的差异连接上是互联的直接/间接,任两结点可建立逻辑链接,对应物理网上的只是一条IP路径l对等机依靠所在的P2P网络来查找数据对象和定位其他对等机。一旦
4、定位了响应查询请求的对等机后,就与相应的对等机直接建立传输层连接,通过相应应用层协议从响应对等机中下载数据对象。数据对象的传送不再经过P2P网络进行。P2P应用l文件共享Napster,BitTorrent,Gnutella,eDonkey/eMule,l多媒体传输Skype,AnySee,PPlive,QQ直播l实时通信QQ,PoPo,MSN Messenger,ICQ,Google Talkl协同工作:Groove,l分布式数据存取:CFS,PAST,OceanStore,分布式对等计算:GPU,Entrpia,SETIHomelP2P搜索引擎:PandangoP2P网络优势l提高网络工作
5、效率l充分利用网络带宽l开发了每个网络结点的潜力l具有高可扩展性l良好的容错性P2P衍生问题l知识产权问题l黑客和病毒入侵问题l敏感信息的泄漏问题l带宽消耗问题P2P网络发展历程(一)l第一阶段:19992000,应用研究1999年,18岁的Shawn Fanning发布Napster软件,为第一代集中式P2P体系的代表,因版权问题于2001年关闭;其后涌现了Gnutella,Freenet,KaZaA,BitTorrent,eDonkey/eMule等2000年,因担心版权问题,第一个纯分布式无结构P2P网络Gnutella(第二代无结构P2P网络的代表)公开约一个半小时后很快关闭,但其思想
6、却广泛流传下来。2000年8月,出版商OReilly组织P2P峰会,诠释P2P的意义、描述P2P的作用、消除P2P的负面影响Intel成立P2P工作组,02年微软发布基于.NET基础架构的P2P安全软件包;IBM、HP等也利用P2P技术进行开放存储与网络共享打印等P2P网络发展历程(二)l第二阶段:20012003,学术商用2001年,产生结构化structured P2P体系,Chord(第三代结构化P2P网络的代表),CAN,Tapestry,Pastry,CFS,OceanStoreIEEE成立P2P专业会议,ACM发表经典论文学术团体及技术组织成立或完善了专门的P2P研究组,MIT,U
7、.C.Berkeley,Microsoft/Rice Univ,Stanford;2003年实质进入一个稳定期,在解决了P2P网络最核心的问题后,学术界将重点放在其性能增强,安全性、实用系统开发上P2P网络发展历程(三)l第三阶段:2004迄今,共识实用P2P网络的主要问题已解决,核心机制、整体架构已形成,在重大问题形成共识的基础上,追求更细节、更高效、更实用,试图整合不同的P2P应用系统(类似web推出后的应用)05年底,Springer在其LNS(Lecture Notes in Computer Science)系列中出版Peer-to-peer system and applicati
8、on,提供了对P2P领域权威、全面的总结与展望。P2P目前更侧重应用拓展以及与其它领域的研究结合2 P2P网络体系l集中目录式P2P网络(中心化拓扑)中心服务器提供对象索引服务l全分布式无结构P2P网络分布/松散的结构l全分布式结构化P2P网络准确、严格的结构,高效地定位结点和数据集中目录式P2P网络lNapsterP2P网络的先驱,世界上第一个应用性P2P网络,集中目录式P2P体系最杰出的代表Napster体系包括对等主机结点和服务器,服务器维护所有Napster用户的共享文件索引;监控系统中每个用户的状态(连接带宽、连接时间、在线状态)NAPSTER工作流程NAPSTER工作特点l定位效率
9、高,路由跳数O(1)l不考虑结点异构性连接带宽、时延、连接时间、共享文件数等l许多用户不报告或者故意错误地报告它的连接带宽给服务器,不利于整个网络的高效工作。l“Free Riding”(搭便车严重)2040%用户(自私结点)几乎从来不提供文件共享而只是下载;大约1%的结点支撑Napster文件共享NAPSTER优缺点l优点维护简单,资源发现效率高l缺点单点故障扩展性差组织管理过于松散,无义务要求版权问题BTlBT(BitTorrent):Napster的进一步发展,架构基本相同,但文件分片,使用散列函数映射l多点下载,用户有上传义务,源码公开l文件或目录共享者首先要为该文件或目录生成一个.t
10、orrent文件,即“种子”文件。然后把这个“种子”文件上传到BT服务器,等待别的用户来下载。l需要下载某个文件的用户首先要到BT服务器上找到该文件的一个“种子”文件,然后根据“种子”文件提供的信息进行下载。l.torrent文件本质上是文本文件,包含Tracker信息和文件信息。Tracker信息关注Tracker服务器地址和针对Tracker服务器的设置,文件信息是根据对目标文件的计算生成的。将提供下载的文件虚拟分成大小相等的块(如256KB),并把每个块的索引信息和Hash验证码写入.torrent文件中BT种子文件BT下载BT下载损伤硬盘吗?l硬盘的工作原理磁头读写盘片上的磁道,由于网
11、络吞吐量低于磁盘吞吐量,持续低速下载(上传)带来频繁的读写操作,盘片可能会由于过热而损坏l磁盘缓存技术使用内存缓存数据写数据时,仅当缓存满后再整体写入硬盘(下载)读数据时,仅当缓存中没有时才从硬盘读数据,且整块读入,减少磁盘操作(上传)内存是有限资源,缓存在650MB即可l结论:P2P下载不伤硬盘全分布式无结构P2P网络l典型系统Gnutella、KaZaA、eDonkey/eMule、FreenetlGnutellaMP3播放软件WinAmp的发明人Justin Frankel、Tom Pepper开发版权问题,Gnutella软件上线一个半小时后被关闭;其纯分布式思想和代码被复制、改写、继
12、承Gnutella不是特指某一款软件,而是指遵守Gnutella协议的网络以及客户端软件的统称。基于Gnutella协议的客户端软件有Shareaza、LimeWire和BearShare等Gnutella协议0.6版加入了超级结点UltrapeerGNUTELLA运行原理GNUTELLA洪泛问题l优势无需中心服务器l缺陷系统开销过大l折衷方案有限深度洪泛(设置IP的TTL上限)不保证一定查询到已有文件GNUTELLA主要消息l组成员消息:PING,PONG新结点加入时广播PING消息探测其它结点是否仍然存在结点收到PING消息后,可以决定是否回播PONG消息,以及是否将PING转发给邻居l查
13、询消息:QUERY,QUERY RESPONSEQUERY消息用来查询文件,包含查询内容与最小响应速度等RESPONSE消息包含文件下载的必须信息,如IP地址、端口号、带宽信息及该结点的nodeID等,沿QUERY消息路径回播l文件传输消息:GET,PUSH结点收用GET消息请求获得文件对处于防火墙后因而不能直接响应文件请求的结点,使用PUSH消息请求防火墙后的文件拥有者主动建立到自己的连接GNUTELLA消息交互lGnutella网上的连接由每个peer保存的“邻居结点”信息确定,有一个邻居结点即对应有一条边。l新结点加入时,必须首先连接到“众所周知”几乎总是在线的Gnutella结点(称为
14、“自举”结点、“入口结点”)l为了查询文件,peer采用洪泛的方法给它的所有邻居结点发送QUERY消息。收到QUERY消息后,peer首先检查是否有他自己共享的文件与QUERY消息中的查询请求相匹配,如果有就沿着QUERY消息传送过来的路径回播QUERY RESPONSE消息。不管是否有匹配的文件,只要TTL没减到0,peer就会继续将它广播到邻居结点。层次化GNUTELLA网络.super peerflooding query结构化P2P网络l2001年,IEEE成立P2P专业会议、ACM会议专题等l非集中式、结构化的拓扑结构:mesh、ring、d-dimension torus and
15、butterflyl经典结构化P2P网络:Chord、CAN、Tapestry、Pastryl著名学术团体与技术组织成立专门的P2P研究组,如MIT、UC Berkeley、Microsoft、Stanford分布式散列表l采用分布式散列表(Distributed Hash Table,DHT)技术组织网络每个结点按照一定的方式被赋予一个惟一的Node ID;资源对象的名字或关键词通过一个散列函数被映射为128位或160位的散列值,资源对象索引信息存储在Node ID与其散列值相等或相近的结点上。需要查找资源时,采用同样的方法定位到存储该资源索引信息的结点。l优点:在资源管理过程中同时拥有自组
16、织特性、规模的强可缩放特性以及部署的廉价性等等。为规模庞大的资源整合及共享提供了可能性。l缺点:节点仅存在局部视图。缺少权威第三方的控制。不支持模糊查询。基于DHT的P2P网络结点CHORDlChord:简单、优美的带弦环形P2P网络,结构化P2P领域最著名的理论模型,MIT与Berkeley的研究者于2001年正式发表;lChord使用安全散列函数(如SHA-1)为每个网络结点和数据对象分配唯一的IDnodeID=H(node属性),属性可以是结点IP、port、公钥、随机数或它们的组合objectID=H(object属性),属性可以是数据对象的名称、内容、大小、发布者或者它们的组合H是散
17、列函数,SHA系列散列函数的Hash值长度m160,保证ID的唯一性所有结点标识符形成一个环形的node ID空间,范围从0到2160-1所有的结点按照nodeID从小到大顺时针排列在一个环上,结点n的后继是环上紧随n(不等于n)的第一个结点,记做n.successorCHORD结点组织l数据对象索引的存放数据对象k(ObjectID)的索引被分配到环上顺时针方向紧随k(包括与k相等)的第一个结点,该结点称为对象k的后继,记做successor(k)。不同结点上的同名信息将被存在同一结点;l信息的查找当某个用户需要查找名字为name的信息时,向successor(k)发一个请求,要求返回拥有信
18、息name的结点的IP地址。CHORD图例(M=3)n.Successor构成的单向环形链CHORD优化l每个结点保存直接前驱和直接后继,那么请求可以顺时针传递,也可以逆时针传递,可以在两者之间选择一条较短的路径;l每个结点保存一张表,称为finger table,该表有m个条目,编号从1到mlfinger table表的内容l每个条目指向一个真实存在的结点,每个条目有两个字段,结点n中的条目i的值为:n.fingeri.start=n+2i-1(mod 2m)n.fingeri.node=successor(n.fingeri.start)CHORD对象优化查找l在结点n上查找对象k的过程如
19、果k=n存放k信息的结点是n,查找结束;如果nk=n.successor,则存放k信息的结点是n.successor,查找结束;否则,查找n的finger表,找出start值最接近于k的前驱,直接发一请求给相应的结点,请求它继续查找对象查找实例例1:在结点1上查找键值3解:键值介于1和4之间,返回4例2:在结点1上查找键值14解:键值不介于1和4之间,查找14的最直接的前趋,即9,返回条目9对应的地址12,在结点12,它查到键值是介于它和它的后继15之间,于是返回15。例3:在结点1上查找键值16解:键值不介于1和4之间,查找16的最直接的前趋,即9,返回条目9对应的地址12,在结点12,它查
20、到键值对应的后继是20,于是返回20CHORD结点添加l初始化:开始时结点很少,因此通过结点之间直接交换信息建立初始的环和finger表;l添加结点n通过某种方法联系到一个Chord现存结点(通常是众所周知的结点),向该结点询问successor(n)的地址s向s询问它的直接前驱p向s和p申请加入环;s将p+1到n的索引信息转储到n上;初始化n的路由表,并更新网络其他结点的路由表项以反映n的加入。CHORD结点删除l删除结点n将n的信息转储到后继sS的前驱指向n的前驱p;通知p,它的后继变为s更新网络其他结点的路由表项以反映n的离开。lfinger表刷新:定时执行一个后台进程,完成所有结点fi
21、nger表的更新。CHORD性能lChord给每个结点维护一个后继列表,其中保存了该结点在Chord环上的r个后继,典型地取r=O(logN),即使结点失效概率为1/2,仍能在O(logN)的跳数内找到正确的后继。l将结点保存的数据对象复制到所有后继中,可提高数据的可用性、持久性l在Chord定位过程中,如每个中间结点缓存数据对象,可以提高获取数据的速度l定位效率即查询数据对象需要的覆盖网路由跳数为O(logN)l自适应开销即当结点加入或者离开网络时,为了维持网络结构、保持自适应性所需要的消息数为O(log2N)3 P2P网络核心技术l覆盖网拓扑结构l分布式散列表l路由和定位l查询和搜索l动态
22、结点算法l容错性覆盖网拓扑结构l覆盖网拓扑结构对P2P网络的工作性能以及设计机制有决定性作用l典型拓扑结构:星形、随机图、双层、带弦环、树、超立方体、多维空间、蝴蝶、CCC、异或、跳表结构分布式散列表l分布式散列表(DHT是P2P网络的核心设施,提供对于结点、数据对象在覆盖网中的位置映射l数据对象映射的作用在于将其索引信息放到nodelD与objectID最近的结点上,对数据对象的定位需要首先在此结点上找到对象索引lDHT向上层结构化P2P应用提供接口Put(Key,Value):向网络中存储具有标识Key的数据ValueRemote(Key):在网络中删除具有标识Key的数据对象Value=
23、Get(Key):从网络中获取具有标识Key的数据保存在Value中路由与定位l定位”确定结点或数据对象的位置,通过“路由”完成。l路由和定位的方式取决于两个因素:覆盖网拓扑结构、路由表结构l集中式P2P网络的路由和定位方法星型路由,常跳数O(1),路由性能只取决于服务器l无结构P2P网络的路由和定位方法以洪泛法为基础的随机路由,通过TTL限制半径,以减小网络负担,但低效l结构化P2P网络的路由和定位方法本质是:采用分布式、局部性的贪心路由算法,逐步缩小当前结点与目的结点之间的ID差异路由效率都是O(logN)查询和搜素l查询:精确查询(即定位)和模糊查询(即搜索)l无结构网络可以实现精确查询
24、和模糊查询,但效率不高,不保证命中随机走导向搜索,路由消息时尽量选择可能包含相关内容的结点作为下一跳基于相似内容组的搜索,将结点组织到包含相似内容的多个组中,提高查询效率l精确查询是结构化P2P网络的优势,但劣势是无法有效提供模糊查询,是一个开放型课题。动态结点算法l关注三个方面在新结点加入时通知其他结点新成员的到来在旧结点离开时通知其他结点老成员的离去高效合理地检测到结点失效并修复P2P网络l集中式P2P网络的动态结点算法所有处理都由中心服务器完成l无结构P2P网络的动态结点算法(Gnutella)加入:新结点N连接到众所周知的Gnutella结点,通过后者连入网络并获得最初的邻居表;N广播
25、PING消息,收到该消息的结点决定是否回播PONG消息,并将PING广播给它的邻居Peer通过周期性地发送PING消息、回复PONG消息来维护路由表结构化P2P网络动态结点算法l结点加入新结点N以某种方式找到一个网络众所周知结点G,称为“自举结点”N通过G发送以N为目的地的消息,该消息最终到达ID与N最接近的结点Z,N从Z或者从消息路径的每个结点中获取路由表信息以及应由自己负责的数据,之后再做修正和优化,这一步开销最大通知邻居结点更新路由表l结点离开和失效主动离开:通知邻居结点更新路由表并接管数据,结点失效:周期性检测路由表中的邻居;发现失效结点后进行路由表修复;容错性l错误来源包括结点失效、
26、结点负担过重、恶意攻击等l基于冗余的容错机制硬件冗余,增加、升级服务器软件冗余,保存适当的冗余信息,如路由表项冗余或者数据对象复制,提供有效的替代,以空间换取容错l周期性检查容错通过每个结点周期性地检测,及时纠正错误,以时间换取容错l容错定理:结点度至少需要多少才能保证容错?对于一个网络而言,假设其中每个结点失效概率为1/2,那么为了使网络以常数概率保持连通,其中某些结点度必须为(logN),N为网络结点总数4 P2P增强机制l复制与缓存l分片l负载均衡和异构l热点问题l拓扑一致性复制与缓存l复制:复制数据对象索引到多个P2P结点l优点从效率上:有效减少获取对象索引所需走的路由跳数,从而减少时
27、延;从可用性和容错性上:性能增强l缺点过多的副本占用的存储容量大,复制多少份合适?更新困难,一致性维护困难l缓存:技术上与“复制”相同,但目的和效果不同复制”一般是相对持久的,目的既在效率,又在可用和容错。所以,同一个数据对象索引,一般会被复制在与其有密切联系的结点上,即“ID邻近复制”。缓存”一般是临时的,目的只是追求效率,一般数据对象索引会缓存在查询该对象的路由路径上,即“路径缓存”。无结构P2P网络复制方案l均匀复制:所有数据对象复制份数相同l比例复制:数据对象复制的份数正比于其被查询到的概率,越热门的数据复制份数越多l方根复制:数据对象复制的份数正比于它被查询到的概率的平方根l问题:哪
28、种方案好?如何实现?结构化P2P网络复制方案l普遍采用“ID邻近复制”:ID邻近的结点能很快找到;这些结点均匀分布在物理网络中,同时失效的可能性很小,数据可用性高l路径缓存:将数据索引缓存在查询路径上lChord的“后继列表”可帮助实现复制,路径缓存分片l传统的分片方法把一个文件分成多个相等大小的片,将这些分片分散存储或者分开传输,从而获得并发效果l新的分片技术如“冗余编码”除了提高效率外,能以适度的存储开销获得可用性、容错性的大幅提升负载均衡和异构性l负载均衡本质上来源于其分布式散列表l“平均”?“各尽所能”?l网络异构性和结点异构性无结构P2P网络通过使用“超结点+普通结点”的双层结构开发
29、结点的异构性结构化P2P网络如Chord的设计中,采用每个实际的网络结点负责多个“虚拟服务器”的方法,并在某个结点负载过重时把自己的一部分负载转移到负载较轻的结点无结构P2P网络的异构性开发方面很有影响力的模型GIA热点问题l对象索引的热点问题结构化P2P网络中采用路径缓存;l对象的热点问题结构化P2P网络中保存数据对象的结点将它复制到nodeID邻近的结点,同时对获取请求进行“重定向”,告诉获取请求到邻近结点去拿副本;无结构P2P网络通常将数据对象复制或缓存到邻居结点,由于获取请求常常先到达邻居节点,所以在那时就可以发现并直接传送副本给需要的用户。如Gia中的“一跳复制”5 NAT基础lNA
30、T(Network Address Translation)网络地址转换,即改变IP报文中的源或目的地址的一种处理方式;使一个局域网中的多台主机使用少数的合法地址访问外部资源;l优点解决了lP地址不足的问题,节省公有合法IP地址为私网提供了安全保障,提高内部网络的安全性l缺点网络的延迟增大配置和维护的复杂性增大NAT分类l基本NAT:拥有多个公网IP的情形下,将公网IP地址与内网主机进行静态绑定将内部连接映射到外部网络中的一个单独的IP地址上,同时在该地址上加上一个由NAT设备选定的端口号lNAPT(Network Address/Port Translation)NAPT可分两种类型:克隆型
31、NAT和对称型克隆型NAT又分:完全克隆型NAT(Full Cone NAT)、受限克隆型NAT(Restricted Cone NAT)和端口受限克隆型NAT(Port Restricted Cone NAT)。完全克隆型lNAT会将客户机地址X:y转换成公网地址A:b并绑定l任何外部包都可以通过地址A:b送到客户主机的X:y地址上 私网公网X,yA,bMFull ConeNATPS受限克隆型lNAT会将客户机地址X:y转换成公网地址A:b并绑定l只有来自主机P的包才能和主机X:y通信 私网公网X,yA,bMRestricted ConeNATSP,qP,rXX端口受限克隆型私网公网X,yA
32、,bM,nPort Restricted ConeNATSP,qP,rXXlNAT会将客户机地址X:y转换成公网地址A:b并绑定l只有来自主机P,q和M,n的包才能和主机X:y通信 对称型NATlNAT会将客户机地址X:y转换成公网地址A:b并绑定为X:y|A:bP:q lNAT只接受来自P:q的incoming packet,将它转给X:y l每次客户机请求一个不同的公网地址和端口,NAT会新分配一个端口号C,d 私网公网X,yA,bM,nPort Restricted ConeNATSP,qP,rXXC,dNAT类型探测l前提条件有一个公网的Server并且绑定了两个公网IP(IP-1,I
33、P-2)Server做UDP监听S1(IP-1,Port-1),S2(IP-2,Port-2),并根据客户端的要求进行应答待检测的用户可以正常进行UDP通信探测流程图NAT探测步骤(1)l第一步:检测客户端是否有能力进行UDP通信以及客户端是否位于NAT后?客户端建立UDP socket然后向服务器S1发送数据包,要求服务器返回客户端的IP和Port;客户端发送请求后立即开始接受数据包,要设定socket Timeout 300ms,防止无限堵塞,重复这个过程若干次;如果每次都超时,无法接受到服务器的回应,则说明客户端无法进行UDP通信(检测停止);当接收到服务器的回应时,需要把服务器返回的客
34、户端(IP,Port)和客户端socket的(Local IP,Local Port)比较。如果完全相同则客户端不在NAT后,且具有公网IP,可以直接监听UDP端口接收数据进行通信(检 测停止);否则客户端在NAT后要做进一步的NAT类型检测NAT探测步骤(2)l第二步:检测客户端NAT是否是Full Cone NAT?客户端建立UDP socket然后用向服务器S1的(IP-1,Port-1)发送数据包,要求服务器用另一对(IP-2,Port-2)响应客户端的请求;客户端发送请求后立即开始接受数据包,要设定socket Timeout 300ms,防止无限堵塞,重复这个过程若干次。如果每次都
35、超时,无法接受到服务器的回应,则说明客户端的NAT不是一个Full Cone NAT,具体类型有待下一步检测(继续)。如果能够接受到服务器S2(IP-2,Port-2)返回的应答包,则说明客户端是一个Full Cone NAT,这样的客户端能够进行UDP-P2P通信(检测停止)。NAT探测步骤(3)l第三步:检测客户端NAT是否是Symmetric NAT?客户端记下在第一步时服务器S1返回客户端的IP和Port。用同样的方法用一个socket向服务器S2的(IP-2,Port-2)发送数据包要求服务器返回客户端的IP和Port。比 较上面两个过程从服务器返回的客户端(IP,Port),如果两
36、个过程返回的(IP,Port)有一对不同,则说明客户端为Symmetric NAT,这样的客户端无法进行UDP-P2P通信(检测停止)。否则是Restricted Cone NAT,是否为Port Restricted Cone NAT有待检测(继续)。NAT探测步骤(4)l第四步:检测客户端NAT是Restricted Cone NAT还是Port Restricted Cone NAT?客户端建立UDP socket然后向服务器S1的(IP-1,Port-1)发送数据包,要求服务器用IP-1和一个不同于Port-1的端口应答客户端;客户端发送请求后立即开始接受数据包,要设定socket T
37、imeout 300ms,防止无限堵塞.重复这个过程若干次如果每次都超时,无法接受到服务器的回应,则说明客户端是一个Port Restricted Cone NAT如果能够收到服务器的响应则说明客户端是一个Restricted Cone NAT。NAT穿越方式l中继方式l反向连接方式lUDP打洞lTCP打洞中继穿透l前提只能在双方客户端都连接到服务器的时候有效。l缺点服务器耗费的时间、计算量大通信时延大网络带宽资源消耗大l优点适应性强,可以穿越现存的所有NAT设备。反向连接穿透UDP打洞l第一种:两个客户端都位于同一个NAT设备后面,即位于同一个内网中。l第二种:两个客户端分别位于不同的NAT
38、设备后面,分属不同的内网。l第三种:客户端位于两层NAT设备之后,通常最上层的NAT是由ISP网络提供商提供的,第二层的NAT是家用的NAT路由器之类的设备。UDP打洞(1)打洞前打洞中打洞后UDP打洞(2)UDP打洞(3)UDP空闲状态超时问题l UDP转换协议提供的“洞”不是绝对可靠的 多数NAT设备内部都有一个UDP转换的空闲状态计时器,如果在一段时间内没有UDP数据通 信,NAT设备会关掉由“打洞”操作打出来的“洞”,l 解决办法 应用程序需在穿越NAT后设定一个穿越的有效期。有效期内,即使没有p2p数据包需要传输,应用程序为了维持该“洞”必须向对方发送“打洞”维持包。TCP打洞l支持该穿透方式的NAT设备不是太多不是TCP协议问题,而是TCP在实现时提供的API接口问题TCP套接字通常允许套接字与本地端口间1对1绑定l幸运的是,多数操作系统支持TCP套接字重用“SO_REUSEADDR”参数允许应用程序绑定多个套接字到同一个端点(IP,PORT)上。l应用程序实施TCP打洞受制于操作系统对TCP协议的实现过程TCP打洞流程