面向P2P通信的UDP Hole Punching技术研究与实现.docVIP

面向P2P通信的UDP Hole Punching技术研究与实现.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
面向P2P通信的UDP Hole Punching技术研究与实现.doc

  面向P2P通信的UDP Hole Punching技术研究与实现 摘 要 NAT(Netple Traversal of UDP over NATs)以及UDP/TCP Hole Punching等。其中,UDP/TCP Hole Punching技术有效的保持了NAT网络环境的透明性,它不需要了解网络的拓扑信息以及其它特别的软件环境的支持,可以被普通的应用程序实现。实验表明,82%的NAT网络环境支持UDP Hole Punching技术,虽然其引入了冗余的消息传递以及延时,但不失为一个优秀的NAT穿透解决方案。 2 UDP Hole Punching技术 研究 UDP Hole Punching的主要思想是:利用一个任何客户端都可达的服务器,在服务器上事先存储、维护客户端的UDP公用端点地址,当双方需要通信时,可以通过服务器的“介绍”获取对方的端点地址,建立“直接”的连接。 图1是一个具有NAT设备的简单网络拓扑图,其中C1,C2位于不同的私有网络中,无法直接通信,但都可以访问Server。下面分析UDP Hole Punching的基本流程: (1)C1向服务器发出请求,要求与C2建立连接。 (2)服务器向C1,C2发送对方的公用端点地址,公用端点地址是服务器根据C1,C2发送的UDP数据报的源端点地址“观察”到的,即NAT设备“翻译”后的端点地址。 (3)C2接收到C1 的端点地址后,考虑到其所处网络的NAT设备可能具有防火墙功能,利用C1的端点地址作为目的地址,发送“穿洞”UDP数据报,该数据报使得C2网络的NAT设备允许后续的以C1端点地址为源地址的UDP数据报进入其内部网络,像是在NAT设备的防火墙上“穿洞”,对以C1端点地址为源地址的UDP数据报开放“入口”。 (4)C1接收到C2 的端点地址后,以C2的端点地址为目的地址发送“探测”UDP数据报,同样该数据报也使得C1网络的NAT设备上形成“穿洞”。 (5)C2收到C1的“探测”数据报后,向C1发送确认数据报。至此,双方建立互通的UDP连接。 在(2)中,考虑到C1、C2可能处于同一个私有网络中,服务器可以同时发送私有、公用端点地址,然后C1、C2先尝试使用对方私有端点地址进行通信,失败的情况下,再使用公用端点地址。 图1 需要指出的是,并不是任何的NAT设备都支持这上述的“穿透”过程。一个“友好”的NAT设备必须是“非对称”的:客户端的私有端点地址被NAT设备“翻译”成公用端点地址后,客户端再使用此私有端点地址向其它目的端点地址发送数据报,NAT设备并不会因为目的端点地址的改变而改变映射的公用端点地址,否则,C1、C2获取的对方端点地址因为“映射”改变而失效。同时,对于复杂的具有多层NAT设备的网络环境,NAT设备也需提供 “回环转换”的功能:NAT设备接收来自内部 网络 的数据报,但是目的端点地址却是其原先“对外”映射的公用端点地址,此时NAT设备仍可以“回环”的把目的端点地址“翻译”成内部网络端点地址,并把数据报转发回内部网络。 3 基于UDP Hole Punching的实现 图2 本文基于.Net框架开发一个轻量级的面向对象类库,完整的实现UDP Hole Punching 的穿透过程。图2是类库(灰底框)分层结构,描述了类库边界以及体系结构。其中NAT Client/Server API 层是类库对外提供的服务器与客户端的编程接口;NAT Traversal Layer是整个类库的核心,处理UDP Hole Punching过程中的各种情境,建立客户端之间“直接”连接等;Asynchronous UDP Socket是基于UDP的异步收发套接字,为上下层收发数据。 图3是整个实现的部分类图(限于篇幅省略了 方法 与属性)。下面是部分类功能的简单描述: (1)客户端:NATClient 是客户端的用户接口,负责客户端的登陆、登出,向下层转发字节形式的用户数据,同时向上层传递接收到的用户数据;ConnectionManager是整个客户端的核心,它是客户端多个UDP套接字的管理器,负责启动穿透过程,接收来自其它客户端、服务器的各种消息以及作出相应响应。MessageBufferQueue与Queueanager与NATSession负责管理其它客户端的端点地址(包括客户端的私有、公用端点地址);RegisterUtility具有向服务器注册本地UDP套接字的功能,它能探测出客户端到服务器之间NAT设备的端点地址映射保持时间长短,动态调整UDP套接字注册间隔,从而减少客户端、服务器的负担。 (2)服务器:NATServer负责客户端消息的处理,比如注册消息,请求客户端的端点地址,通知客户端准备接收来自其它客户端的用户

文档评论(0)

ggkkppp + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档