- 浏览: 485282 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
Source_野驴:
...
jsp静态化和伪静态化 -
zidanzzg:
很好的知识,找到了利用异或交换数值的理论支持,谢谢分享
XOR的性质和运算 -
ueseu:
引用(2) DomainDomain域名也是Cookie的一部 ...
Cookie的组成 -
ueseu:
引用Secure取true或者false值。如果为true,那 ...
Cookie的组成 -
liqi___123:
理解得很透彻,谢谢!!
ROLAP、MOLAP和HOLAP联机分析处理区别
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就可能发给自己内部网里面的某某某了.
说明1:关于NAT的四种类型,我想这四种类型的区分取决与NAT服务器内部保存什么信息。
首先,对于Cone NAT,它都保存着(private ip, private port)-->(public ip, private port)的映射绑定,从(private ip,privaet port)出发所有的session都使用这个映射。从这个意义上看,基本的NAT(没有改变端口的)和firewall都是一种“退化的cone nat”,它们只保存(private ip)--> (public ip),没有改变端口。
但是,三种Cone NAT又都保存着一些其他信息,分为一下三类.Cone NAT is further classified according to how liberally the NAT accepts incoming traffic directed to an already-established (public IP, public port) pair. This classification generally applies only to UDP traffic, since NATs and firewalls reject incoming TCP connection attempts unconditionally unless specifically configured to do otherwise.
1)Full Cone NAT
After establishing a public/private port binding for a new outgoing session,a full cone NAT will subsequently accept incoming traffic to the corresponding public port from ANY external endpoint on the public network.
2) Restricted Cone NAT
A restricted cone NAT only forwards an incoming packet directed to a public port if its external (source) IP address matches the address of a node to which the internal host has previously sent one or more outgoing packets. A restricted cone NAT effectively refines the firewall principle of rejecting unsolicited incoming traffic, by restricting incoming traffic to a set of "known" external IP addresses.
要完成上面的功能,Restricted Cone NAT应该保存从每个映射出去的session的目的hosts的ip。
3)Port-Restricted Cone NAT
A port-restricted cone NAT provides internal nodes the same level of protection against unsolicited incoming traffic that a symmetric NAT does, while maintaining a private port's identity across translation.
显然,Port-Restricted Cone NAT要保存从每个映射出的session的目的host的ip和port。
其次,对于Symmetric NAT,A symmetric NAT, in contrast, does not maintain a consistent port binding between (private IP, private port)-->(public ip, public port). Instead, it assigns a new public port to each new session.
说明2:我认为,之所以要分为这几种NAT,特别是Cone NAT的那三种类型,可能一个原因是出于“安全性的考虑”,比如Port-Restricted Cone NAT就要比Full Cone NAT安全,因为Port-Restricted只接受的“内部主机曾经向其发送包的那些目的主机的incoming packet”;而Full NAT是,只要内部主机向外initiate一个新session,建立了(private ip, private port)-->(public ip, public port),以后就“对any external host's incoming packet来者不拒”了。
从网关或路由器的网络防火墙模块的角度看,Cone NAT实际上是向Internet的主机不同程度的开放自己的端口,则这个端口映射为内网的某个主机的某个应用程序。
发表评论
-
ARP请求过程详解
2013-06-29 09:09 1363ARP请求详解1: ARP请求详解2: ... -
无线路由器WDS设置
2013-05-20 05:53 1131在WDS设置里面有三种不同的模式,下面分别对 ... -
HomePlug AV协议简介
2013-04-26 20:41 1665HOMEPLUG AV 编辑本段简 介 ... -
crontab命令详细解析
2013-04-24 10:15 1来源:http://blog.chinaunix.n ... -
sed命令详解
2013-04-20 16:11 11.简介 sed是非交互式的编辑器。它不会修改文件,除非使 ... -
Tomato DualWAN功能
2013-04-16 11:04 0Tomato DualWAN 使那些能刷Tomato或DD- ... -
SSH端口转发
2012-08-29 14:15 2322一、概述你在咖啡馆享 ... -
Linux记录用户操作记录
2012-05-21 14:42 2787如下方法在centos5.x系统中通过.在/etc/pro ... -
Linux文件与目录的三种时间状态
2012-05-21 10:18 39731. mtime(medify time):最后一 ... -
linux find命令-exec参数的使用说明
2012-05-21 10:03 1529前言:最近几天使用find的高级功能,但执行到 -exec ... -
CMDSHELL常用命令
2013-04-16 11:00 0cmdshell后门在黑客界广 ... -
宽带下载速率对照表
2012-03-11 18:07 0宽带下载速率对照表 宽带业务 下行速 ... -
关于无线路由能发射多少米
2013-04-16 10:58 1353每位买家都比较关心这个问题,不知道这个无线产品的有效 ... -
VPN穿透CMCC及ChinaNET
2012-03-08 23:20 0来源:http://fyscu.com/forum.php?m ... -
从实例学习DD-WRT之封杀P2P
2012-03-08 22:54 1395笔者曾经在DD-WRT特色 ... -
Bridge、WDS桥接和WISP万能中继的区别
2012-03-06 14:03 3884Bridge、WDS桥接和WISP万 ... -
超远距离无线联网测试(3公里)
2012-03-03 14:27 4433[软件网络][2007-31期]挑战3公里极限——超远距离无线 ... -
底层网络开发库之libnet
2011-05-10 09:23 1011在Unix系统平台上的网 ... -
date命令的用法
2011-04-28 17:07 932在linux shell编程中,经常用到日期的加减运算 以前 ... -
理解Windows中的路由表和默认网关
2011-04-01 16:18 1503每一个Windows系统中都具有IP路由表,它存储了 ...
相关推荐
TCP打洞技术就是为了解决这一问题,允许两个处于NAT之后的设备之间建立直接的TCP连接。 TCP P2P通信是通过TCP协议实现代理服务器之外的两个端点之间的直接通信。这种通信方式减少了对中心服务器的依赖,提高了网络...
UDP打洞技术是一种在NAT(网络地址转换)环境下实现P2P(点对点)通信的方法,尤其在处理子网间通信时非常有用。在Java中,我们可以利用其强大的网络编程API来实现这一功能。以下是对这个技术的详细解释。 ### UDP...
**C# UDP打洞NAT技术详解** 在现代网络环境中,由于广泛使用了网络地址转换(Network Address Translation, NAT),很多设备无法直接进行对等网络(P2P, Peer-to-Peer)通信。NAT技术使得内部网络的设备可以通过一...
就是非常有名的“UDP打洞技术”,UDP打洞技术依赖于由公共防火墙和cone NAT,允许适当的有计划的端对端应用程序通过NAT“打洞”,即使当双方的主机都处于NAT之后。这种技术在 RFC3027的5.1节[NAT PROT] 中进行了重点...
nat p2p tcp穿墙打洞源码 两路由器下测试通过
nat p2p udp穿墙打洞源码。在两台路由器下测试通过
实现两台NAT内主机之间的通信,基于UDP传输协议,VC写的
C# UDP穿越NAT,UDP打洞,UDP Hole Punching源代码
PeerToPeer打洞 UDP穿墙NAT c源代码
超经典的TCP打洞程度源代码。目前网上的全是UDP打洞,很少有TCP方面的。
udp 穿透, 传透NAT,打洞。不仅有文档的介绍,将原理介绍清楚,而且有可以直接运行的源码。学习udp打洞的好资料。
描述中的“TCP实现P2P通信、TCP穿越NAT的方法、TCP打洞(附源代码).doc”进一步确认了这个压缩包包含了一篇文档,详细介绍了如何通过TCP协议进行P2P通信,NAT穿越的技术以及TCP打洞的实践方法,并且提供了源代码。...
NAT打洞通常有两种方法:UDP打洞(UDP Hole Punching)和TCP打洞(TCP Hole Punching)。UDP打洞是更常见的一种,因为UDP协议的无连接特性使得数据传输更加灵活。在C#中实现UDP打洞,开发者需要理解UDP套接字的工作...
P2P打洞(P2P Hole Punching)是一种在NAT(网络地址转换)环境下实现P2P通信的技术,对于搭建分布式系统、游戏对战平台等有着重要的应用。 首先,我们来理解P2P打洞的基本原理。NAT是Internet上广泛采用的一种技术...
标题中的“TCP打洞,穿越NAT”是一个网络通信领域中的技术话题,主要涉及的是如何在存在网络地址转换(NAT)的环境下实现两个私有网络内的设备之间的直接通信。NAT是Internet上的一个普遍机制,它允许一个内部网络...
本文将详细探讨如何使用TCP实现P2P通信,以及TCP穿越NAT的方法,特别是TCP打洞技术,并提供相关的源代码参考。 首先,TCP实现P2P通信的关键在于建立可靠的端到端连接。在P2P网络中,每个节点都有一个私有IP地址,这...
Python NAT P2P打洞压测程序是一种利用Python编写的测试工具,主要用于模拟网络环境中的NAT穿透(NAT Traversal)并进行性能压力测试。这个程序的核心目标是验证P2P网络在穿越NAT(网络地址转换)设备时的连接稳定性...
UDP打洞是一种网络技术,主要用于穿透NAT(网络地址转换)网络,使位于不同NAT后的设备能够直接通信。在互联网环境中,许多设备都通过NAT连接,这使得它们拥有私有IP地址,无法直接相互连接。UDP打洞解决了这个问题...
TCP打洞,也称为UDP打洞或NAT打洞,是一种让两个处于NAT后的设备直接通信的技术。TCP打洞通常分为两种类型:被动模式和主动模式。在被动模式中,设备A首先尝试连接到设备B,B接收连接后,向A的公网IP和端口发送数据...