QUIC 实践疑问 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
flx413

QUIC 实践疑问

  •  
  •   flx413 2024 年 3 月 21 日 2933 次点击
    这是一个创建于 765 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在移动端搞 QUIC ,场景是静态资源加载( js/css 、img 图片等),在线上使用了一段时间,iOS 和 Android 表现不一致,目前 Android 使用 h3 的时延要比 h2 好一点。 但 iOS 的现象就很奇怪,时延比 h2 要差,完成率也比 h2 要低,有些请求只收到一部分响应,后续一直收不到回包。服务端同事说能收到客户端的请求,并且响应也发出去了,但客户端就是收不到,或只收到一部分。 有大佬知道可能原因是啥吗?

    20 条回复    2024-03-22 01:35:49 +08:00
    coderxy
        1
    coderxy  
       2024 年 3 月 21 日
    同网络下吗? quic 因为底层用的是 udp ,在很多运营商那里报文会被随机丢弃掉。 用 quic 一般是打开 app 后对 http2 和 quic 进行同时测试,哪个更快更稳定就走哪条路线。
    tool2d
        2
    tool2d  
       2024 年 3 月 21 日
    我这里 QUIC 测试多了后,速度就不行,原因不明。也许是运营商的问题,http2 完全没问题。
    gesse
        3
    gesse  
       2024 年 3 月 21 日
    国内 udp 环境一言难尽。
    flx413
        4
    flx413  
    OP
       2024 年 3 月 21 日 via Android
    @coderxy 同网络下,但 android 的 h3 就比 h2 要好,iOS 不行,这就很懵逼了
    flx413
        5
    flx413  
    OP
       2024 年 3 月 21 日 via Android
    @tool2d 我目前遇到的问题是只有 iOS 不行,android 倒还好
    luozic
        6
    luozic  
       2024 年 3 月 21 日
    iOS 那个版本 啥手机,是所有 iOS 设备都不行?
    flx413
        7
    flx413  
    OP
       2024 年 3 月 21 日 via Android
    @luozic 每个版本都不行
    coderxy
        8
    coderxy  
       2024 年 3 月 21 日
    @flx413 quic 还分 iQUIC 跟 gQUIC 的你知道吗? 不知道你说的问题跟这个有没有关系。ios 系统支持的是 iQUIC
    coderxy
        9
    coderxy  
       2024 年 3 月 21 日
    我们前几年就试过 quic , 最终的结论就是目前整体基建(包括运营商、云厂商)还是不太成熟, 对于一般的公司来说,现在搞还是有点早了。
    luozic
        10
    luozic  
       2024 年 3 月 21 日
    那可以根据设备使用不同的协议返回。 并且去咨询一下 iOS/apple 的人员。
    isno
        11
    isno  
       2024 年 3 月 21 日
    去年全球范围测试过。

    QUIC 的失败率比 HTTP2 高很多,比较明显的是 lost connection 错误,查不出原因。
    wildman9527
        12
    wildman9527  
       2024 年 3 月 21 日
    都是连 Wi-Fi 测的么? 把 iOS 的 airdrop 和 蓝牙关掉你再试试呢?
    GenericT
        13
    GenericT  
       2024 年 3 月 21 日
    先说一下服务端客户端分别用的啥实现吧,这么新的东西实现本身都可能是不完整的
    GenericT
        14
    GenericT  
       2024 年 3 月 21 日
    @coderxy 所有都应该且只应该支持所谓的 iQUIC ,也就是 IETF QUIC ,RFC 都定了没有必要讨论这个了。
    coderxy
        15
    coderxy  
       2024 年 3 月 21 日
    @GenericT 别太想当然, 我们当时用到的阿里云的全球加速,他们支持的 quic 就是 gquic
    GenericT
        16
    GenericT  
       2024 年 3 月 21 日
    @coderxy 说话之前得看时间啊,RFC 9000 May 2021 确立的,那在此之前的行为当然没规定了。现在都 2024 了,QUIC 的补充 RFC 都好几个了,还谈啥 gQUIC 不合适了吧。
    chromium 里的 QUIC 也是按 IETF 规定来的,最多按 RFC 8999 支持了以前以前的 draft ,新起的项目考虑这个干啥。
    https://www.chromium.org/quic/
    kuanat
        17
    kuanat  
       2024 年 3 月 21 日
    基于你这个描述,我提供一个方向,可能和我之前遇到的丢包问题是一样的。

    并发加载资源的时候,NWListener 用单个 NWConection 连接会丢包,用多个 NWConnection 来处理,有可能就正常了。

    一般化的测试方法是用 quic-interop-runner 来跑一下,看看是不是协议不同实现的问题。估计你用的服务端实现肯定在列表里,就是需要额外写个 ios 的客户端。

    如果要定量测的话,可以配合 wireshark/mitmproxy ,这俩新版本都可以简单处理 quic 协议了。
    wangbin11
        18
    wangbin11  
       2024 年 3 月 21 日
    quic 有重发机制你丢报文和 qos 没关系
    flx413
        19
    flx413  
    OP
       2024 年 3 月 22 日 via Android
    @coderxy 是 iQUIC ,用的 NSURLSession
    flx413
        20
    flx413  
    OP
       2024 年 3 月 22 日 via Android
    @GenericT 客户端是 NSURLSession ,服务端 nginx
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1373 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 48ms UTC 17:13 PVG 01:13 LAX 10:13 JFK 13:13
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86