分享刚做的一个块传输加速软件 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
zhouheyang0919
V2EX    分享创造

分享刚做的一个块传输加速软件

  •  
  •   zhouheyang0919
    losfair 2016-07-01 15:42:19 +08:00 5668 次点击
    这是一个创建于 3395 天前的主题,其中的信息可能已经有所发展或是发生改变。
    https://github.com/losfair/AlphaTrans
    最近做了一个使用 udp+tcp 的块传输加速软件。(一个上午写的,代码自带混淆)
    服务端监听在 UDP port 6789 和 TCP port 6789 上, UDP port 接收数据, TCP port 同步控制信息。
    客户端连接到服务端后主动推送数据。
    实测从 Vultr (New York) 传输 10MB 数据到我电脑上(电信普通宽带, 20M ,非 CN2 )约需 9s.
    丢包重传算法耗费时间较多( 时间随文件拆分的数据包数量增加,高于线性 ),待优化。
    服务端用法: ./server_recv 不需要参数,接收到的数据保存在 received.data 中
    客户端用法: ./client_send [file_name] [server_ip]
    编译直接 make 即可。
    欢迎测试和 PR :)
    第 1 条附言    2016-07-02 19:32:51 +08:00
    现在加入了简单的拥塞控制。
    数据分块传输,提升大文件的传输速度。
    命令行参数格式调整为:
    服务端: ./server_recv > [output_file_name]
    客户端: ./client_send [server_ip] < [input_file_name]
    便于与其他程序进行集成。
    目前的问题:
    1. 貌似墙学习了 UDP 流量的特征。。含 Flag 的包 200 个只能到达几个。可能需要添加混淆。
    2. 分块传输离流传输更近了一步,但是尚未实现真正的流传输,需要发送端填满一个 block 或者读完输入,接收端才有输出。
    19 条回复    2016-07-08 11:44:51 +08:00
    fcicq
        1
    fcicq  
       2016-07-01 15:56:37 +08:00
    能证明你的方法和 TCP Reno 相容吗?
    yexm0
        2
    yexm0  
       2016-07-01 16:04:39 +08:00 via Android
    windows 版有不?
    imxieke
        3
    imxieke  
       2016-07-01 16:14:13 +08:00 via Android
    资瓷.
    zhouheyang0919
        4
    zhouheyang0919  
    OP
       2016-07-01 16:16:11 +08:00
    @fcicq 数据传输通过 UDP 进行, TCP 连接仅用于状态同步。
    传输流程大致是这样的:
    发送端与接收端之间建立 TCP 连接和 UDP mapping -> 发送端通过 TCP 发送数据总长度,两端分别计算传输所需的 block 数量 -> 发送端以恒定速率发包 (udp), 然后传输一定量的带有特殊标志 (0x1fffffff) 的包,以填充丢包造成的数据包数量小于预测数量,期间接收端无任何返回(这一步有待改进) -> 接收端将缺失的 block ID 通过 tcp 传输给发送端,发送端重复上一步过程(但只发送缺失的包),重复这两步直到缺失的 block 数量为 0 -> Done
    fcicq
        5
    fcicq  
       2016-07-01 18:08:11 +08:00
    @zhouheyang0919 没有减速逻辑的话必然不相容了.
    ryd994
        6
    ryd994  
       2016-07-01 19:42:39 +08:00 via Android
    讲真,除非有明确的拥塞控制的数学模型,所谓的加速绝大多数都是无脑发包
    你们知道要是写出新拥塞算法可以发 CS 论文么?
    luohaha
        7
    luohaha  
       2016-07-01 20:55:06 +08:00
    研究生想做 tcp 加速方面的研究,被导师说太 low 了,好久之前的研究方向了。。
    vinsoncou
        8
    vinsoncou  
       2016-07-01 23:09:21 +08:00
    这个与 TsunamiUDP 相比有什么优势呢?
    mengzhuo
        9
    mengzhuo  
       2016-07-02 00:55:56 +08:00 via iPhone
    呃…不能做流控岂不就是无脑发
    fzinfz
        10
    fzinfz  
       2016-07-02 01:03:04 +08:00
    看用法貌似目前只支持文件加速。 LZ 有兴趣发展成支持 proxy 的版本么?
    JAVA 版参考: https://github.com/d1sm/finalspeed/tree/fileshare
    zhouheyang0919
        11
    zhouheyang0919  
    OP
       2016-07-02 08:17:04 +08:00 via Android
    @fcicq
    @ryd994
    @mengzhuo
    正在写拥塞控制算法
    zhouheyang0919
        12
    zhouheyang0919  
    OP
       2016-07-02 08:29:49 +08:00 via Android   1
    @fzinfz 处理流加速比块加速更复杂。不过有这个打算
    bkjzs
        13
    bkjzs  
       206-07-02 12:28:28 +08:00 via Android
    可以看看 kcp
    zhouheyang0919
        14
    zhouheyang0919  
    OP
       2016-07-02 19:42:14 +08:00
    @bkjzs kcp 是为双向的流传输设计的,在单向大容量传输上表现并不突出
    zhouheyang0919
        15
    zhouheyang0919  
    OP
       2016-07-02 19:43:47 +08:00
    @bkjzs 峰值速率很高,但在延时较大的网络下速率不稳定
    bkjzs
        16
    bkjzs  
       2016-07-02 22:38:27 +08:00 via Android
    @zhouheyang0919 我自己用西雅图的服务器测试 kcp ,多线程传输大文件,可以稳定在 3mb/s ,显示使用了 50M 的带宽。
    用这种软件比不用好太多,直接传输可能只有 200kb/s
    Actrace
        17
    Actrace  
       2016-07-03 16:44:19 +08:00
    使用 TCP 进行状态同步的话, TCP 丢包影响很大吧?
    zhouheyang0919
        18
    zhouheyang0919  
    OP
       2016-07-05 17:53:48 +08:00
    @Actrace TCP 传输的流量不到总流量的 1/500. 因此影响很小。
    Thiece
        19
    Thiece  
       2016-07-08 11:44:51 +08:00
    有最新进展吗?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2799 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 07:04 PVG 15:04 LAX 00:04 JFK 03:04
    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