`
- 浏览:
322827 次
- 性别:
- 来自:
成都
-
为什么网上讲到的P2P打洞基本上都是基于UDP协议的打洞?难道TCP不可能打洞?还是TCP打洞难于实现?
假设现在有内网客户端A和内网客户端B,有公网服务端S。
如果A和B想要进行UDP通信,则必须穿透双方的NAT路由。假设为NAT-A和NAT-B。
A发送数据包到公网S,B发送数据包到公网S,则S分别得到了A和B的公网IP,
S也和A B 分别建立了会话,由S发到NAT-A的数据包会被NAT-A直接转发给A,
由S发到NAT-B的数据包会被NAT-B直接转发给B,除了S发出的数据包之外的则会被丢弃。
所以:现在A B 都能分别和S进行全双工通讯了,但是A B之间还不能直接通讯。
解决办法是:A向B的公网IP发送一个数据包,则NAT-A能接收来自NAT-B的数据包
并转发给A了(即B现在能访问A了);再由S命令B向A的公网IP发送一个数据包,则
NAT-B能接收来自NAT-A的数据包并转发给B了(即A现在能访问B了)。
以上就是“打洞”的原理。
但是TCP和UDP在打洞上却有点不同。这是因为伯克利socket(标准socket规范)的
API造成的。
UDP的socket允许多个socket绑定到同一个本地端口,而TCP的socket则不允许。
这是这样一个意思:A B要连接到S,肯定首先A B双方都会在本地创建一个socket,
去连接S上的socket。创建一个socket必然会绑定一个本地端口(就算应用程序里面没写
端口,实际上也是绑定了的,至少java确实如此),假设为8888,这样A和B才分别建立了到
S的通信信道。接下来就需要打洞了,打洞则需要A和B分别发送数据包到对方的公网IP。但是
问题就在这里:因为NAT设备是根据端口号来确定session,如果是UDP的socket,A B可以
分别再创建socket,然后将socket绑定到8888,这样打洞就成功了。但是如果是TCP的
socket,则不能再创建socket并绑定到8888了,这样打洞就无法成功。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
UDP打洞测试程序,实现点对点信息传输,C#提供了Sockets来进行套接字的编程,里面包含了TcpClient和UdpClient。用过的大家都知道Tcp发送消息更安全,而Udp传送数据容易丢包,但速度快,能穿越防火墙。目前比较流行的...
语音即时通信源码(非UDP打洞),协议TCP.
TCP UDP 打洞技术,作为基础了解,值得一看。
超经典的TCP打洞程度源代码。目前网上的全是UDP打洞,很少有TCP方面的。
udp tcp打洞测试.zip
穿越nat需要打洞,这个资源里面介绍了udp和tcp打洞方式 并有源代码
如果下载过我的UDP打洞代码的话,可能会知道,UDP协议下的打洞实现传输速度快,但是丢包很严重;如果需要传输重要文件、对丢包进行检测的话,使用TCP协议就对了。
清晰描述udp打洞的原理;局域网与局域网之间通讯的好方法;腾讯qq局域网之间也是这个原理。
c++ 版udp打洞实现,server放到一个有固定IP的服务上,两个client借助server打洞后直接通讯.
java源代码来说明tcp穿越NAT的原理。
穿越nat需要打洞,这个资源里面介绍了udp和tcp打洞方式 有详细的实现原理和步骤
演示了vb中如何使用UDP协议进行UDP“打洞”,其中还含有代理服务器的演示代码
p2p点对点通信 udp打洞,穿越路由器 可外网通信 C#源代码,很难得的demo资料,和大家分享。
tcp/udp 打洞实现 ,仅做参考 打洞服务器源码 stunserver stunserver
本项目是UDP项目,内含源码和教程可以直接部署,创作不易欢迎交流
同时这里有网络打洞的示例,对于tcp不好应用的场景,用这个传输很6. 实测10M带宽,迅雷全速1MB/S左右,同时传输图像,无雪花卡顿,延迟10s左右,这个是我14年研究了封装的,所有UDT部分的源码停留在14年。 里面还有...
.NET6 Socket编程实现内网穿透,UDP,TCP打洞实现点对点直连,通过tcp转发,http1.1代理,socks5代理,实现访问内网web ,内网桌面,及其它TCP上层协议服务 .NET6 Socket编程实现内网穿透,UDP,TCP...
此版本原来是UDP通讯,尝试过各种方法实现UDP打洞,均效果不好,后来改成TCP通讯方式. 故QQ类库组件中有TCPSocketClient,TCPSocketServer,UDPSocket三种,目前只用到TCPSocketClient,TCPSocketServer两个组件了.
P2P-NAT 是一个 P2P代理,提供了NAT的功能,也提供了防火墙的功能,一个最简的P2P代理必须具有锥形NAT对Udp通信支持的功能,并允许应用程序利用Udp打洞技术建立强健的P2P连接。 回环转换 当NAT的私网内部机器想通过公共...
在收集了大量的“打洞”技术可以穿越的NAT设备和网络的数据以后,我们发现82%的已测NAT设备支持UDP形式的“打洞”穿越,64%的已测NAT设备支持TCP流形式的“打洞”穿越。由于重量级p2p应用程序(如,VOIP、BT、在线...