关于 TCP

2019-06-28 15:54:03 +08:00
 rffan

我想实现这样的东西 服务端监听一个端口 1,并创建监听另外一个端口 2。 客户端启动访问服务端的端口 1,建立连接 客户访问服务端的端口 2 服务端通过端口 2 转发数据到端口 1 再到客户端。 这样的 TCP 怎么实现呢?语言采用 golang,实现简单吗?

2637 次点击
所在节点    问与答
25 条回复
baiyi
2019-06-28 16:07:18 +08:00
我捋了一下,你是想实现个聊天软件吗
sunny352787
2019-06-28 16:08:55 +08:00
数据转发? frp ?
rffan
2019-06-28 16:11:46 +08:00
@baiyi 我只想把内网的 3389 转发出来而已。公司没有路由权限,而且也没有独立 ip。
rffan
2019-06-28 16:12:22 +08:00
@sunny352787 感谢大佬。
glacer
2019-06-28 16:14:38 +08:00
ssh 端口转发就可以了
baiyi
2019-06-28 16:17:48 +08:00
@rffan #3 我理解错了,ngrok 这个也是类似的工具
rffan
2019-06-28 16:18:54 +08:00
@glacer
不能实现。原因是目标要转发的客户端没有公网 IP 无法执行转发。sunny 大佬发的 frp 可能符合我的要求,我需要看他的实现方式,自己用 golang 重写。
BingoXuan
2019-06-28 16:39:42 +08:00
iptable 转发应该可以实现
exch4nge
2019-06-28 16:54:47 +08:00
只有我一个人没看明白楼主想说什么吗?
sunny352787
2019-06-28 17:01:59 +08:00
@rffan 直接用就好啦...重写干啥啊...
rffan
2019-06-28 17:08:03 +08:00
@sunny352787 没仔细看他实现的语言。我是想顺便学习了一下 TCP 相关的知识。看了也是 golang 实现的,可以直接上了。
rffan
2019-06-28 17:08:36 +08:00
@BingoXuan 没有外网 IP。有外网 IP 都不需要转发。。。
albertofwb
2019-06-28 17:16:02 +08:00
ngrok 用于将本地端口映射到公网 IP,楼主的需求有成熟的实现,叫做“ TCP 本地端口转发”,具体请看《 lcx 端口转发》
turi
2019-06-28 17:25:24 +08:00
你都说的这么清楚了,还不知道怎么实现?

不清楚的地方画个图 ,有时能清楚些
sujin190
2019-06-28 17:43:13 +08:00
openvpn + iptable 吧,你这个应该是每一个客户链接端口 2 就创建一个端口 1 到内网本地的链接吧,端口转发 openvpn + iptable 应该是最完整的了,tcp udp,啥都能转发,自己写的话,要么做多路复用要么有个控制连接通知本地打开新连接
BingoXuan
2019-06-28 18:15:42 +08:00
@rffan
和内外网没什么关系吧,iptable 转发是对系统所拥有的网络资源进行转发而已
BingoXuan
2019-06-28 18:20:22 +08:00
@sujin190
我想监听端口 a,把 tcp 数据转换成 udp 数据发到端口 b。同样的,端口 b 返回的 udp 数据也转换为 tcp 数据返回给端口 a。我试过用 socat 来转换,但发现效率不高,容易丢包。最后我自己写了一个多路复用的工具。能用但我想知道有没有其他实现
zgl263885
2019-06-28 18:34:56 +08:00
Frp 反向代理或者走 v,p,n
sujin190
2019-06-28 20:49:43 +08:00
@BingoXuan 这样不行吧,tcp 连接是面向连接的,数据都是粘包有序的,你转发给不粘包无序的 udp,到时候数据格式都解不出来了吧,难道你又单独做了分帧和排序?那又是何苦呢,都用 tcp 不好么
sujin190
2019-06-28 20:50:49 +08:00
@BingoXuan 丢包就是 udp 导致的吧,另外的排序和重传算法实现不好的话,要慢死的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/578345

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX