P2P之UDP穿透.docxVIP

  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穿透简单说明 这里我们主要是是简单讲解一下UDP实现NAT的穿透(俗称打洞) NAT的全称是Network Address Translator中文称之为网络地址转换 NAT分为两大类,NAT和NAPT(Network Address Port Translator)端口地址转换 用于实例,简单的说,实现P2P需要一个中转服务器。也就是需要一个第三方 以简单的通迅来讲,首先我们来看一个示例图。 A——————B? A与B之间进行的通迅 A的IP地址为222.182.100.1 B的IP地址为222.182.100.2 如果这两个用户都是采用的全球唯一的IP地址,那么他们通迅很简单,也不需要实现P2P。 A------------------Nat--------------------B 如果其中一方为内网用户,及IP地址不为全球唯一IP 就会出现通过路由器进行通迅。 那么在经过路由器的时候,路由器会出现映射IP地址与端口的情况。 如:A为内网用户。B为外网用户。则B的IP地图为全球唯一IP地址。可以直接通迅。 A的IP地址为:192.168.1.100 端口为1025 经过路由器向B进行通迅,路由器将会产生一个一分钟到几小时不定的一个Session,这个Session映射了内网A的IP地址及其接收信息的端口。 那么路由向B发送信息的时候,IP地址及端口就变成了222.182.100.1:3645(假设) 这个时候实际上A就是在进行路由NAT的穿透 如果我们在B向A发送信息的时候采用192.168.1.100:1025这样的IP和端口,是找不到A的,因为这个IP不是全球唯一IP。 那么B需要的是在收到A的信息的时候,获取其IP地址和端口,那么获取到的就是222.182.100.1:3645这个路由器的映射Session地址。 B现在只需要向这个映射地址发送消息,路由器就会自动将消息发送到对应的A方去。否则路由器将当作无用包,将这个消息丢弃。 那如,我们现在就实现了局域网向某单个固定外网机器发送消息。 如果再来一台C端,也是外网的IP。C通过222.182.100.1:3645向A发送消息,A是否能收到呢?答案是否定的,A不能收到。为什么?因为路由在映射A的穿透时就记录了B的地址,也就是除了B向这个映射点发送消息可以通向A,其它的地址是不行的。路由器此时会将其当作无用包消息给丢弃掉。 那怎么办呢?只有A再向C发送一个穿透,C才可以向A发送消息。 以上我们只是说了一点基本的理论。接下来我们要实现什么?不同内网通过internet网进行通迅。 我们举个图例 A-----------NatA----------NatB----------B A的地址是:192.168.1.100端口4000 B的地址是:192.168.1.100端口4000 它们两个都是内网的地址。及局域网内部地址。并不是全球唯一地址。 两个路由: NatA的地址是:222.182.100.1 NatB的地址是:222.182.100.2 这两个路由是外网的地址,及全球唯一地址。 现在我们要实现A与B的通迅。 因为A与B都不是外网地址。所以A不可能向192.168.1.100发送消息。这消息只会它自己收到,因为这个IP是它自己的。同样B也不可以。 那么A向NatB发送消息,B能收到吗?答案是否定的,不能收到。刚才我们提到过。因为路由没有映射B的地址。A并不知道这个Session就连NatB也不知道这个Session因为B没有向A发送消息,并不产生这个Session。 就算B和A同时向双方的路由发送消息,产生的Session,A和B也得不到。因为在路由上就把这个消息当做为无用包给丢弃掉了。 那么这样的情况我们要进行通迅怎么办呢? 对,就是刚才我们提到的第三方。第三方是个什么方呢? 第三方必须是一个拥有固定外网IP的服务方。及一个外网服务器。全唯一IP地址。 图例: 假定我们这个第三方为C C? IP:222.182.100.3端口4001 A-----------NatA---------------C--------------------NatB-------------B ? ? ? 原理如下 A通过路由向C发送消息,C获取A的在路由上的Session地址,映射的IP和端口 B同样。 这时候C就有了A和B的地址。 C可以和A、B进行通迅,但是A和B还不行。 现在C需要通知A方B的映射IP和端口。也要通知B方A的映射IP和端口。 这样A就有了B的映射地址,B也有了A的。但是现在还不能进行通迅。 因为在路由上A和B都只有对C的穿透。并没有相互之前的穿透。 那么A要向B发送消息怎么办呢?需要C向B发送一个消息告诉B方A的地址让B向这个地址发送一

文档评论(0)

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

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

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档