V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
spance
V2EX  ›  分享创造

SUFT 传输协议共公开测试,邀请大家一起测试、分析和完善

  •  
  •   spance · 2016-02-23 16:41:05 +08:00 · 3320 次点击
    这是一个创建于 3196 天前的主题,其中的信息可能已经有所发展或是发生改变。

    为了解决某些长距离通信的问题,我们在 UDP 上开发了这个用户态传输协议,经过了 alpha 阶段的测试,现在公开发布,邀请大家一起来玩,并请大家积极反馈结果,有能力的同学诚邀你们一起分析和完善。

    什么是 SUFT ?

    Small-scale UDP Fast Transmission Protocol, SUFT ?

    The SUFT is a application layer transmission protocol based on UDP and implemented in Golang. It provides some of the same service features: stream-oriented like TCP, low latency and esures reliable, ordered transport of stream with plain congestion control.

    The protocol is designed for maximizing throughput and minimizing effect of losing packets on throughput, and it oriented in small and medium-scale communication scene.

    Project

    https://github.com/spance/suft

    这是刚做完的新项目,可能还有很多问题,希望有能力的同学能参与进来深入了解和持续改进。

    SUFT 已经完整实现了 golang: net.Conn 接口,便于上层应用使用.

    喜欢抓包分析的,已经写好了 wireshark 插件用于友好的剖析 SUFT.

    Goals & Features

    对于这样的传输协议,我们着重观察和强调这几个方面

    • Transmitting model has predictable performance

      遵循 吞吐=MSS*SWnd/Latency

    • Fast retransmission could better deal with lossy link

      抗丢包能力?
      “丢”就是被丢了,抗只是个念想,能做的就是尽可能早的发现丢然后重传。
      通过后面的测试了解

    • Minimum retransmission without wasting traffic

      是否浪费带宽?
      凡实际重传率过多的超过了理论重传率即为 BAD
      通过后面的测试了解

    • No resource consumption while the connection is idle

      IDLE 时 cpu 消耗为 0 ,因为这是传输事件驱动并不是定时死循环。
      负载传输时, 100Mbps 吞吐下, cpu 消耗 5%-10%,尚有优化空间。

    应用

    目前仅是协议验证和优化期,具体可以怎么应用大家可以开动脑筋。。。

    根目录 main 包有一个类似 netcat(nc)的传输工具,用来互传文件(甚至也可以是一个 Chat Room ),具体用法请查看 README.

    实景测试 2

    test2

    第 1 条附言  ·  2016-02-23 20:14:53 +08:00

    之前的 README 中的错误已经更正。

    可以通过几个测试来直观的认识一下 SUFT:

    11 条回复    2016-02-24 21:28:56 +08:00
    miyuki
        1
    miyuki  
       2016-02-23 16:49:38 +08:00
    马克 回家看看
    spance
        2
    spance  
    OP
       2016-02-23 19:33:27 +08:00
    @Livid 拜托修改一下标题去掉错字“共”
    congeec
        3
    congeec  
       2016-02-23 20:05:18 +08:00 via iPhone
    还没部署在生产环境么?
    咱出口宽带这鸟样,很适合用这项目呀
    spance
        4
    spance  
    OP
       2016-02-23 20:08:07 +08:00
    @congeec 还没有开始应用,目前处在协议层优化测试阶段,从我小范围多天的测试结果来看,效果比较满意,欢迎分享测试结果,可以对比 tcp 或者其他协议。
    mhycy
        5
    mhycy  
       2016-02-23 20:30:22 +08:00
    请问拥塞控制现在是如何实现的?
    Orzpls
        6
    Orzpls  
       2016-02-23 20:55:47 +08:00 via Android
    支持,希望好好发展。
    spance
        7
    spance  
    OP
       2016-02-23 20:58:23 +08:00
    @mhycy 拥塞控制包括 2 个方面,慢启动和 rto 重传时大比例丢包后窗口缩减,与 tcp 的拥塞控制不同,不纯碎以丢包来判断拥塞,换句话说这个对丢包是宽容的。
    与这个相关的还有快速重传,这其实也包括一部分 tcp 拥塞控制中快速恢复的功能,这里快速重传不计入 cwnd ,也能避免陷入 rto 重传,并且由于使用 bitmap ack 能够准确的反馈窗口内收到和丢失状态,所以这里的快速重传更能积极的促进吞吐。
    spance
        8
    spance  
    OP
       2016-02-23 21:03:56 +08:00
    @Orzpls 感谢支持。

    @mhycy 还有,因为对于丢包采用容忍态度,所以难以实现准确的链路带宽的探测,因此目前是指定最大传输带宽,如果有兴趣可以参与进来,一起讨论和解决这个问题。
    zhengnanlee
        9
    zhengnanlee  
       2016-02-24 17:21:33 +08:00
    请问您是如何写出一个通信协议的,看过哪些书籍呢?
    spance
        10
    spance  
    OP
       2016-02-24 19:10:36 +08:00
    @zhengnanlee 看到各种闭源 xxx 加速漫天要价于是年前就闷了几天就写了,并把它开源了,也没看过什么,了解网络、常用算法和数据结构,你也可以自己创造一个!
    zhengnanlee
        11
    zhengnanlee  
       2016-02-24 21:28:56 +08:00 via Android
    @spance 那我就从学习您的代码开始吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2609 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 04:41 · PVG 12:41 · LAX 20:41 · JFK 23:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.