首先,Client A登录服务器,NAT A为这次的Session分配了一个端口60000,那么Server S收到的Client A的地址是202.187.45.3:60000,这就是Client A的外网地址了。同样,Client B登录Server S,NAT B给此次Session分配的端口是40000,那么Server S收到的B的地址是187.34.1.56:40000。
此时,Client A与Client B都可以与Server S通信了。如果Client A此时想直接发送信息给Client B,那么他可以从Server S那儿获得B的公网地址187.34.1.56:40000,是不是Client A向这个地址发送信息Client B就能收到了呢?答案是不行,因为如果这样发送信息,NAT B会将这个信息丢弃(因为这样的信息是不请自来的,为了安全,大多数NAT都会执行丢弃动作)。现在我们需要的是在NAT B上打一个方向为202.187.45.3(即Client A的外网地址)的洞,那么Client A发送到187.34.1.56:40000的信息,Client B就能收到了。这个打洞命令由谁来发呢,呵呵,当然是Server S。
总结一下这个过程:如果Client A想向Client B发送信息,那么Client A发送命令给Server S,请求Server S命令Client B向Client A方向打洞。呵呵,是不是很绕口,不过没关系,想一想就很清楚了,何况还有源代码呢(侯老师说过:在源代码面前没有秘密 8)),然后Client A就可以通过Client B的外网地址与Client B通信了。
注意:以上过程只适合于Cone NAT的情况,如果是Symmetric NAT,那么当Client B向Client A打洞的端口已经重新分配了,Client B将无法知道这个端口(如果Symmetric NAT的端口是顺序分配的,那么我们或许可以猜测这个端口号,可是由于可能导致失败的因素太多,我们不推荐这种猜测端口的方法)。
分享到:
相关推荐
C# udp NAT打洞客户端,可以实现不能局域网的通信,亲测,测试请需要设置一个IP地址,这个IP地址为外网的IP地址,如果没有外网的IP地址,请通过路由器设置DMZ主机地址,也可以实现外网的功能,UDP NAT的原理可以在我...
实现两台NAT内主机之间的通信,基于UDP传输协议,VC写的
C# udp NAT打洞服务端,服务端必须放置在有外网IP的服务器上, 可以实现不能局域网的通信,亲测,测试请需要设置一个IP地址,这个IP地址为外网的IP地址,如果没有外网的IP地址,请通过路由器设置DMZ主机地址,也可以...
本文将深入探讨C#环境下如何利用UDP协议进行NAT打洞。 **一、理解NAT工作原理** NAT是一种网络技术,用于将私有IP地址转换为公网IP地址,以节省有限的公网IP资源。在NAT背后,设备的通信通过一系列映射规则进行...
UDP打洞技术是一种在NAT(网络地址转换)环境下实现P2P(点对点)通信的方法,尤其在处理子网间通信时非常有用。在Java中,我们可以利用其强大的网络编程API来实现这一功能。以下是对这个技术的详细解释。 ### UDP...
udp 穿透, 传透NAT,打洞。不仅有文档的介绍,将原理介绍清楚,而且有可以直接运行的源码。学习udp打洞的好资料。
UDP打洞相关的资料,包括原理,说明,以后相关的源码,是学习udp打洞的绝好资料。自己用过,感觉不错。
Python NAT P2P打洞压测程序是一种利用Python编写的测试工具,...通过对UDP协议的运用、NAT打洞技术的实现以及压测工具的集成,我们可以深入理解P2P网络在实际环境中的表现,为开发高效、稳定的P2P应用提供有力支持。
TCP打洞,也称为UDP打洞或NAT打洞,是一种让两个处于NAT后的设备直接通信的技术。TCP打洞通常分为两种类型:被动模式和主动模式。在被动模式中,设备A首先尝试连接到设备B,B接收连接后,向A的公网IP和端口发送数据...
这就需要进行NAT打洞,即端口映射,使得两个位于NAT后的设备能够找到彼此,建立直接连接。 NAT打洞通常有两种方法:UDP打洞(UDP Hole Punching)和TCP打洞(TCP Hole Punching)。UDP打洞是更常见的一种,因为UDP...
NAT打洞的具体过程包括以下步骤: 1. 客户端A向服务器发送UDP报文,服务器记录A的公网IP和端口。 2. 服务器将A的信息转发给客户端B,同时也记录B的公网信息。 3. B收到A的信息后,直接向A的公网IP和端口发送UDP报文...
// 处理数据传输和NAT打洞逻辑 // 关闭连接 clientA.Close(); clientB.Close(); } } ``` 请注意,以上代码只是一个简单的框架,实际应用中需要填充具体的连接和打洞逻辑。此外,为了使打洞更可靠,可能还需要...
接着,B根据收到的信息向A的内网地址发送数据,触发NAT打洞。同时,A也向B的内网地址发送数据,尝试在B的NAT上打洞。如果成功,两个设备就能直接通信了。 在实现过程中,还需要考虑以下几点: 1. NAT类型识别:不同...
TCP打洞技术就是为了解决这一问题,允许两个处于NAT之后的设备之间建立直接的TCP连接。 TCP P2P通信是通过TCP协议实现代理服务器之外的两个端点之间的直接通信。这种通信方式减少了对中心服务器的依赖,提高了网络...
然而,NAT的存在给P2P通信带来了挑战,因为两个位于NAT后的设备无法直接通信,除非它们能"穿透"NAT,也就是所谓的NAT打洞。 NAT打洞是P2P通信中的一种技术,用于让两个位于NAT后的设备能够发现并直接通信。UDP打洞...
超经典的TCP打洞程度源代码。目前网上的全是UDP打洞,很少有TCP方面的。
用纯java代码写的点对点打洞技术,非常使用。希望对大家用帮助。
### UDP穿越NAT与UDP打洞技术解析及C#实现 #### 一、UDP穿越NAT与UDP打洞概述 在网络通信中,由于NAT(Network Address Translation)的存在,两个位于不同私有网络中的主机之间很难直接进行UDP通信。为了克服这一...
3. **NAT打洞**:学习NAT的工作方式,包括端口映射和如何利用STUN(Simple Traversal of UDP through NATs)、TURN(Traversal Using Relays around NATs)和ICE(Interactive Connectivity Establishment)等技术...
"P2P_SERVER" 文件夹则可能包含打洞服务器的源代码,这部分代码通常负责分配端口,处理客户端的连接请求,协助客户端完成NAT打洞等。 总体来说,这个项目是一个学习和研究P2P网络通信,特别是NAT穿透和打洞技术的...