这是一个专门讨论 idea 的地方。

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

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
nazor

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

  •  
  •   nazor · Jan 18, 2018 · 5935 views
    This topic created in 3066 days ago, the information mentioned may be changed or developed.
    对于某些位置『偏僻』的海外线路服务器,TCP 数据传输速度很不理想。
    比如 AmazonEC2 美国东部节点,TCP 传输速度只有 100KB/s,然而在 PC 机上用 UDP 测试下行速度通常能跑满百兆宽带。
    那么用 UDP 实现可靠的数据传输协议,结果应该很美好吧。
    Supplement 1  ·  Jan 25, 2018
    这几天写代码尝试了一下,如果要在高延迟、高丢包线路上实现尽可能高的传输速度,就必须放弃传统的可靠传输那一套,例如:滑动窗口,拥塞控制……

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

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

    如果感兴趣,欢迎留言交流。
    Supplement 2  ·  Aug 25, 2020

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

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

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

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