为了解决某些长距离通信的问题,我们在 UDP 上开发了这个用户态传输协议,经过了 alpha 阶段的测试,现在公开发布,邀请大家一起来玩,并请大家积极反馈结果,有能力的同学诚邀你们一起分析和完善。
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.
https://github.com/spance/suft
这是刚做完的新项目,可能还有很多问题,希望有能力的同学能参与进来深入了解和持续改进。
SUFT 已经完整实现了 golang: net.Conn 接口,便于上层应用使用.
喜欢抓包分析的,已经写好了 wireshark 插件用于友好的剖析 SUFT.
对于这样的传输协议,我们着重观察和强调这几个方面
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.
1
miyuki 2016-02-23 16:49:38 +08:00
马克 回家看看
|
3
congeec 2016-02-23 20:05:18 +08:00 via iPhone
还没部署在生产环境么?
咱出口宽带这鸟样,很适合用这项目呀 |
4
spance OP @congeec 还没有开始应用,目前处在协议层优化测试阶段,从我小范围多天的测试结果来看,效果比较满意,欢迎分享测试结果,可以对比 tcp 或者其他协议。
|
5
mhycy 2016-02-23 20:30:22 +08:00
请问拥塞控制现在是如何实现的?
|
6
Orzpls 2016-02-23 20:55:47 +08:00 via Android
支持,希望好好发展。
|
7
spance OP @mhycy 拥塞控制包括 2 个方面,慢启动和 rto 重传时大比例丢包后窗口缩减,与 tcp 的拥塞控制不同,不纯碎以丢包来判断拥塞,换句话说这个对丢包是宽容的。
与这个相关的还有快速重传,这其实也包括一部分 tcp 拥塞控制中快速恢复的功能,这里快速重传不计入 cwnd ,也能避免陷入 rto 重传,并且由于使用 bitmap ack 能够准确的反馈窗口内收到和丢失状态,所以这里的快速重传更能积极的促进吞吐。 |
8
spance OP |
9
zhengnanlee 2016-02-24 17:21:33 +08:00
请问您是如何写出一个通信协议的,看过哪些书籍呢?
|
10
spance OP @zhengnanlee 看到各种闭源 xxx 加速漫天要价于是年前就闷了几天就写了,并把它开源了,也没看过什么,了解网络、常用算法和数据结构,你也可以自己创造一个!
|
11
zhengnanlee 2016-02-24 21:28:56 +08:00 via Android
@spance 那我就从学习您的代码开始吧
|