一种通过穿透nat实现p2p通信的方法、设备、服务器及系统的制作方法

文档序号:9846910阅读:701来源:国知局
一种通过穿透nat实现p2p通信的方法、设备、服务器及系统的制作方法
【技术领域】
[0001 ]本发明涉及穿透NAT实现P2P通信技术领域,尤其涉及一种穿透NAT实现P2P通信的方法、设备、服务器及系统。
【背景技术】
[0002]NAT (Network Address Translator,网络地址转换),它是一种把内部私有网络IP地址翻译成公有网络IP地址的技术,在IP地址日益缺乏的情况下,NAT的主要目的是使地址能够重用,IP地址可分为公有地址和私有地址,私有地址用于内网,不同的内网,私有地址可重用,从而节省了公有地址,但私有地址不可在公网中被路由,所以内网的主机要访问公网的服务器,便要经过NAT,公有地址是全球唯一的,能在公网上被路由。
[0003]内网主机用私有地址在内网能与其它内网主机无误地通信,但内网主机要与外网通信,必须经过NAT设备(如网关、路由器)。例如,内网主机A要与外网服务器S通信,必须先通过网关,此时网关改变的数据包地址及端口,把私有地址改为公有地址,使数据包能够在公网上被路由,送至外网服务器S。外网服务器S返回的数据包到达网关后,网关把公有地址改为相应的私有地址,然后转发到内网主机A。如此,一个内网只需一个公有IP地址,就把整个内网的终端接入外网,从而解决了 IP地址缺乏的问题。
[0004]目前,NAT功能常被集成到路由器、防火墙、ISDN(IntegratedServices DigitalNetwork,综合业务数字网)路由器或者单独的NAT设备中,NAT可分为基本的NAT和NAPT(Network Address/Port Translator)。
[0005]基本的NAT,它仅将内网主机的私有IP地址转换成公网IP地址,但并不将TCP/UDP端口信息进行转换,有动态与静态之区分。由于现在大部分都属于另一种类型,即NAPT,故这里不详细讨论基础NAT。
[0006]另外一种NAT叫做NAPT,从名称上我们也可以看得出,NAPT不但会改变经过这个NAT设备的IP数据包的IP地址,还会改变IP数据包的TCP/UDP端口。
[0007 ] 例如,私有网络中某一主机Cl i ent A (10.0.0.2),它的某个进程通过1234端口,想访问外网服务器18.181.0.31的1235端口。那么当数据包通过NAT时,这个NAT的外网地址是155.99.25.11,首先NAT会改变这个数据包的原IP地址,改为155.99.25.11。并分配一个端口(如62000)给Client A,把数据包的原端口号改为62000。所以本来是(10.0.0.2:1234-〉
18.181.0.31:1235)的数据包到了互联网上变为了(155.99.25.11:62000->18.181.0.31:1235) JAT会记住6 2000端口对应的是10.0.0.2的I 234端口,以后从外网服务器18.181.0.31发送到62000端口的数据会被NAT自动的改变目的IP和端口号,然后转发到
10.0.0.2上。
[0008]NAPT又分为锥型(Cone)和对称型(Symmetric),它们的区别在于,在NAT已分配端口号给Client A的情况下,如果Client A继续用1235端口与另一外网服务器通讯,锥型NAT还会继续用原来62000端口,即所分配的端口号不变。而对于对等型NAT,NAT将会分配另一端口号(如62001)给Client A的1235端口。也就是说,同一内网主机同一端口号,对于锥型NAT,无论与哪一外网主机通讯,都不改变所分配的端口号;而对于对等型NAT,同一内网主机同一端口号,每一次与不同的外网主机通信,就重新分配另一个端口号。
[0009]维型NAT可另外分类为完全维形(Full Cone)NAT,受限制维形(Restricted Cone)NAT,端口受限制维形(Port Restricted Cone)NAT0
[0010]完全锥形(FulICone)NAT
[0011]这种NAT内部的主机A连接过外网主机C后,NAT会打开一个端口。然后外网的任何发到这个打开的端口的UDP数据报都可以到达A,不管是不是C发过来的。
[0012]受限制维形(RestrictedCone)NAT
[0013]这种NAT内部的主机A连接过外网的主机C后,NAT打开一个端口。然后C可以用任何端口和A通信,但其他的外网主机不可以。
[0014]端口受限制维形(PortRestricted Cone)NAT
[0015]这种NAT内部的主机A连接过外网的主机C后,NAT打开一个端口。然后C只能用原来的端口和A通信,其他的外网主机不可以。
[0016]NAT很好地解决了地址紧缺的问题,还能够有效避免来自网络外部的攻击,隐藏并保护网络内部的计算机。同时,NAT也阻碍了外网到内网的直接访问,例如:CDN P2P分布式传输和和服务器主动推送等。
[0017]NAT穿透是实现P2P通信的主要方案,常用方案是ICE(The InternetCommunicat1ns Engine,互联网通信引擎)和UPnP。
[0018]ICE穿透要求外网服务器是双网卡配置,这将带来更多的安全风险,内网终端要求有兼容环境的存储空间。例如:嵌入式设备上运行开源程序,如果是用不同语言实现的,需要加载基本库。这在低成本的嵌入式项目中,将影响实际应用。
[0019]UPnP可以穿透UDP/TCP和对称型,但却不支持串联的NAT设备。
[0020]常用的内网NAT穿透方案有:
[0021]1)ICE(STUN+TURN)
[0022]STUN (Simple Traversal ofUDP over NAT,NAT 的 UDP 简单穿越)是一种网络协议,可以穿透TCP NAT的圆锥型和受限锥型,不能穿透UDP和对称型。这里,不考虑UDP NAT穿透,假设没有对称型防火墙或阻塞型,则需要TURN(Traversal Using Relays around NAT,使用中继穿透NAT)中继的概率是I /8 = I /2*I /4 (对称型NAT),具体如图1所示,具体步骤如下:
[0023]步骤SlOl,客户端向服务器请求NAT映射后的公网地址;
[0024]步骤S102,判断是否收到应答?如果收到进入步骤S104,否则进入步骤S103 ;
[0025]步骤S103,确认为阻塞型,网络断路或UDP/TCP报文被防火墙阻断;
[0026]步骤S104,确认为非阻塞型,比较客户端外网地址和NAT映射后的公网;
[0027]步骤S105,判断地址是否相同?如果相同进入步骤S106,否则进入步骤Slll;
[0028]步骤S106,确认为公网,没有NAT设备;
[0029]步骤S107,客户端向服务器请求从其他IP地址和Port端口回复包;
[0030]步骤S108,判断是否收到应答?如果收到进入步骤S109,否则进入步骤SI 10;
[0031 ]步骤S109,确认为开放型,客户端在开放网络上;
[0032]步骤3110,确认为对称型?胃,1]0?/11^报文被前置防火墙阻断;
[0033]步骤Slll,确认为私网,有NAT设备;
[0034]步骤SI12,客户端向服务器请求从其他IP和Port回复包;
[0035]步骤S113,判断是否收到应答?如果收到进入步骤S114,否则进入步骤步骤S115;
[0036]步骤SI14,确认为完全锥形,NAT设备是完全开放的;
[0037]步骤SI 15,确认为受限NAT,NAT设备是受限开放的;
[0038]步骤SI16,客户端向服务器的另一个IP请求NAT映射后的公网地址,比较客户端外网地址和NAT映射后的公网地址;
[0039]步骤S117,判断地址是否相同?如果相同进入步骤S119,否则进入步骤S118;
[0040]步骤S118,对称锥形NAT,UDP/TCP报文被前置NAT设备阻断;
[0041 ]步骤SI 19,确认为受限锥形;
[0042]步骤S120,客户端向服务器请求从相同地址和不同端口回复包;
[0043]步骤S121,判断地址相同吗?如果相同进入步骤S122,否则进入步骤S123;
[0044]步骤SI 22,确认为地址受限锥形;
[0045]步骤SI 23,确认为端口受限锥形。
[0046]STUN协议需要外网服务器配置双网卡,用于内网终端的NAT类型检测。开源版本“RFC3489: stund-0.97” 和 “RFC5389: stunserver” 都是基于C++实现,运行要有C++Lib库支持,编译大小是IM多,不适用于低成本嵌入式设备项目。
[0047]2)UPnP(即插即用)
[0048]UPnP是开放的设备互联协议,基于TCP/IP且不需要驱动。开启UPnP功能的NAT设备,内网终端可以让NAT网关做自动端口映射。UPnP协议簇实现互联互通,就是将内网终端的外网地址广播公告出去。UPnP可以穿透UDP/TCP NAT和对称型NAT,穿透效率很高,但应用场景有限。在串联多级NAT设备的情况下,需要每级都打开UPnP功能请求自动端口映射,外网服务器才能获知内网终端的公网地址。但事实上,外层
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1