V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

每个人的时间,资源是有限的,有的时候你或许能够想到很多 idea,但是由于现实的限制,却并不是所有的 idea 都能够成为现实。

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
bybyte
V2EX  ›  奇思妙想

TCP 转多路 TCP?

  •  
  •   bybyte · 2021-09-27 19:46:24 +08:00 · 3464 次点击
    这是一个创建于 1178 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    16 条回复    2021-10-19 11:45:06 +08:00
    opengps
        1
    opengps  
       2021-09-27 19:58:21 +08:00
    问题来了,你怎么从应用层决定一个链接走哪块网卡?这问题我以前做通信架构时候同样困扰过
    bybyte
        2
    bybyte  
    OP
       2021-09-27 20:02:23 +08:00
    @opengps 这个很简单,一行代码就搞定了,你要走哪个网卡,直接把 socket 绑定到那个网卡就可以了,已经实测。
    bybyte
        3
    bybyte  
    OP
       2021-09-27 20:05:47 +08:00
    @opengps 就是你网卡 A 的 IP 比如是 10.0.0.1 那你把套接字绑定到 10.0.0.1:0 就可以了,端口系统会自动分配,然后这个套接字就是从这个网卡出去了
    opengps
        4
    opengps  
       2021-09-27 20:10:49 +08:00
    @bybyte 我需要问的是发送数据,不是接受数据,socket 作为客户端发送时候是不带绑定的
    march1993
        5
    march1993  
       2021-09-27 20:10:56 +08:00
    tcp in tcp 性能是非常差的。。所以你要的是一种魔改的同时绑定两条 tcp 拥塞的套接字方案
    march1993
        6
    march1993  
       2021-09-27 20:11:46 +08:00
    @march1993 不在内核做就实现不了
    bybyte
        7
    bybyte  
    OP
       2021-09-27 20:17:52 +08:00
    @opengps 可以绑定的
    chinafeng
        8
    chinafeng  
       2021-09-27 20:46:09 +08:00
    MPTCP ?
    bybyte
        9
    bybyte  
    OP
       2021-09-27 21:17:31 +08:00
    @chinafeng 确实这个可以,但需要内核,且双方支持,就看什么时候能普及起来了。。
    ForgotFun
        10
    ForgotFun  
       2021-09-28 10:46:17 +08:00
    还真有这样的设备,就是用 MPTCP 协议 https://forgotfun.org/2021/09/mycareer.html#2021
    zagfai
        11
    zagfai  
       2021-09-28 10:56:35 +08:00
    现在有这样的技术了,手机有些是支持双 wifi 加上手机网络,3 链路收发数据,打游戏贼稳定,不知道能不能在应用层实现。
    yolee599
        12
    yolee599  
       2021-09-28 20:09:29 +08:00 via Android
    用 MPTCP
    jedihy
        13
    jedihy  
       2021-09-29 10:37:53 +08:00
    MPTCP 不同的子流并没有数据重叠?
    2i2Re2PLMaDnghL
        14
    2i2Re2PLMaDnghL  
       2021-09-30 17:52:15 +08:00
    两个链路延迟不一致的话可能会频繁触发拥塞控制
    比如一个链路你发了三个 seg 另一个链路还没到的话,会触发快速重传并且窗口减半。
    flynaj
        15
    flynaj  
       2021-09-30 22:56:18 +08:00 via Android
    TCP 肯定要断开的,看你的程序怎么重连。所以现在 HTTP3 走 UDP,这也是其中一个原因。
    heiher
        16
    heiher  
       2021-10-19 11:45:06 +08:00
    如果考虑的是部分物理链路不稳定,可以使用多网卡 Bound 解决。对外的网络地址还是一个,数据会在多网卡上均衡。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1019 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:45 · PVG 04:45 · LAX 12:45 · JFK 15:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.