`
yang2507366
  • 浏览: 4956 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

NAT打洞

 
阅读更多
首先,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打洞客户端1/2,可以实现不能局域网的通信,亲测

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

    NAT打洞穿越

    实现两台NAT内主机之间的通信,基于UDP传输协议,VC写的

    C# udp NAT打洞服务端1/2,可以实现不能局域网的通信

    C# udp NAT打洞服务端,服务端必须放置在有外网IP的服务器上, 可以实现不能局域网的通信,亲测,测试请需要设置一个IP地址,这个IP地址为外网的IP地址,如果没有外网的IP地址,请通过路由器设置DMZ主机地址,也可以...

    C#UDP打洞NAT

    本文将深入探讨C#环境下如何利用UDP协议进行NAT打洞。 **一、理解NAT工作原理** NAT是一种网络技术,用于将私有IP地址转换为公网IP地址,以节省有限的公网IP资源。在NAT背后,设备的通信通过一系列映射规则进行...

    java udp p2p nat 等打洞技术实现通信,已测试成功

    UDP打洞技术是一种在NAT(网络地址转换)环境下实现P2P(点对点)通信的方法,尤其在处理子网间通信时非常有用。在Java中,我们可以利用其强大的网络编程API来实现这一功能。以下是对这个技术的详细解释。 ### UDP...

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

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

    UDP穿透NAT 打洞 P2P

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

    python nat p2p打洞压测程序

    Python NAT P2P打洞压测程序是一种利用Python编写的测试工具,...通过对UDP协议的运用、NAT打洞技术的实现以及压测工具的集成,我们可以深入理解P2P网络在实际环境中的表现,为开发高效、稳定的P2P应用提供有力支持。

    TCP实现P2P通信、TCP穿越NAT的方法、TCP打洞源码

    TCP打洞,也称为UDP打洞或NAT打洞,是一种让两个处于NAT后的设备直接通信的技术。TCP打洞通常分为两种类型:被动模式和主动模式。在被动模式中,设备A首先尝试连接到设备B,B接收连接后,向A的公网IP和端口发送数据...

    CSharp---P2P-and-NAT-.zip_CSharp udp nat_NAT Csharp_c# 打洞_cshar

    这就需要进行NAT打洞,即端口映射,使得两个位于NAT后的设备能够找到彼此,建立直接连接。 NAT打洞通常有两种方法:UDP打洞(UDP Hole Punching)和TCP打洞(TCP Hole Punching)。UDP打洞是更常见的一种,因为UDP...

    P2P打洞(TCP ,UDP 公网)shhxkl.zip

    NAT打洞的具体过程包括以下步骤: 1. 客户端A向服务器发送UDP报文,服务器记录A的公网IP和端口。 2. 服务器将A的信息转发给客户端B,同时也记录B的公网信息。 3. B收到A的信息后,直接向A的公网IP和端口发送UDP报文...

    C# Tcp 打洞

    // 处理数据传输和NAT打洞逻辑 // 关闭连接 clientA.Close(); clientB.Close(); } } ``` 请注意,以上代码只是一个简单的框架,实际应用中需要填充具体的连接和打洞逻辑。此外,为了使打洞更可靠,可能还需要...

    UDP打洞软件

    接着,B根据收到的信息向A的内网地址发送数据,触发NAT打洞。同时,A也向B的内网地址发送数据,尝试在B的NAT上打洞。如果成功,两个设备就能直接通信了。 在实现过程中,还需要考虑以下几点: 1. NAT类型识别:不同...

    TCP实现P2P通信、TCP穿越NAT的方法、TCP打洞

    TCP打洞技术就是为了解决这一问题,允许两个处于NAT之后的设备之间建立直接的TCP连接。 TCP P2P通信是通过TCP协议实现代理服务器之外的两个端点之间的直接通信。这种通信方式减少了对中心服务器的依赖,提高了网络...

    UDP协议进行P2P打洞

    然而,NAT的存在给P2P通信带来了挑战,因为两个位于NAT后的设备无法直接通信,除非它们能"穿透"NAT,也就是所谓的NAT打洞。 NAT打洞是P2P通信中的一种技术,用于让两个位于NAT后的设备能够发现并直接通信。UDP打洞...

    TCP打洞NAT

    超经典的TCP打洞程度源代码。目前网上的全是UDP打洞,很少有TCP方面的。

    java打洞代码

    用纯java代码写的点对点打洞技术,非常使用。希望对大家用帮助。

    UDP穿越NAT,UDP打洞

    ### UDP穿越NAT与UDP打洞技术解析及C#实现 #### 一、UDP穿越NAT与UDP打洞概述 在网络通信中,由于NAT(Network Address Translation)的存在,两个位于不同私有网络中的主机之间很难直接进行UDP通信。为了克服这一...

    p2p UDP打洞 C++程序

    3. **NAT打洞**:学习NAT的工作方式,包括端口映射和如何利用STUN(Simple Traversal of UDP through NATs)、TURN(Traversal Using Relays around NATs)和ICE(Interactive Connectivity Establishment)等技术...

    DIOCP_P2P_打洞服务器和客户端源码

    "P2P_SERVER" 文件夹则可能包含打洞服务器的源代码,这部分代码通常负责分配端口,处理客户端的连接请求,协助客户端完成NAT打洞等。 总体来说,这个项目是一个学习和研究P2P网络通信,特别是NAT穿透和打洞技术的...

Global site tag (gtag.js) - Google Analytics