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

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

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

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

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

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

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

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