读书人

关于TCP打洞的有关问题

发布时间: 2013-01-22 10:23:54 作者: rapoo

关于TCP打洞的问题
最近想做个TCP打洞的测试,但是我看网上好像说是TCP打洞需要设备支持,想请问一下各位:
一、是不是所有设备都支持TCP打洞?
二、TCP打洞和UDP打洞流程有没有什么不同?
三、我下面这个思路是否可行?

设备a,b;服务器S

1.a和b分别连接服务器S
2.a向S发送连接B请求,同时给S一个端口号
3.a监听上面端口
4.S向b传达a请求,并将a的ip及端口号给b
5.b通过ip和端口连接a
6.打洞成功

我这里面与通常的不同是在第5步后,一般正常情况下应该:
6.b监听相同的端口
7.b向服务器S发送同意请求回话
8.S向a发送可以连接回复
9.a连接b
10.打洞成功

如果我少了上面6,7,8,9步操作,在TCP上不知道是否可行?烦请各位不吝赐教。。。
[解决办法]
Mark~~
[解决办法]
显然不行,你那个根本就没有实现什么打洞, 只是通过服务器交换了下信息.
a 没有对 b 发起链接之前, a 的网关是不会把 b 的包转发给 a 的.
[解决办法]
花20分钟静心看一下几种NAT类型你就会明白打洞的原理了
[解决办法]
很多NAT和防火墙是集成的
对访问会有限制 比如 请求必须从内网先发起 否则会被过滤等(这样的NAT不是很多)
TCP每个包有ACK 而UDP没有
也就是说TCP从握手开始 就一直是双向的交互 而UDP不是

你的服务器必须架在公网 否则会有问题

建议你搜下ICE 包括各种NAT的穿越 有相关的RFC的
[解决办法]
我最近也在研究TCP穿透,但到目前还没穿透,有兴趣可以交流下
[解决办法]
1.TCP打洞和nat类型有很大的关系。支持TCP打洞的nat比支持UDP打洞的要低很多。
2.tcp打洞比UDP复杂很多,打洞前要进行nat类型检测,端口预测。打洞技术有stunt,NATBlaster,Peer-to-Peer NAT等。
3.不行

读书人网 >C++

热点推荐