V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Siril
V2EX  ›  宽带症候群

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

  •  
  •   Siril · 2016-10-25 09:22:30 +08:00 · 2555 次点击
    这是一个创建于 2960 天前的主题,其中的信息可能已经有所发展或是发生改变。
    标题的 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 ?

    其中的主要技术障碍在哪,造个轮子出来有多难?
    第 1 条附言  ·  2016-10-25 13:25:43 +08:00
    为了简化问题,先不讨论具有拥塞控制的 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 条回复    2024-10-30 01:09:02 +08:00
    bazingaterry
        1
    bazingaterry  
       2016-10-25 10:05:40 +08:00 via iPhone
    有,路由器支持链路叠加即可。
    raysonx
        2
    raysonx  
       2016-10-25 10:41:32 +08:00
    如果 site A 到 B 有多条 TCP 连接,是可以把不同的连接均衡到不同链路上的。
    但是,如果是同一条 TCP 连接的话, TCP 在设计上一条连接只有一个 source IP 和一个 destination IP ,如果你的 site A 不同链路 IP 是不同的,就无法单纯通过 TCP 解决了。当然,套层隧道还是可以的。
    UDP 本身无连接,只要你设计好上层协议毫无压力。
    est
        3
    est  
       2016-10-25 10:50:50 +08:00
    tcp 是内核实现的。。。内核做 module 也是可行的。。只不过需要 root 。很多 openvz 的可能各种兼容性问题。。。

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

    要多链路多 demultiplexing 的方案还是有的,基于 UDP 和 IP 的应该都有。免费开源的就不知道咯。
    jedihy
        4
    jedihy  
       2016-10-25 11:11:35 +08:00
    多路 TCP 没你想的那么简单,目前在学术界是一个热门的研究领域,在数据中心网络中有部分已经在使用了。
    举一个简单的例子,多路 TCP 那么多乱序的怎么去拼接?广域网内各链路拥塞程度不一样,整个传输性能瓶颈会卡在最慢的那条流上,如何避免,重发?拥塞窗口怎么控制?丢一个包降多少窗口?是不是会增加丢包率?每条流权重是不是一样,不一样的话怎么控制?
    flyfishcn
        5
    flyfishcn  
       2016-10-25 15:04:34 +08:00
    带宽叠加都是基于多连接的。基于链路聚合这种的只能完成 OSI 二层下的内容。一旦涉及协议了,单连接是无法聚合的。
    bybyte
        6
    bybyte  
       33 天前
    有的,我试过,一个 tcp 链接通过多个链路发出,实现思路就是在本地把 tcp 打散为基于 udp 的可靠协议,例如 kcp ,然后 udp 想怎么发就怎么发了,通过 N 个链路转发都行,只要发到目的地,然后把 udp 再转回去就行了,即使其中任意一条链路断开或者延迟都不影响这一整条 tcp 链接都断开,但是这样做就会浪费很大的带宽,但是提高了可用性
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6004 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 03:34 · PVG 11:34 · LAX 19:34 · JFK 22:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.