V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
HarveyLiu
V2EX  ›  问与答

早期的 QQ 是 UDP 协议的,后来改成了 TCP,那么 UDP 作为没法确认握手数据包的不稳定协议,如今除了游戏,还能用在什么生产环境下?

  •  1
     
  •   HarveyLiu · 2019-01-03 00:53:57 +08:00 · 5857 次点击
    这是一个创建于 2159 天前的主题,其中的信息可能已经有所发展或是发生改变。

    作为网络层的产物,虽然和 MAC 数据链路层的有着相同的头和数据体,UDP 除了物理实现,会表现的比较快以外,那些地方和场景还能适合 UDP 开发?除了网络游戏、聊天室、以外。

    30 条回复    2019-01-03 16:32:13 +08:00
    wwqgtxx
        1
    wwqgtxx  
       2019-01-03 00:55:22 +08:00 via iPhone   ❤️ 3
    quic,不现在应该叫 http3 了
    Mohanson
        2
    Mohanson  
       2019-01-03 01:22:24 +08:00 via Android   ❤️ 1
    直播。视频会议。视频电话。语音电话。这些应用的特点是实时性要求高,同时对于过期的或丢失的数据完全不 care
    hilbertz
        3
    hilbertz  
       2019-01-03 01:44:47 +08:00
    你想实现自己的传输协议时就可以基于 udp
    xiadong1994
        4
    xiadong1994  
       2019-01-03 02:48:19 +08:00
    要实现自己的可靠传输协议的时候
    ladypxy
        5
    ladypxy  
       2019-01-03 04:51:57 +08:00 via iPhone
    自己随便 google 一下,不管中文英文,都会告诉你 idp 的优势在于点对点速度快,适合于视频点播和流媒体
    wd
        6
    wd  
       2019-01-03 06:50:10 +08:00 via iPhone   ❤️ 2
    你是不知道,国内有人为了快用 udp,为了不丢包,又设计了确认报…
    Mutoo
        7
    Mutoo  
       2019-01-03 07:16:22 +08:00
    网络的多机同步要求非常高,一般是不能丢包的。而且对速度要求也高,所以网络游戏用的通常是 rUDP (可信赖的 UDP ),是一种伪 TCP over UDP 的实现。
    izoabr
        8
    izoabr  
       2019-01-03 07:19:52 +08:00
    日志算不算?
    594duck
        9
    594duck  
       2019-01-03 08:11:48 +08:00 via iPhone
    tcp 跑在 udp 上用于加速。很猛烈。用带宽干。1 个 tcp 包发 20 个 udp 过去。用概率来弥补网络不稳定
    quqiuzhu
        10
    quqiuzhu  
       2019-01-03 08:34:58 +08:00 via Android
    刚好相反,我感觉 TCP 都快要被废掉了,以后不仅上行的协议用 udp,下行也很快会用 udp 的( http/3 )。
    BOYPT
        11
    BOYPT  
       2019-01-03 08:47:27 +08:00
    udp 不提供确认,不代表程序不能为数据确认。
    根据具体场景,写程序实现合适的机制才是重点。
    felixlong
        12
    felixlong  
       2019-01-03 08:58:50 +08:00
    P2P
    mritd
        13
    mritd  
       2019-01-03 09:01:14 +08:00 via iPhone
    Kcp
    passerbytiny
        14
    passerbytiny  
       2019-01-03 09:03:24 +08:00
    如果你是按照 OSI7 层去进行开发,那么 UDP 基本是费了,因为大部分应用层框架都在网络层选择 TCP。虽然相比基于 UDP,基于 TCP 需要额外的拆包粘包过程,并且仍然需要心跳连接和应用层自身的 ACK 机制才能保证数据有效性,然而不知道什么原因,那些框架就是选了 TCP。

    然而现实情况是,按照 OSI7 层加框架进行开发,看起来是主流,实际上只占网络开发的一小部分,所以 UDP 的路很宽,只是我们还不知道。
    hicdn
        15
    hicdn  
       2019-01-03 09:18:57 +08:00
    iptv 的组播是 UDP
    stzz
        16
    stzz  
       2019-01-03 09:47:55 +08:00   ❤️ 1
    我来我来~
    "粘包"
    ghostsimon
        17
    ghostsimon  
       2019-01-03 11:13:37 +08:00
    基于 snmp 协议的设备管理和告警管理。
    evagreenworking
        18
    evagreenworking  
       2019-01-03 11:35:58 +08:00
    Wireguard 啊 直接集成到内核了 UDP 挺好的 但架不住国内运营商 QOS 发到国外的 udp 丢包丢得厉害 5g 需要低延迟场景 udp 协议肯定优势
    HarveyLiu
        19
    HarveyLiu  
    OP
       2019-01-03 11:50:21 +08:00
    @wwqgtxx #1
    @Mohanson #2
    @hilbertz #3
    @xiadong1994 #4
    @ladypxy #5
    @wd #6
    @Mutoo #7
    @izoabr #8
    @594duck #9
    @quqiuzhu #10
    @BOYPT #11
    @felixlong #12
    @mritd #13
    @passerbytiny #14
    @hicdn #15
    @stzz #16
    @ghostsimon #17
    @evagreenworking #18

    突然想到,DHCP 和 DNS 服务,不也是走 UDP 协议的么,这么说来,即便不稳定,没有握手,在某些情况下丢弃数据包也是可以被接受的,对吧,似乎用于广播形式的应用场景更适合

    其它楼说的 kcptun 和 wireguard,一个是多倍发包,一个是以 V%P%N 形式的漫游在链路层的私有协议,所以能达到翻¥墙更快的体验吧,但毕竟只是开源项目的一种衍生品,对于严格生产环境来说,还是以 TCP 开发为主吧?
    mritd
        20
    mritd  
       2019-01-03 11:58:44 +08:00
    目前很多都是基于 UDP 实现一个可靠传输的协议(RUDP),然后把这个协议在应用于具体业务,上层应用层不关注底层实现
    swulling
        21
    swulling  
       2019-01-03 12:02:19 +08:00 via iPhone   ❤️ 2
    不出意外又出现了粘包人士…
    ttgo
        22
    ttgo  
       2019-01-03 12:40:03 +08:00
    我们做高速(>10Gbps )低时延(<10ms )应用,用 udp,tcp 顶不住。
    zhujinliang
        23
    zhujinliang  
       2019-01-03 12:52:29 +08:00
    UDP 包可以广播 /组播 /多播,在 IPTV 中有应用,广播特性也用于局域网设备发现,比如 mdns/bonjour/zeroconf
    chinvo
        24
    chinvo  
       2019-01-03 13:00:35 +08:00 via iPhone
    粘包到底什么鬼,哪家见鬼的培训班搞出来的
    xzc19970719
        25
    xzc19970719  
       2019-01-03 13:04:25 +08:00
    @ttgo 这谁顶得住呀
    cluulzz
        26
    cluulzz  
       2019-01-03 15:10:18 +08:00
    tcp over udp 了解下
    ladypxy
        27
    ladypxy  
       2019-01-03 15:15:44 +08:00 via iPhone
    @HarveyLiu UDP 的优势就在于不握手,不检验。所以对于目标不确定,或者可以接受少量丢包的场景,非常合适。DNS 并不全是 UDP,当包的大小超过一个值就要用 TCP。具体多大我忘了
    lusheldon
        28
    lusheldon  
       2019-01-03 16:13:29 +08:00 via Android
    @chinvo 粘包现象本来就存在,叫法不一样而已。试试发 tcp 不先发个长度,接收端根本不知道怎么分割数据。设计私有协议的时候都要确定每个数据包怎么划分,界限在哪里。基本都是 length-value 的格式,包括 snmp,都是用 type-length-value 的形式来解决数据包的分割。这不是什么培训班搞出来。
    chenqh
        29
    chenqh  
       2019-01-03 16:31:12 +08:00
    @lusheldon 但是这样感觉,只能用回调的写法了呀,
    dirwdirw
        30
    dirwdirw  
       2019-01-03 16:32:13 +08:00 via Android
    很多很多年前,有工具可以伪装任意 QQ 号,与目标号的人聊天。这是…
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   998 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:58 · PVG 03:58 · LAX 11:58 · JFK 14:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.