TCP 转多路 TCP?

2021-09-27 19:46:24 +08:00
 bybyte

有没有可以将一条 TCP 链接转成多路 TCP 链接的轮子

比如说我电脑上现在有网卡 A,网卡 B 。 对于一条 TCP 链接,可以从 A 和 B 口一起出去到目的地。先到的自然先组装成完整的。重复的抛弃。

这样的话即使网卡 A down 掉,这条链接依然可用。

我的想法是 KCPTUN 可以将有状态的 TCP 链接转为无状态的 UDP 报,那就可以在 KCPTUN 中间加一条通道,这个通道是 TCP 协议传输的,并且可以绑定多张网卡,N 张网卡就从 N 个出口发送,到达目的地去掉重复的包,然后在另一端再发给 KCPTUN 的服务端。

不知道现成的有没有这样的轮子

3475 次点击
所在节点    奇思妙想
16 条回复
opengps
2021-09-27 19:58:21 +08:00
问题来了,你怎么从应用层决定一个链接走哪块网卡?这问题我以前做通信架构时候同样困扰过
bybyte
2021-09-27 20:02:23 +08:00
@opengps 这个很简单,一行代码就搞定了,你要走哪个网卡,直接把 socket 绑定到那个网卡就可以了,已经实测。
bybyte
2021-09-27 20:05:47 +08:00
@opengps 就是你网卡 A 的 IP 比如是 10.0.0.1 那你把套接字绑定到 10.0.0.1:0 就可以了,端口系统会自动分配,然后这个套接字就是从这个网卡出去了
opengps
2021-09-27 20:10:49 +08:00
@bybyte 我需要问的是发送数据,不是接受数据,socket 作为客户端发送时候是不带绑定的
march1993
2021-09-27 20:10:56 +08:00
tcp in tcp 性能是非常差的。。所以你要的是一种魔改的同时绑定两条 tcp 拥塞的套接字方案
march1993
2021-09-27 20:11:46 +08:00
@march1993 不在内核做就实现不了
bybyte
2021-09-27 20:17:52 +08:00
@opengps 可以绑定的
chinafeng
2021-09-27 20:46:09 +08:00
MPTCP ?
bybyte
2021-09-27 21:17:31 +08:00
@chinafeng 确实这个可以,但需要内核,且双方支持,就看什么时候能普及起来了。。
ForgotFun
2021-09-28 10:46:17 +08:00
还真有这样的设备,就是用 MPTCP 协议 https://forgotfun.org/2021/09/mycareer.html#2021
zagfai
2021-09-28 10:56:35 +08:00
现在有这样的技术了,手机有些是支持双 wifi 加上手机网络,3 链路收发数据,打游戏贼稳定,不知道能不能在应用层实现。
yolee599
2021-09-28 20:09:29 +08:00
用 MPTCP
jedihy
2021-09-29 10:37:53 +08:00
MPTCP 不同的子流并没有数据重叠?
2i2Re2PLMaDnghL
2021-09-30 17:52:15 +08:00
两个链路延迟不一致的话可能会频繁触发拥塞控制
比如一个链路你发了三个 seg 另一个链路还没到的话,会触发快速重传并且窗口减半。
flynaj
2021-09-30 22:56:18 +08:00
TCP 肯定要断开的,看你的程序怎么重连。所以现在 HTTP3 走 UDP,这也是其中一个原因。
heiher
2021-10-19 11:45:06 +08:00
如果考虑的是部分物理链路不稳定,可以使用多网卡 Bound 解决。对外的网络地址还是一个,数据会在多网卡上均衡。

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

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

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

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

© 2021 V2EX