有没有可以将一条 TCP 链接转成多路 TCP 链接的轮子
比如说我电脑上现在有网卡 A,网卡 B 。 对于一条 TCP 链接,可以从 A 和 B 口一起出去到目的地。先到的自然先组装成完整的。重复的抛弃。
这样的话即使网卡 A down 掉,这条链接依然可用。
我的想法是 KCPTUN 可以将有状态的 TCP 链接转为无状态的 UDP 报,那就可以在 KCPTUN 中间加一条通道,这个通道是 TCP 协议传输的,并且可以绑定多张网卡,N 张网卡就从 N 个出口发送,到达目的地去掉重复的包,然后在另一端再发给 KCPTUN 的服务端。
不知道现成的有没有这样的轮子
1
opengps 2021-09-27 19:58:21 +08:00
问题来了,你怎么从应用层决定一个链接走哪块网卡?这问题我以前做通信架构时候同样困扰过
|
3
bybyte OP @opengps 就是你网卡 A 的 IP 比如是 10.0.0.1 那你把套接字绑定到 10.0.0.1:0 就可以了,端口系统会自动分配,然后这个套接字就是从这个网卡出去了
|
5
march1993 2021-09-27 20:10:56 +08:00
tcp in tcp 性能是非常差的。。所以你要的是一种魔改的同时绑定两条 tcp 拥塞的套接字方案
|
8
chinafeng 2021-09-27 20:46:09 +08:00
MPTCP ?
|
10
ForgotFun 2021-09-28 10:46:17 +08:00
还真有这样的设备,就是用 MPTCP 协议 https://forgotfun.org/2021/09/mycareer.html#2021
|
11
zagfai 2021-09-28 10:56:35 +08:00
现在有这样的技术了,手机有些是支持双 wifi 加上手机网络,3 链路收发数据,打游戏贼稳定,不知道能不能在应用层实现。
|
12
yolee599 2021-09-28 20:09:29 +08:00 via Android
用 MPTCP
|
13
jedihy 2021-09-29 10:37:53 +08:00
MPTCP 不同的子流并没有数据重叠?
|
14
2i2Re2PLMaDnghL 2021-09-30 17:52:15 +08:00
两个链路延迟不一致的话可能会频繁触发拥塞控制
比如一个链路你发了三个 seg 另一个链路还没到的话,会触发快速重传并且窗口减半。 |
15
flynaj 2021-09-30 22:56:18 +08:00 via Android
TCP 肯定要断开的,看你的程序怎么重连。所以现在 HTTP3 走 UDP,这也是其中一个原因。
|
16
heiher 2021-10-19 11:45:06 +08:00
如果考虑的是部分物理链路不稳定,可以使用多网卡 Bound 解决。对外的网络地址还是一个,数据会在多网卡上均衡。
|