`
zhanglm
  • 浏览: 76079 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

tcp打洞。转的

    博客分类:
  • java
 
阅读更多
[b]  1、 S启动两个网络侦听,一个叫【主连接】侦听,一个叫【协助打洞】的侦听。

 2、 A和B分别与S的【主连接】保持联系。

 3、当A需要和B建立直接的TCP连接时,首先连接S的【协助打洞】端口,并发送协助连接申请。同时在该端口号上启动侦听。注意由于要在相同的网络终端上绑定到不同的套接字上,所以必须为这些套接字设置 SO_REUSEADDR 属性(即允许重用),否则侦听会失败。
 4、 S的【协助打洞】连接收到A的申请后通过【主连接】通知B,并将A经过NAT-A转换后的公网IP地址和端口等信息告诉B。

 5、 B收到S的连接通知后首先与S的【协助打洞】端口连接,随便发送一些数据后立即断开,这样做的目的是让S能知道B经过NAT-B转换后的公网IP和端口号。

 6、 B尝试与A的经过NAT-A转换后的公网IP地址和端口进行connect,根据不同的路由器会有不同的结果,有些路由器在这个操作就能建立连接(例如我用的TPLink R402),大多数路由器对于不请自到的SYN请求包直接丢弃而导致connect失败,但NAT-A会纪录此次连接的源地址和端口号,为接下来真正的连接做好了准备,这就是所谓的打洞,即B向A打了一个洞,下次A就能直接连接到B刚才使用的端口号了。

 7、 客户端B打洞的同时在相同的端口上启动侦听。B在一切准备就绪以后通过与S的【主连接】回复消息“我已经准备好”,S在收到以后将B经过NAT-B转换后的公网IP和端口号告诉给A。

 8、 A收到S回复的B的公网IP和端口号等信息以后,开始连接到B公网IP和端口号,由于在步骤6中B曾经尝试连接过A的公网IP地址和端口,NAT-A纪录了此次连接的信息,所以当A主动连接B时,NAT-B会认为是合法的SYN数据,并允许通过,从而直接的TCP连接建立起来了。
[/b]
分享到:
评论

相关推荐

    C# Tcp 打洞

    在IT领域,"TCP打洞"(Hole Punching)是一种网络通信技术,主要用于解决NAT(网络地址转换)环境下的对等网络连接问题。在NAT设备后面,每台设备都有一个私有IP地址,而对外只显示一个公共IP地址。TCP打洞允许两台...

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

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

    TCP 打洞演示代码

    在IT领域,TCP打洞(TCP Hole Punching)是一种网络技术,主要用于穿透网络地址转换(NAT),使得位于不同NAT后的两台设备能够直接通信。这种技术在P2P(点对点)网络中尤为关键,因为它允许不依赖中心服务器进行...

    TCP打洞参考

    压缩包内的文件,如`TCP实现P2P通信`、`TCP穿越NAT的方法`、`TCP打洞(附源代码).doc`,很可能是详细的文档或源代码示例,用于解释TCP打洞的实现细节。`global.cpp`和`global.h`可能包含的是通用的函数和类定义,`...

    TCP打洞—高质量的网络通信技巧

    TCP打洞是一种网络通信技术,主要用于点对点(P2P)通信,特别是在存在网络地址转换(NAT)的环境中。TCP打洞是基于传输控制协议(TCP)的,与UDP打洞相比,TCP提供了更可靠的连接,因为它具有错误检测和纠正机制,...

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

    本文将详细探讨如何使用TCP实现P2P通信,以及TCP穿越NAT的方法,特别是TCP打洞技术,并提供相关的源代码参考。 首先,TCP实现P2P通信的关键在于建立可靠的端到端连接。在P2P网络中,每个节点都有一个私有IP地址,这...

    TCP-P2P.rar_P2P nat实现C++_TCP 打洞 _p2p TCP_tcp_打洞

    描述中的“TCP实现P2P通信、TCP穿越NAT的方法、TCP打洞(附源代码).doc”进一步确认了这个压缩包包含了一篇文档,详细介绍了如何通过TCP协议进行P2P通信,NAT穿越的技术以及TCP打洞的实践方法,并且提供了源代码。...

    tcp net hole (tcp 打洞)

    tcp nethole tcp打洞 c++

    基于C++的TCP打洞聊天程序

    【TCP打洞聊天程序】是一种使用C++编程语言实现的网络通信工具,它基于TCP协议进行数据传输,并利用了P2P(点对点)技术中的打洞原理,旨在为初学者提供一个学习网络编程的实例。在这个项目中,开发者会接触到C++的...

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

    本篇文章将深入探讨如何利用TCP实现P2P通信,以及TCP穿越NAT的策略,特别是TCP打洞技术。 首先,TCP实现P2P通信的核心在于对等节点之间的连接建立。在P2P网络中,每个节点都有一个私有IP地址,可能被NAT设备隐藏。...

    TCP打洞NAT

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

    TCP/UDP打洞

    在TCP打洞过程中,通常需要一方先建立一个TCP连接,然后另一方通过该连接进行数据传输。 - **步骤**:一方(通常是客户端)向另一方的公共IP地址发起TCP连接请求;如果对方所在的NAT设备支持TCP打洞,则会为该连接...

    udp和tcp两种方式打洞,有源代码

    压缩包内的文件名称“TCP参考MakeTCPHole.rar”可能包含了一个关于TCP打洞的示例项目或教程,可能包括了如何构建和配置TCP打洞的步骤以及源代码。“udpp2p.rar”则可能包含了关于使用UDP进行点对点(P2P)通信的源...

    TCP.rar_TCP 打洞 _TCP打洞_hole punching_java Tcp _site:www.pudn.com

    在TCP打洞(TCP Hole Punching)技术中,我们主要探讨如何在NAT(网络地址转换)环境下实现两个内部网络主机之间的直接通信。NAT通常会阻止这种直接连接,因为每个内部主机都通过一个公共IP地址和多个私有IP地址进行...

    UDPDaDong.rar_C# 丢包_TCP 打洞 _TCPClient_TCP打洞_udp聊天C

    UDP打洞测试程序,实现点对点信息传输,C#提供了Sockets来进行套接字的编程,里面包含了TcpClient和UdpClient。用过的大家都知道Tcp发送消息更安全,而Udp传送数据容易丢包,但速度快,能穿越防火墙。目前比较流行的...

    p2p-tcp.rar_P2P 打洞_P2PServer_TCP P2P_TCP 打洞 _p2p tcp

    2. **UDP打洞与TCP打洞的区别**:虽然TCP打洞比UDP打洞更为复杂,因为TCP的三次握手过程需要正确完成才能建立连接。UDP是无连接的,所以打洞相对简单,但TCP提供更好的可靠性和错误校验。 3. **STUN(Session ...

    易语言打洞客户端源码,易语言打洞测试服务器源码,易语言P2P打洞

    TCP打洞则更复杂,因为TCP连接需要经过三次握手建立,但在特定条件下也可以实现。 易语言P2P打洞源码可能包含以下组件: 1. 客户端程序:负责发起打洞请求,通过与服务器交互,尝试与另一内网设备建立连接。 2. ...

    TCP.rar_TCP 打洞 _TCP打洞_site:www.pudn.com_打洞

    这是关于TCP打洞技术的资料,通过学习TCP打洞技术,可以避开服务器,直接通信,有很大效率的提高

Global site tag (gtag.js) - Google Analytics