讨论:为什么没有”pluggable multipath tcp” - V2EX
Siril

讨论:为什么没有”pluggable multipath tcp”

  •  
  •   Siril Oct 25, 2016 3314 views
    This topic created in 3490 days ago, the information mentioned may be changed or developed.
    标题的 pluggable 借自 tor 的 obfsproxy ,设想的用法相同。

    设想 site a 到 site b 有带宽、延迟相近的多条链路,之间用 ovpn 连接。
    例如 site a 有 3 条 20Mbps/4Mbps 的 pppoe ,
    site b 有 1 条 100M 对等的固定 ip 线路。
    为何没有一种超级简单的办法,从 site a 到 site b 的一个 tcp 连接(比如说 ovpn )可以负载均衡到不同线路上呢?可以获得接近 60Mbps/12Mbps 的带宽呢?

    或者 udp ?

    其中的主要技术障碍在哪,造个轮子出来有多难?
    Supplement 1    Oct 25, 2016
    为了简化问题,先不讨论具有拥塞控制的 tcp , 假设搞一个 udp over udp/kcp/tcp 的 tunnel ,
    也避免讨论使用 ipset 策略路由等手段在 1 台机器上连接同一个目标 ip 走不同公网出口。
    举例描述:
    b 侧一台机器,监听一个端口,映射到公网, 收到数据进行 缓存&排序&地址转换 发给 b 侧的 vpn server ;
    其缓存的时间是 3 条线路最慢的那条的延迟稍增加一点;
    a 侧,起 4 台 vm ,
    其中 3 台 vm 使用不同的网关,内网 ip 192.168.1.11/12/13, 分别监听一个端口,收到数据转发给 b 侧的机器;
    1 台 vm 运行 1 个程序监听 localhost:xxxx ,
    将收到的数据负载均衡到 11 12 13 3 台机器上出去, 并运行 vpn client 连接到 localhost:xxxx
    如果 udp over udp ,丢包率=3 条线路叠加,延迟约等于其中最慢的线路的延迟。

    这个过程应该甚至不需要 root 权限(除了 vpn server 和 client 未必),不是很容易 kernel panic 吧。

    然而并无现成的轮子可用? 是我在哪里把问题想地简单了, 或者需求较少的原因?
    6 replies    2024-10-30 01:09:02 +08:00
    bazingaterry
        1
    bazingaterry  
       Oct 25, 2016 via iPhone
    有,路由器支持链路叠加即可。
    raysonx
        2
    raysonx  
       Oct 25, 2016
    如果 site A 到 B 有多条 TCP 连接,是可以把不同的连接均衡到不同链路上的。
    但是,如果是同一条 TCP 连接的话, TCP 在设计上一条连接只有一个 source IP 和一个 destination IP ,如果你的 site A 不同链路 IP 是不同的,就无法单纯通过 TCP 解决了。当然,套层隧道还是可以的。
    UDP 本身无连接,只要你设计好上层协议毫无压力。
        3
    est  
       Oct 25, 2016
    tcp 是内核实现的。。。内核做 module 也是可行的。。只不过需要 root 。很多 openvz 的可能各种兼容性问题。。。

    还有就是代码写的不好就 kernel panic 了。。

    要多链路多 demultiplexing 的方案还是有的,基于 UDP 和 IP 的应该都有。免费开源的就不知道咯。
    jedihy
        4
    jedihy  
       Oct 25, 2016
    多路 TCP 没你想的那么简单,目前在学术界是一个热门的研究领域,在数据中心网络中有部分已经在使用了。
    举一个简单的例子,多路 TCP 那么多乱序的怎么去拼接?广域网内各链路拥塞程度不一样,整个传输性能瓶颈会卡在最慢的那条流上,如何避免,重发?拥塞窗口怎么控制?丢一个包降多少窗口?是不是会增加丢包率?每条流权重是不是一样,不一样的话怎么控制?
    flyfishcn
        5
    flyfishcn  
       Oct 25, 2016
    带宽叠加都是基于多连接的。基于链路聚合这种的只能完成 OSI 二层下的内容。一旦涉及协议了,单连接是无法聚合的。
    bybyte
        6
    bybyte  
       Oct 30, 2024
    有的,我试过,一个 tcp 链接通过多个链路发出,实现思路就是在本地把 tcp 打散为基于 udp 的可靠协议,例如 kcp ,然后 udp 想怎么发就怎么发了,通过 N 个链路转发都行,只要发到目的地,然后把 udp 再转回去就行了,即使其中任意一条链路断开或者延迟都不影响这一整条 tcp 链接都断开,但是这样做就会浪费很大的带宽,但是提高了可用性
    About     Help     Advertise     Blog     API     FAQ     Solana     1011 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 38ms UTC 23:07 PVG 07:07 LAX 16:07 JFK 19:07
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86