V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

每个人的时间,资源是有限的,有的时候你或许能够想到很多 idea,但是由于现实的限制,却并不是所有的 idea 都能够成为现实。

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
nazor
V2EX  ›  奇思妙想

用 UDP 来实现可靠的数据传输 可行吗

  •  
  •   nazor · 2018-01-18 15:27:20 +08:00 · 5166 次点击
    这是一个创建于 2282 天前的主题,其中的信息可能已经有所发展或是发生改变。
    对于某些位置『偏僻』的海外线路服务器,TCP 数据传输速度很不理想。
    比如 AmazonEC2 美国东部节点,TCP 传输速度只有 100KB/s,然而在 PC 机上用 UDP 测试下行速度通常能跑满百兆宽带。
    那么用 UDP 实现可靠的数据传输协议,结果应该很美好吧。
    第 1 条附言  ·  2018-01-25 22:28:17 +08:00
    这几天写代码尝试了一下,如果要在高延迟、高丢包线路上实现尽可能高的传输速度,就必须放弃传统的可靠传输那一套,例如:滑动窗口,拥塞控制……

    放弃的后果就是所需流量比原来大得多,比如传 1GB 文件需要 2GB 的流量。

    我的算法是循环发送待传输的数据块,很粗暴,也很有效。从美国东部 EC2 上下载数据能跑满 100M 的国内宽带。

    如果感兴趣,欢迎留言交流。
    第 2 条附言  ·  2020-08-25 08:54:49 +08:00

    两年后,偶然翻到这个帖子。的确是可行的,已经实现了,但本质是增大滑动窗口大小,提高重发频率。

    拥塞控制通常由线路的一些属性决定,如丢包率、延迟变化等,而这些属性不一定能反应线路的真实拥塞情况,因此只使用令牌桶进行流速限制。

    若需要提高响应速度,可以增加前向纠错(FEC),牺牲一部分带宽以降低丢包率。

    26 条回复    2018-01-23 09:24:27 +08:00
    Shura
        1
    Shura  
       2018-01-18 15:40:36 +08:00   ❤️ 6
    wtks1
        2
    wtks1  
       2018-01-18 15:41:27 +08:00 via Android   ❤️ 1
    那是 lZ 你没遇到过运营商封大流量 udp 传输....
    nazor
        3
    nazor  
    OP
       2018-01-18 15:51:56 +08:00
    @wtks1 这个问题,还是能解决的,服务端进行一些限制。
    jedihy
        4
    jedihy  
       2018-01-18 15:59:39 +08:00   ❤️ 2
    你设计可靠传输但是又不考虑拥塞控制,每个人都这样玩就完蛋了
    scream7
        5
    scream7  
       2018-01-18 16:03:30 +08:00   ❤️ 1
    shengyu
        6
    shengyu  
       2018-01-18 16:06:05 +08:00 via iPhone   ❤️ 2
    QUIC ?
    eaglexiang
        7
    eaglexiang  
       2018-01-18 17:46:35 +08:00 via Android   ❤️ 1
    当然可行,你只需要在应用层,自己做一套验证重传和拥塞控制就行了。话说回来,这样的效果跟 大文件分割+断点续传+TCP 又有啥区别。
    topbandit
        8
    topbandit  
       2018-01-18 17:47:53 +08:00   ❤️ 1
    参考 QQ
    eaglexiang
        9
    eaglexiang  
       2018-01-18 17:48:19 +08:00 via Android
    只要文件块小一点,再加上并发连接,我想也能实现你的需求
    mt7620
        10
    mt7620  
       2018-01-18 18:42:57 +08:00 via Android   ❤️ 1
    github 搜 kcptun
    nazor
        11
    nazor  
    OP
       2018-01-18 18:46:39 +08:00 via iPhone
    @eaglexiang TCP 有固有缺陷的,网络环境差的时候,效率很低。
    mooncakejs
        12
    mooncakejs  
       2018-01-18 18:59:26 +08:00
    上 bbr 可解。
    用 udp 重新发明 tcp 的轮子可不是好主意。
    eaglexiang
        13
    eaglexiang  
       2018-01-18 22:50:12 +08:00 via Android
    @nazor 我想这种缺陷就是由掉包率带来的吧。可以考虑换一套解决拥塞的库,如 BBR 或者锐速之类的,应该有缓解。如果真用 UDP 实现了类似 TCP 的检验重传,那 TCP 的缺陷也一样会有
    xiadong1994
        15
    xiadong1994  
       2018-01-18 22:56:49 +08:00 via iPhone   ❤️ 1
    实现当然没有问题,问题是你怎么设计你的拥塞控制算法。
    hugee
        16
    hugee  
       2018-01-18 23:06:25 +08:00 via Android
    不可行
    ifaii
        17
    ifaii  
       2018-01-18 23:33:01 +08:00   ❤️ 1
    UDP 来实现可靠的数据传输 那不就是 TCP 嘛
    watzds
        18
    watzds  
       2018-01-19 08:38:01 +08:00 via Android
    @ifaii 怎么就是 TCP 了,TCP 和 UDP
    watzds
        19
    watzds  
       2018-01-19 08:40:17 +08:00 via Android   ❤️ 1
    @ifaii 怎么就是 TCP 了,TCP 和 UDP 又不只是差了可靠传输。况且可以有不同实现,在某个场景达到更好效果
    zzgy
        20
    zzgy  
       2018-01-19 08:42:08 +08:00 via Android   ❤️ 1
    quic 可以,也可以用我司的 SDK,我司基于 quic 做了一套 UDP 加密传输协议,有意向可以聊聊
    lieh222
        21
    lieh222  
       2018-01-19 08:42:12 +08:00   ❤️ 1
    把这个比喻成快递,送快递没人的时候都放门口超市了,所以还是找个服务器当超市吧。。
    superkey
        22
    superkey  
       2018-01-19 09:50:48 +08:00   ❤️ 1
    可行,早些年一些远控软件都是用 udp 协议,能避免大部分杀软.
    julyclyde
        23
    julyclyde  
       2018-01-19 15:39:53 +08:00
    @watzds UDP 比 IP 除了多个端口号的概念,还有啥区别吗?
    你在 UDP 上层实现可靠传输,和在 IP 上层实现可靠传输,还有啥区别吗?
    stackexplode
        24
    stackexplode  
       2018-01-19 19:16:36 +08:00
    udt
    Justin13
        25
    Justin13  
       2018-01-20 08:28:08 +08:00 via Android
    quic。不过 quic 基本上就是干掉了三次握手的 tcp..
    tony1016
        26
    tony1016  
       2018-01-23 09:24:27 +08:00
    zerotier
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3459 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 04:49 · PVG 12:49 · LAX 21:49 · JFK 00:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.