首页
社区
课程
招聘
[讨论]关于 TCP打洞的碎事,我提观点,你们喷。
发表于: 2020-4-10 22:03 11881

[讨论]关于 TCP打洞的碎事,我提观点,你们喷。

2020-4-10 22:03
11881

如图中所述。
客户端1指定端口 例如12306  ;连接服务器后,服务器获得指定链路 【外网IP+Port(1)】
客户端2 无需指定端口,连接服务器获,用于获取  【外网IP+Port(1)】 

客户端1断开连接  【按理,我们假定  客户1->服务端:链路  {  客户1->路由->公网 }  继续有效】 
本地 服务端1  启动 ,指定本地 端口 12306。继续占用 客户1链路 。

 客户2-> 【外网IP+Port(1)】 !=成功

那么 问题 来 了。为什么不成功。
首先客户端结束应该是会调用    closesocket()  用来释放本地套接字->端口。
那么,应该会send一个包 告诉服务器,我退出了。
那么,假定这么搞 了 ,路由或公网会否检测 该包,实现链路有效判断呢?从而使该链路 失效 。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2020-4-10 22:14 被ffashi编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (21)
雪    币: 772
活跃值: (987)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2

现在最怀疑的 就是 链路不可 复用 。
2020-4-10 22:18
0
雪    币: 8188
活跃值: (2842)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
3
了解一下tcp的三次握手,了解一下tcp的ack和seq,不要想当然和以为。tcp打洞如果能做出产品落地,你可以开一个独角兽公司了。

最后于 2020-4-10 22:35 被layerfsd编辑 ,原因:
2020-4-10 22:32
0
雪    币: 772
活跃值: (987)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4

还是困惑
2020-4-10 23:10
0
雪    币: 16457
活跃值: (13193)
能力值: ( LV15,RANK:595 )
在线值:
发帖
回帖
粉丝
5
TCP打洞相比于UDP的难点是如何建立握手,内核对于三次握手中不一致的SYN ACK包都会丢弃,这里不仅仅是双方的内核,还包括中间路由器、ISP的内核,所以很难进行稳定打穿。

“一些对tcp打洞有研究的人”想的也太简单了,本地端口复用是不够的,为什么这么说,因为那篇文章就是我写的(https://evilpan.com/2015/10/31/p2p-over-middle-box/),希望没有误人子弟,想了解研究的理论可以看看paper,然后再看看理论和实践的差距。
2020-4-11 11:08
0
雪    币: 772
活跃值: (987)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
了解,谢谢解惑。
2020-4-12 11:19
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
ffashi 还是困惑
抓个tcp包分析下就容易理解了
2020-4-13 09:16
0
雪    币: 30050
活跃值: (2422)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
老外曾经有一篇论文讨论个这个问题(10~20年前了),最后通过实验得出的结论是:加上驱动程序进行收发数据包,那么TCP打洞可以达到UDP打洞的成功率。但如果要上驱动了,意义已经不大。
2020-4-13 22:28
0
雪    币: 1423
活跃值: (2131)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
各位都是 学术型 高手 啊。。 我一脸懵逼的近来。。
2020-4-16 14:43
0
雪    币: 883
活跃值: (884)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
TCP安全性问题很多。国外开始以UDP为主的
2020-4-16 21:53
0
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
11
了解下对称型NAT和锥形NAT。
2020-4-17 08:38
0
雪    币: 20
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12

你这个流程似乎有些问题,不知道你的nat类型是怎么样的
如果服务端1侧不是full cone nat,那么第二步之后,服务端1还需要给客户端2的ip+port发送数据包。如果不这么做,服务端1处的nat就没有对应的映射,那么客户端2的包就没法进入nat。
不过,正如5楼所说,如果网络的中间设备使用了seq检测之类的技术,上面这个方法就行不通了,所以最好的方法就是两端同时connect。
我自己试验的时候,在两边都是port restricted nat的时候已经可以成功打洞了

最后于 2020-11-2 14:33 被mb_dtudyjqc编辑 ,原因:
2020-11-2 12:31
0
雪    币: 304
活跃值: (507)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
13
NAT什么的就不要讨论了,没有意义,NAT不就分4个类型,123能打洞,4不能打洞,除非你有神一样的随机预测能力。

tcp打洞不难啊,比udp好用多了,udp会被ISP各种qos。
首先设计一套 Listen Accept Connect 信令。
服务端A发Listen给服务器,服务器拿到A的外网地址。注意服务端是保持连接的,不需要关闭,当然你想关闭也行,我这边是多点对单点的结构,服务端永远在线,不关闭与服务器的连接。
客户端B发Connect给服务器,服务器拿到B的外网地址。服务器发送Accept携带B的外网地址给A。服务器发送Connec回应携带A的外网地址给B。B随后关闭与服务器的连接。
A端口复用创建socket,然后connect B的地址
B端口复用创建socket,然后connect A的地址

怎样,简单吧,就是AB两端拿到地址后connect互怼。大部分tcp打洞都是这样玩的,比如teamviewer,anydesk之类的。。

上述流程我做了一个基于p2p的vpn,没有公开发布,一直在自己使用,没有任何问题。跨平台支持windows/linux/solaris/hpux/aix....

打洞的成功率?只要是NAT123,1次成功,没有失败的可能性。
2020-11-3 10:27
0
雪    币: 477
活跃值: (1412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
MengXP NAT什么的就不要讨论了,没有意义,NAT不就分4个类型,123能打洞,4不能打洞,除非你有神一样的随机预测能力。 tcp打洞不难啊,比udp好用多了,udp会被ISP各种qos。 首先设计一 ...
发listen给服务器?listen怎么发呢
2020-11-3 11:36
0
雪    币: 304
活跃值: (507)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
15
通信报文信令。。
2020-11-3 11:56
0
雪    币: 304
活跃值: (507)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
16
mb_foyotena 发listen给服务器?listen怎么发呢
通信报文信令。。
2020-11-3 11:56
0
雪    币: 477
活跃值: (1412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
MengXP 通信报文信令。。
服务端listen,客户端syn,还能主动发listen?
2020-11-3 13:01
0
雪    币: 304
活跃值: (507)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
18
mb_foyotena 服务端listen,客户端syn,还能主动发listen[em_13]?

mdzz

最后于 2020-11-3 20:06 被MengXP编辑 ,原因:
2020-11-3 13:17
0
雪    币: 477
活跃值: (1412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
MengXP 我特么都说了是信令。。。 #define CONN_TYPE_P2P 0x43503250 //P2PC typedef enum _P2P_CMD { P2pCmdLis ...
你说自定义的不就简单明了了
2020-11-3 19:48
0
雪    币: 304
活跃值: (507)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
20
mb_foyotena 你说自定义的不就简单明了了
我都说了首先设计一套 listen accept connect 信令,下面还给了详细步骤,自己语文能力不行,脑瓜子理解不了,就别赖别人好吧。
2020-11-3 19:56
0
雪    币: 477
活跃值: (1412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
MengXP 我都说了首先设计一套 listen accept connect 信令,下面还给了详细步骤,自己语文能力不行,脑瓜子理解不了,就别赖别人好吧。
杠精?您这语文够牛逼的,设计一套计算机信令,难道等于自己做一套计算机?
2020-11-3 20:00
0
雪    币: 477
活跃值: (1412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
MengXP 我都说了首先设计一套 listen accept connect 信令,下面还给了详细步骤,自己语文能力不行,脑瓜子理解不了,就别赖别人好吧。
算了,不跟傻子扯,弄一破玩意还趾高气扬,要不是以为有什么高科技能让别人主动连,才懒得问呢,结果啥也不是
2020-11-3 20:03
0
游客
登录 | 注册 方可回帖
返回
//