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

带宽叠加只能用在下载之类的多线程工作嘛?

  •  
  •   HFX3389 · 2017-07-06 00:36:14 +08:00 · 5833 次点击
    这是一个创建于 2694 天前的主题,其中的信息可能已经有所发展或是发生改变。

    手上有两条 4M 的带宽的网络,带宽叠加已经 OK 了( PS:学校网络,使用某蜘蛛的“使用基于数据包的负载均衡策略”),但局限就在于只能用在下载之类的多线程活动。

    有没有办法在浏览网页比如看直播的时候也进行叠加(因为看直播时仅仅使用了一条带宽)?

    因为我很少下载,直播也看 OW 之类的,如果仅仅使用单条 4M,许多码率大的直播间都无法观看!

    第 1 条附言  ·  2017-07-06 01:12:58 +08:00
    硬件就暂时不考虑了,因为我们这硬件用不了,只能依靠软件
    18 条回复    2017-07-06 11:53:00 +08:00
    Love4Taylor
        1
    Love4Taylor  
       2017-07-06 00:57:19 +08:00
    HFX3389
        2
    HFX3389  
    OP
       2017-07-06 01:10:41 +08:00
    @Love4Taylor #1 视频看了,但是对我来说没啥用啊!
    因为我这是通过虚拟机虚拟多个网卡,每个网卡一个上面下发下来独立的 IP,学校根据 IP 的登陆情况来决定是否开放网络的,所以这个蜘蛛就正好!
    那个 MPTCP 不懂是啥。。。
    Love4Taylor
        3
    Love4Taylor  
       2017-07-06 01:19:50 +08:00
    @HFX3389 #2 只是供参考而已 想链路聚合只能拆分数据包来传输 目前我所知道的一个就是 MPTCP
    wwqgtxx
        4
    wwqgtxx  
       2017-07-06 01:41:49 +08:00 via iPhone
    同校园网多 ip 聚合的路过,只不过我是用两台虚拟机开 ss,然后在其中一台上开 haproxy 做的,为了 udp 转发还只能用 socat 把 udp 转发到本虚拟机的 ss 上,最后在外围机器上用 sscap 开全局代理跑的

    不过我这种方案最大的局限在于 udp 只能转发到一台上,没办法均衡负载( haproxy 不支持 udp ),不过 tcp 单线程测速的确可以达到速度叠加的作用
    HFX3389
        5
    HFX3389  
    OP
       2017-07-06 01:46:39 +08:00
    @wwqgtxx #4 多谢!能稍微说得再清楚些嘛?
    xratzh
        6
    xratzh  
       2017-07-06 02:22:52 +08:00 via iPhone
    策略路由,分别 4m 给不同俩人用,我以前双拨后打算这样,后面觉得没必要就放弃了
    HFX3389
        7
    HFX3389  
    OP
       2017-07-06 02:25:14 +08:00
    @xratzh #6 我是自己一个人用,喜欢看 OW 直播,但是现在一般 OW 直播都要 8M 左右的宽带!想聚合,并不是共享!
    wwqgtxx
        8
    wwqgtxx  
       2017-07-06 08:46:08 +08:00 via iPhone
    核心思想就是
    虚拟机 1: 只运行一个 ss-libev 在 8388 端口
    虚拟机 2: 运行一个 ss-libev 在 8388 端口,然后运行一个 haproxy 在 1091 端口,haproxy 配置为均衡负载,上游分别为本机的 8388 端口及虚拟机 1 的 8388 端口。由于 haproxy 不支持 udp,再开一个 socat 把本机的 udp 8388 转发到本机的 1091 端口(这个地方就导致 udp 实际上并没有实现均衡负载)
    主机: 运行 sstap 设置上游为虚拟机 2 的 1091 端口
    KCheshireCat
        9
    KCheshireCat  
       2017-07-06 10:32:17 +08:00
    @wwqgtxx #8


    |-------tun1-------|
    客户端-----| |-------server-------|-----------外网
    |-------tun2-------|

    是这样么?

    用两个或者多个无状态的隧道来分流,再用一个跳板服务器重新汇聚成流,发往远端.
    wwqgtxx
        10
    wwqgtxx  
       2017-07-06 10:37:23 +08:00 via iPhone
    @KCheshireCat 实际上我这只是一个一转多转发而已,由于我们这里校园网只是限速,出口是共用的,所以汇聚的工作就由校园网出口网关自动完成了
    wwqgtxx
        11
    wwqgtxx  
       2017-07-06 10:43:00 +08:00 via iPhone
    当然这个地方也可以配置跳板服务器来聚合,即给上面的两个虚拟机中运行的 ss-libev 服务端配置一个相同的上级代理即可

    之前可能是我没表达清楚,我在两个虚拟机中运行的 ss-libev 是 ss-server 并不是 ss-client,因为我这里并不需要实现自动 fq 的功能
    wwqgtxx
        12
    wwqgtxx  
       2017-07-06 10:47:24 +08:00 via iPhone
    用 ss-server 而不是直接开 socks5 代理主要是因为找不到好用的支持 udp 转发的 socks5 服务器软件,我试过 ccproxy,到如果在前端加上 haproxy 就会导致 udp 失效,用 v2ray 倒是可以实现和 haproxy 兼容,但是连接量大了之后内存占用大的吓人( 300mb 以上),最后还是退而求其次用 ss-libev 的 ss-server,这货来来回回就占用 20m,只不过 ss 协议的 udp 转发本身也是走 udp 协议的,所以没办法用 haproxy 转发
    wwqgtxx
        13
    wwqgtxx  
       2017-07-06 10:55:15 +08:00
    @KCheshireCat 所以最后画图应该就是

    |-->虚拟机 2 的 ss-server->校园网->|
    主机 ss-tap->虚拟机 2 的 haproxy--| |->校园网出口网关->互联网
    |->虚拟机 1 的 ss-server->校园网-> |
    wwqgtxx
        14
    wwqgtxx  
       2017-07-06 10:56:29 +08:00
    ........................................................|-->虚拟机 2 的 ss-server->校园网->|
    主机 ss-tap->虚拟机 2 的 haproxy--|....................................................... |->校园网出口网关->互联网
    ........................................................|->虚拟机 1 的 ss-server->校园网-> |


    ps:v2ex 的回复自动过滤空格真蛋疼,把排班全都打乱了
    KCheshireCat
        15
    KCheshireCat  
       2017-07-06 11:00:09 +08:00
    @wwqgtxx #13

    这样的话我有点想不通

    虚拟机都是桥接在校园网里,各自都有校园内网 IP 的吧.

    按理来说网关会把这两个 IP 发出来的流区分为两条流的啊,怎么会汇聚呢?
    wwqgtxx
        16
    wwqgtxx  
       2017-07-06 11:14:48 +08:00
    @KCheshireCat 理论上是这样,可能是因为现在大部分的下载软件都是多线程下载的吧,所以就起到了速度叠加的作用,至于真正的单 TCP 能不能叠加我还真的没有测试过
    wwqgtxx
        17
    wwqgtxx  
       2017-07-06 11:34:44 +08:00
    @KCheshireCat 好吧,刚刚试了一下,如果不用多线程下载的确达不到聚合的作用,之前都是用 speedtest 测试的,没想到那货居然是用多线程测速的。。。
    ixiaoyui
        18
    ixiaoyui  
       2017-07-06 11:53:00 +08:00
    如果客户端有公网 ip,一般意义上的网页浏览和在线直播不可能多线负载均衡,因为这些业务本身都是单线程的,而且业务的连续性是以客户端的 ip 和端口号来区分的,来自同 ip 同端口的数据流服务器会认为是一个合法业务(和 nat 原理神似),要是临时换了 ip 或者端口继续传输数据,服务器就六亲不认了,而且服务器也不知道来自不同 ip 的请求竟然是同一个客户端的同一个业务发出的,服务器很崩溃。

    nat 环境访问公网也不行,nat 也是按照客户端地址和端口为标记进行地址转换的,一般情况下,客户端地址一变,对应的 nat 后的出口端口也会变,导致单线程业务无法继续,也就不可能对网页浏览和在线直播进行负载均衡。

    总之,这种单线程的业务目前无法负载均衡,但多开几个直播还是能把带宽吃满的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5447 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 06:56 · PVG 14:56 · LAX 22:56 · JFK 01:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.