`
luliangok
  • 浏览: 780808 次
文章分类
社区版块
存档分类
最新评论

UDP"打洞"原理

 
阅读更多

转自: http://kangxy.spaces.msn.com/Blog/cns!1pPRmwqHVL0ggOeJCDmZc6Pg!116.entry

UDP"打洞"原理

1. NAT分类

根据Stun协议(RFC3489),NAT大致分为下面四类

1) Full Cone

这种NAT内部的机器A连接过外网机器C后,NAT会打开一个端口.然后外网的任何发到这个打开的端口的UDP数据报都可以到达A.不管是不是C发过来的.

例如 A:192.168.8.100 NAT:202.100.100.100 C:292.88.88.88
A(192.168.8.100:5000) -> NAT(202.100.100.100 : 8000) -> C(292.88.88.88:2000)
任何发送到 NAT(202.100.100.100:8000)的数据都可以到达A(192.168.8.100:5000)

2) Restricted Cone

这种NAT内部的机器A连接过外网的机器C后,NAT打开一个端口.然后C可以用任何端口和A通信.其他的外网机器不行.

例如 A:192.168.8.100 NAT:202.100.100.100 C:292.88.88.88
A(192.168.8.100:5000) -> NAT(202.100.100.100 : 8000) -> C(292.88.88.88:2000)
任何从C发送到 NAT(202.100.100.100:8000)的数据都可以到达A(192.168.8.100:5000)

3) Port Restricted Cone

这种NAT内部的机器A连接过外网的机器C后,NAT打开一个端口.然后C可以用原来的端口和A通信.其他的外网机器不行.

例如 A:192.168.8.100 NAT:202.100.100.100 C:292.88.88.88
A(192.168.8.100:5000) -> NAT(202.100.100.100 : 8000) -> C(292.88.88.88:2000)
C(202.88.88.88:2000)发送到 NAT(202.100.100.100:8000)的数据都可以到达A(192.168.8.100:5000)

以上三种NAT通称Cone NAT.我们只能用这种NAT进行UDP打洞.

4) Symmetic

对于这种NAT.连接不同的外部目标.原来NAT打开的端口会变化.而Cone NAT不会.虽然可以用端口猜测.但是成功的概率很小.因此放弃这种NAT的UDP打洞.

2. UDP hole punching

对于Cone NAT.要采用UDP打洞.需要一个公网机器C来充当”介绍人”.内网的A,B先分别和C通信.打开各自的NAT端口.C这个时候知道A,B的公网IP: Port. 现在A和B想直接连接.比如A给B发.除非B是Full Cone.否则不能通信.反之亦然.但是我们可以这样.

A要连接B.A给B发一个UDP包.同时.A让那个介绍人给B发一个命令,让B同时给A发一个UDP包.这样双方的NAT都会记录对方的IP,然后就会允许互相通信.

3. 同一个NAT后面的情况

如果A,B在同一个NAT后面.如果用上面的技术来进行互连.那么如果NAT支持loopback(就是本地到本地的转换),A,B可以连接,但是比较浪费带宽和NAT.有一种办法是,A,B和介绍人通信的时候,同时把自己的local IP也告诉服务器.A,B通信的时候,同时发local ip和公网IP.谁先到就用哪个IP.但是local ip就有可能不知道发到什么地方去了.比如A,B在不同的NAT后面但是他们各自的local ip段一样.A给B的local IP发的UDP就可能发给自己内部网里面的某某某了.

还有一个办法是服务器来判断A,B是否在一个NAT后面.(网络拓朴不同会不会有问题?)
分享到:
评论

相关推荐

    演示实现UDP打洞,UDP打洞原理

    本程序为UDP打洞原理的测试程序。为了简单起见,该程序服务器就接收两个客户端的连接,使两客户端建立UDP通道。两客户端建立UDP通道后,互相发送的数据不经过服务器转发,直接进行数据交互,这时可以关闭服务器程序。...

    UDP打洞原理,Delphi演示

    UDP打洞原理,Delphi演示 对于Cone NAT.要采用UDP打洞.需要一个公网机器C来充当”介绍人”.内网的A,B先分别和C通信.打开各自的NAT端口.C这个时候知道A,B的公网IP: Port. 现在A和B想直接连接.比如A给B发.除非B是Full ...

    udp打洞原理详解

    清晰描述udp打洞的原理;局域网与局域网之间通讯的好方法;腾讯qq局域网之间也是这个原理。

    UDP打洞测试程序

    应某网友之邀,现将UDP打洞原理写成一个简单测试程序。为了简单起见,该程序服务器就接收两个客户端的连接,使两客户端建立UDP通道。两客户端建立UDP通道后,互相发送的数据不经过服务器转发,直接进行数据交互,这时...

    UDP打洞源码及原理分析.zip

    socket UDP打洞源码及原理分析 需要有udp通信基础

    UDP打洞demo

    c#版udp打洞实现,server放到一个有固定IP的服务上,两个client借助server打洞后直接通讯. 原理网上有一堆,就不细说了,压缩包内也放了一篇网上down的原理供参考

    UDP-NAT.rar_nat_nat udp_udp 防火墙_udp打洞_打洞

    UDP穿越防火墙的例子,有助于学习UDP打洞原理哦。

    UDP穿越NAT,UDP打洞

    用C# 实现 UDP 穿越NAT UDP打洞 有全部源码和原理阐述

    UDP打洞测试程序.rar

    本代码为UDP打洞原理的测试程序。为了简单起见,该程序服务器就接收两个客户端的连接,使两客户端建立UDP通道。两客户端建立UDP通道后,互相发送的数据不经过服务器转发,直接进行数据交互,这时可以关闭服务器程序。...

    UDP_MakeHole.rar_NAT 打洞_NAT 打洞udp_udp 打洞_udp打洞_透传

    udp 穿透, 传透NAT,打洞。不仅有文档的介绍,将原理介绍清楚,而且有可以直接运行的源码。学习udp打洞的好资料。

    UDP打洞源代码(附NAT即打洞原理)

    实现了子网间NAT、网络通信功能;首先服务器上运行server,在两个不同子网下运行client并连接服务器,然后选择通信,当两个client互相收发到数据后,打洞就成功了。

    UDP打洞的实现代码

    论坛上经常有对P2P原理的讨论,但是讨论归讨论,很少有实质的东西产生(源代码)。呵呵,在这里我就用自己实现的一个源代码来说明UDP穿越NAT的原理。

    C#WINFORM实时连接UDP打洞测试程序

    本程序为UDP打洞原理的测试程序。为了简单起见,该程序服务器就接收两个客户端的连接,使两客户端建立UDP通道。两客户端建立UDP通道后,互相发送的数据不经过服务器转发,直接进行数据交互,这时可以关闭服务器程序。...

    p2p UDP打洞 C++程序

    别人写的很好的打洞程序,原理和代码都写的很不错,分享一下

    UDP打洞客户端和服务器打包.

    资源包含客户端和服务器C++源代码和工程文件,服务器和客户端通信使用UDP的NAT穿透原理,服务端采用iocp完成端口和多线程,客户端请求分发交给子线程,在子线程中完成业务逻辑,适用于UDP通信的服务器框架使用。

    C#_UDP打洞技术实现

    详见http://midcom-p2p.sourceforge.net/draft-ford-midcom-p2p-01.txt,当然,此问题可以通过双方先尝试连接对方的内网ip来解决,但是这个代码只是为了验证原理,并没有处理这些问题),后登录的计算机可以获得先...

    UDP穿透NAT 打洞 P2P

    UDP打洞相关的资料,包括原理,说明,以后相关的源码,是学习udp打洞的绝好资料。自己用过,感觉不错。

    C# udp NAT打洞客户端1/2,可以实现不能局域网的通信,亲测

    C# udp NAT打洞客户端,可以实现不能局域网的通信,亲测,测试请需要设置一个IP地址,这个IP地址为外网的IP地址,如果没有外网的IP地址,请通过路由器设置DMZ主机地址,也可以实现外网的功能,UDP NAT的原理可以在我...

    UDP用打洞技术穿透NAT的原理与实现

    最近正在做穿墙技术,集各种资料,这篇算是介绍得最全面最清楚的,分享给各位朋友。

    UDP协议下打洞技术的原理及实现

    想通过UDP套接字,实现互联网的通讯,不可避免的要实现打洞技术.这是UDP打洞技术的原理及实现.

Global site tag (gtag.js) - Google Analytics