我想实现这样的东西 服务端监听一个端口 1,并创建监听另外一个端口 2。 客户端启动访问服务端的端口 1,建立连接 客户访问服务端的端口 2 服务端通过端口 2 转发数据到端口 1 再到客户端。 这样的 TCP 怎么实现呢?语言采用 golang,实现简单吗?
1
baiyi 2019-06-28 16:07:18 +08:00
我捋了一下,你是想实现个聊天软件吗
|
2
sunny352787 2019-06-28 16:08:55 +08:00 1
数据转发? frp ?
|
4
rffan OP @sunny352787 感谢大佬。
|
5
glacer 2019-06-28 16:14:38 +08:00
ssh 端口转发就可以了
|
7
rffan OP @glacer
不能实现。原因是目标要转发的客户端没有公网 IP 无法执行转发。sunny 大佬发的 frp 可能符合我的要求,我需要看他的实现方式,自己用 golang 重写。 |
8
BingoXuan 2019-06-28 16:39:42 +08:00
iptable 转发应该可以实现
|
9
exch4nge 2019-06-28 16:54:47 +08:00
只有我一个人没看明白楼主想说什么吗?
|
10
sunny352787 2019-06-28 17:01:59 +08:00
@rffan 直接用就好啦...重写干啥啊...
|
11
rffan OP @sunny352787 没仔细看他实现的语言。我是想顺便学习了一下 TCP 相关的知识。看了也是 golang 实现的,可以直接上了。
|
13
albertofwb 2019-06-28 17:16:02 +08:00 via Android
ngrok 用于将本地端口映射到公网 IP,楼主的需求有成熟的实现,叫做“ TCP 本地端口转发”,具体请看《 lcx 端口转发》
|
14
turi 2019-06-28 17:25:24 +08:00
你都说的这么清楚了,还不知道怎么实现?
不清楚的地方画个图 ,有时能清楚些 |
15
sujin190 2019-06-28 17:43:13 +08:00
openvpn + iptable 吧,你这个应该是每一个客户链接端口 2 就创建一个端口 1 到内网本地的链接吧,端口转发 openvpn + iptable 应该是最完整的了,tcp udp,啥都能转发,自己写的话,要么做多路复用要么有个控制连接通知本地打开新连接
|
17
BingoXuan 2019-06-28 18:20:22 +08:00
@sujin190
我想监听端口 a,把 tcp 数据转换成 udp 数据发到端口 b。同样的,端口 b 返回的 udp 数据也转换为 tcp 数据返回给端口 a。我试过用 socat 来转换,但发现效率不高,容易丢包。最后我自己写了一个多路复用的工具。能用但我想知道有没有其他实现 |
18
zgl263885 2019-06-28 18:34:56 +08:00 via iPhone
Frp 反向代理或者走 v,p,n
|
19
sujin190 2019-06-28 20:49:43 +08:00 via Android
@BingoXuan 这样不行吧,tcp 连接是面向连接的,数据都是粘包有序的,你转发给不粘包无序的 udp,到时候数据格式都解不出来了吧,难道你又单独做了分帧和排序?那又是何苦呢,都用 tcp 不好么
|
21
BingoXuan 2019-06-29 00:06:14 +08:00
@sujin190
我也不想啊,主要是硬件架构很神奇。通过 udp 和 fpga 通讯。由于那个网卡是片内总线构建的,发 udp 过去是不会丢数据,顺序也不会乱。但瓶颈在 arm 端,由于 fpga 发包速度非常快,2w/s。arm 端只能用 c++写的多路复用可以 hold 得住不丢包。 我也不想这样通讯,但技术选型我没话事权。明明可以走共享内存,为什么要走 udp ? |
22
msg7086 2019-06-29 01:05:12 +08:00
是有什么理由不能用 SSH 隧道吗?
|