P2P网络“自由”穿越NAT的“秘密”

发布者:RadiantDusk最新更新时间:2013-05-30 来源: eefocus关键字:P2P网络  NAT  IP地址 手机看文章 扫描二维码
随时随地手机看文章

穿越NAT的意义:
  
NAT是为了节省IP地址而设计的,但它隐藏了内网机器的地址,“意外”起到了安全的作用。对外不可见,不透明的内部网络也与互联网的“公平”应用,“相互共享”的思想所不容,尤其是P2P网络中“相互服务”的宗旨,所以穿越NAT,让众多内部网络的机器也参与到P2P网络中的大集体中来,一直是P2P开发者的所希望的。穿越NAT需要借助外部的支持,说白了就是“内外勾结”,骗过NAT。很多P2P网络成功地实现了这一目标,但还是有一些“遗憾”---并非所有的情况下都可以。由于客户端是主动登录P2P网络才可穿越,所以P2P的方式也没有违背企业的内部管理原则,毕竟“自由世界”的加入都是自觉自愿的。
  
NAT原理:
   
NAT(Network Address Translation)网络地址转换/网络地址翻译。
  
工作原理:NAT主要的通过对数据包头的地址替换来完成内网计算机访问外网服务的。当内部机器要访问外部网络时,NAT设备把内部的IP1与端口号1(网络层地址与传输层地址),转换成NAT的外部IP2与新的端口号2,再送给外部网络,数据返回时,再把目的为IP2:端口2的数据包替换为IP1:端口1,送给内网机器。若通讯协议的内容中有IP地址的传递,如FTP协议,NAT在翻译时还要注意数据包内涉及协议地址交互的地方也要替换,否则协议就会出现地址混乱。在NAT设备中维护了这个要替换地址的映射表,并根据内部计算机的通讯需求维护该表。外部网络来数据包能否进入NAT,主要是看是否已经有可映射的表项,若没有就会丢弃。

NAT的外部公网地址可以是一个IP,也可以是一个网段,形成地址池。NAT还可以把某个外网地址直接影射给内网的某个服务器,让外网的用户可以直接访问到这台服务器。NAT的工作的隐藏内网的机器,但允许内网主动打开到外网的通讯“通道”,也就是建立映射表项。
   
NAT给P2P带来的问题是:NAT只允许单方面发起连接,通讯的双方不是平等的,P2P网络的基础有了问题,具体的表现为:
  
        内网主机IP是私有的,外部主机看不到,也无法主动发起连接
        即使知道了内网IP,但NAT会丢弃没有在影射表的数据包
        内网主机可以作为客户端访问外网,但不能作为服务器提供服务
  
当两个主机都位于各自的NAT之后,要实现P2P的连接,就不仅是谁主动的问题,而是如何解决在两个NAT上同时有对方映射表项的问题。
STUN协议(IETF RFC 3489):

STUN协议是一种通道协议,可以作为正式通讯前的通路建立,它采用的是用户终端干预的一种方法,可以解决应用协议内部传递IP地址给NAT带来的麻烦。用户通过其他方法得到其地址对应在NAT出口上的对外地址,然后在报文负载中所描述的地址信息就直接填写NAT上对外地址,而不是内网的私有IP,这样报文的内容在经过NAT时就按普通的NAT流程转换报文头部的IP地址即可,负载内的IP地址信息无需再修改。利用STUN的思路可以穿越NAT。STUN协议是客户端/服务器协议,分两种请求方式:一是UDP发送的绑定请求(Binding Requests),二是TCP发送的秘密请求(Shared Secret Requests)。绑定请求用于确定NAT分配的绑定地址。
   
STUN标准中,根据内部终端的地址(P:p)到NAT出口的公网地址(A:b)的影射方式,把NAT分为四种类型:
  

[page]

1. Full Cone:来自相同的内部地址的请求消息映射为相同的外部地址,与外部地址(目的地址)无关。映射关系为P:p↔A:b,任何外部主机可通过(A:b)发送到数据到(P:p)上。 
2 . Restricted Cone:来自相同的内部地址的请求消息映射为相同的外部地址,返回的数据只接受该内部节点曾发数据的那个目的计算机地址X。映射关系为P:p↔A:b↔X,只有来自X的数据包才可通过(A:b)发送到数据到(P:p)上。
3. Port Restricted Cone:来自相同的内部地址的请求消息映射为相同的外部地址,返回的数据只接受该内部节点曾发数据的那个目的地址X:x。映射关系为P:p↔A:b↔X:x,只有来自X:x的数据包才可通过(A:b)发送到数据到(P:p)上。
4. Symmetric(对称) NAT:只有来自相同的内部地址(P:p),并且发送到同一个地址(X:x) 的请求消息,才被映射为相同的外部地址(A:b),返回的数据只接受该内部节点曾发数据的那个目的地址X:x。映射关系为P:p↔A:b↔X:x,当(P:p)访问(Y:y)时,映射为P:p↔B:c↔Y:y。
  
P2P利用STUN穿越NAT:
   
位于NAT后面终端A与B要穿越NAT直接通讯,可以借助在公网上的第三者Server来帮助。
  
穿越NAT的情况分为为两种方式:

1、一方在NAT之后,一方在公网上。这种情况相对简单,只要让NAT之后的终端先发起通讯,NAT就没有作用了,它可以从Server上取得另一个Peer的地址,主动连接,回来的数据包就可以方便地穿越NAT。

2、双方都在NAT之后,连接的成功与否与两个NAT的类型有关。主要的思路的先通过终端与Server的连接,获得两个终端在NAT外部的地址(IP与端口号),再由终端向对方的外部地址发邀请包,获取自己与对方通讯的外部地址,俗称为“打洞”。关键是获取了NAT外部映射的地址,就可以发包直接沟通,建立连接。但当一方是对称型,另一方是Port Restricted或对称型时,无法有效获取外部地址,邀请包无法到达对方,也就无法穿越NAT。具体的分析可以根据两个NAT的类型分成若干情况分析,这里给一般的穿越例子。

实例:UDP穿越NAT:
   
A登录Server,NAT A分配端口11000,Server得到A的地址为100.10.10.10:11000
   
B登录Server,NAT B分配端口22000,Server得到B的地址为200.20.20.20:22000
  
此时B会把直接来自A的包丢弃,所以要在NAT B上打一个方向为A的洞,那么A就可以向200.20.20.20:22000发送数据了
  
打洞的指令来自Server。B向A的地址100.10.10.10:11000发一个UDP报文,被NAT A丢弃,但在NAT B上建立映射记录,NAT B不在丢弃来自A的报文。
   
Server通知A可以通讯,A发起数据UDP包给B,NAT B放行,B收到A的包,双方开始通讯
   
注:若是对称NAT,当B向A打洞的端口要重新分配(NAT A不会再分配11000端口),B无法获取这个端口,所以不适用本方法。
  
实例:TCP穿越NAT: 

A登录Server,NAT A分配端口11000,Server得到A的地址为100.10.10.10:11000 
B登录Server,NAT B分配端口22000,Server得到B的地址为200.20.20.20:22000
A向B发送TCP数据包SYN:192.168.10.11:1234=>200.20.20.20:22000,在NAT A上打洞
B向A发送TCP数据包SYN:192.168.20.22:1234=>100.10.10.10:11000,在NAT B上打洞

通道建立,A与B三次握手建立TCP连接

关键字:P2P网络  NAT  IP地址 引用地址:P2P网络“自由”穿越NAT的“秘密”

上一篇:DTS-HD技术和原理
下一篇:用于IPTV机顶盒的电路保护技术

推荐阅读最新更新时间:2024-05-02 22:41

基于TCP/lP嵌入式网关的IP地址远程设置
摘要 提出一种全新的对嵌入式网关IP地址等网络参数的设置方案及其具体实现方法。该方案通过在数据链路层架构协议,在网络底层和嵌入式网关通信,既回避了在传输层之上通信必须知道IP地址和端口号的矛盾,又实现了网络化设置和管理的目的。采用Winpcap开发包编写服务嚣端软件,嵌入式网关添加必要的协议解析和服务器协同工作,真正建立一个快捷、便利的嵌入式网关参数设置的网络化环境。 关键词 嵌入式系统 以太网 IP地址 MAC地址 远程设置 引 言 近年来,人们都把TCP/IP协议栈作必要裁减后移植到8位或16位微处理器上,完成嵌入式异型网关的构建(如北京英贝多EM2002系列网关,海华信网络通等),从而使不同类型的数据包可以通过透明传输
[网络通信]
修改arm开发板IP地址
要修改arm开发板的IP,如果是yaffs2文件,可以 1、首先要修改/etc/init.d/rcS文件,在/sbin/ifconfig lo 127.0.0.0 下添加一行/sbin/ifconfig eth0 192.168.1.20 up 注:192.168.1.20 只是举例,可以改成你想要修改的IP地址 本来这样修改之后就可以的,但是我发现仍然不行,使用ifconfig命令,发现开发板IP地址没有被更改过来。 后来无心插柳,发现还需要修改另一处 2、修改/etc/eth0-setting 将其IP地址改成你想要设置的IP 重启开发板,使用ifconfig命令,就发现IP地址已经修改过来了。
[单片机]
听,灯泡在对话
在物联网世界中,每台家用电器都可通过IP地址进行监视和控制——灯也不例外。试想一下,如果每个灯泡也都有自己的IP地址,那将会怎样呢? 你可以用你的Ipad、智能手机、或是电视遥控器来随意开关灯泡、调试光线、营造氛围;也可以让其自动根据室外光照条件来调节室内照明;当家中无人时,你不用担心哪盏灯忘记关,因为其可以自动关闭;当你在新房装修时,可在预算中省去灯泡布线的成本,并可随意调动每盏灯的位置;而且,你可以通过无线网络连接数十台甚至数百台设备,让您对每一个电器的运行环境和功耗水平都了如指掌。 图1.通过手机可控制室内照明 “现在,技术上都有解。”恩智浦照明产品市场经理陈嵘说。 恩智浦半导体近日宣布
[网络通信]
听,灯泡在对话
在VxWorks下实现NAT/NAPT的方法
摘要:介绍NAT、NAPT的基本概念和工作原理;结合VxWorks的网络协议栈,描述一种利用VxWorks操作系统提供的钩子函数来开发实现NAT和NAPT的方法。 关键词:NAT NAPT 钩子函数 网络协议栈 截获 转换 校验和 引言 近年来,随着Internet的迅猛发展,连入Internet的主机数量成倍增长。由于最初设计Internet的时候并没有考虑到需要支持这么大的规模,因而Internet使用的Ipv4协议中IP地址的长度选择了32位,它可以使IP包的格式很好地对齐;但是,目前IP地址的短缺已经成为Internet面临的最大问题之一。 为了解决IP地址短缺的问题,人们提出了许多解决方案,nternet能够支持
[嵌入式]
Nat.Mater:新型高效节能太阳能光伏电池研发成功
据国外媒体报道,随着高效节能的有机小分子太阳能电池研发成功,可以像报纸一样印刷的太阳能光伏电池板距离变成现实更近一步。这种由美国加州大学圣塔芭芭拉分校的一个科研组研制的太阳能光伏电池的能源效率是6.7%,可与目前性能最好的聚合体太阳能电池相媲美。大部分聚合体光伏电池的能源效率在6%到8%之间。 包括诺贝尔奖得主艾伦-黑格教授在内的论文作者11月7日在《自然—材料学》杂志发表的论文中写道:“这些研究结果令溶液处理有机光电技术取得重大进步,并证实利用小分子制成的太阳能光伏电池可与它们的聚合体版本一争高下。” 澳大利亚莫纳什大学的材料科学家克里斯-麦克内尔表示,该论文标志着这一领域取得了新的“重大”进步。世界各地的学者和工业实验室正在
[新能源]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved