InfoQ|阿里淘系自研标准化协议库 XQUIC 首次公开:直播高峰期卡顿可降低 30%( 四 )
拥塞会导致丢包 , 但是丢包却不一定拥塞导致的 。 事实上 , 丢包可以分为两类 , 一类是拥塞丢包 , 另一类是噪声丢包 , 特别是在无线网络环境中 , 数据以无线电的方式进行传递 , 无线路由器信号干扰、蜂窝信号不稳定等都会导致信号失真 , 最终数据链路层 CRC 校验失败将报文丢弃 。
基于丢包的拥塞算法容易被噪声丢包干扰 , 在高丢包率高延迟的环境中带宽利用率较低 。
- 基于带宽时延探测(如 BBR)
三种类型的拥塞算法没有谁好谁坏 , 都是顺应当时的网络环境的产物 , 随着路由器、交换机缓存越来越大 , 无线网络的比例越来越高 , 基于路径时延和基于丢包的的拥塞算法就显得不合时宜了 。 对于流媒体、文件上传等对带宽需求比较大的场景 , BBR 成为更优的选择 。
秒开率优化加快握手包重传
本文插图
图 8. TCP 握手阶段出现丢包如图 , TCP 在握手时 , 由于尚未收到对端的 ACK , 无法计算路径 RTT , 因此 , RFC 定义了初始重传超时 , 当超过这个超时时间还未收到对端 ACK , 就重发 sync 报文 。
TCP 秒开率上限:Linux 内核中的初始重传超时为 1s (RFC6298, June 2011) , 3% 的丢包率意味着 TCP 秒开率理论上限为 97% , 调低初始重传时间可以有效提升秒开率 。
同理 , 如果你有一个 RPC 接口超时时间为 1s , 那么在 3% 丢包率的环境下 , 接口成功率不会超过 97% 。
本文插图
图 9. TCP 和 QUIC 握手阶段 - 伪重传模拟另一方面 , 调低初始重传超时会引发伪重传 , 需要根据用户 RTT 分布进行取舍 , 比如初始重传超时调低到 500ms , 那么 RTT 大于 500ms 的用户在握手期间将会多发一个 sync 报文 。
减少往返次数慢启动阶段 N 个 RTT 内的吞吐量(不考虑丢包):
T = init_cwnd * (2^N-1) * MSS, N = ?t / RTT ?
Linux 内核初始拥塞窗口 =10(RFC 6928 , April 2013)
首帧 100KB , 需要 4 个 RTT , 如果 RTT>250ms , 意味着必然无法秒开 。 在我们举的这个例子中 , 如果调整为 32 , 那么只需要 2 个 RTT 。
本文插图
图 10. 宽带速率报告从 2015 到 2019 , 固定带宽翻了 4.8 倍 。 从 2016 到 2019 , 移动宽带翻了 5.3 倍 。 初始拥塞窗口从 10 调整为 32 在合理范围内 。
卡顿率优化BBR RTT 探测优化
本文插图
图 11. BBR v1 示意图:ProbeRTT 阶段问题
- BBR v1 的 ProbeRTT 阶段会把 inflight 降到 4*packet 并保持至少 200ms 。 会导致传输速率断崖式下跌 , 引起卡顿
- 10s 进入一次 ProbeRTT , 无法适应 RTT 频繁变化的场景
- 减少带宽突降:inflight 降到 4 * packet 改为降到 0.75 * Estimated_BDP
- 加快探测频率:ProbeRTT 进入频率 10s 改为 2.5s
- 为什么是 0.75x?
0.75 * Estimated_BDP = 0.75 * 1.25 * realBDP = 0.9375* realBDP
保证 inflight < realBDP, 确保 RTT 准确性 。
推荐阅读
- 阿里|阿里焦虑,饿了么推“百亿补贴”,外卖市场狼烟再起
- |BATJ罕见联手!一公司被百度京东腾讯阿里联合申诉,怎么了?
- 阿里巴巴|高水平的管理者都遵守的6条管理圣经,读懂这些,管理越来越顺
- 百度|百度网盘龟速下载?阿里进军网盘市场:不限速下载!
- 互联网|阿里CCO推“网购新人服务计划”提供直播教学服务
- 阿里巴巴|闲鱼开启“百日专项行动”,整治潜在擦边球商品
- 互联网|京东停用申通发货,阿里拒绝接入京东物流是“分手”主因?
- 京东|电商财报“三国杀”:拼多多用户年底超阿里?
- 广电|阿里、国网入股“新广电” 千亿级巨头呼之欲出
- 阿里|阿里“收网”?
