QUIC协议的分析,性能测试以及在QQ会员实践 (3)

QUIC协议的分析,性能测试以及在QQ会员实践

图12 connection流控

 

拥塞控制

我们知道TCP有多种拥塞控制算法,当遇到网络拥塞会通过减包等方式来避免网络环境恶化。但是,UDP本身是没有拥塞控制的,一旦不加约束的使用会导致侵占其他“守规矩”的网络协议的带宽。


所以,为了避免上述情况,基于UDP的QUIC协议借鉴了TCP的一些优秀的拥塞控制算法,如默认使用Cubic,同时,为了避免AIMD机制带来的带宽利用率低,采用了packet pacing来探测网络带宽。


思路是,QUIC会通过追踪包的到达时间来预测当前带宽的使用情况,以决定是否提高,保持或者减少发送包的速率来避免网络拥塞。

QUIC协议的分析,性能测试以及在QQ会员实践

图13 packet pacing

 

丢包恢复

类似拥塞控制,除了基于TCP的一些丢包恢复机制,如:TLP,FACK。QUIC的丢包恢复也在一些方面做了改进。


比如:通过引入严格递增的sequence number使得计算RTT更加精确。更精确的RTT也意味更精确的RTO和超时重传机制。


还比如我们知道TCP中有个SACK选项,该选项打开时用于记录传输过程中一些没有被确认的数据的范围,便于后续定向重传多组丢失数据,而不是全部重传,所以更多的范围便于更多的选择重传,也意味着更少的重传包频率。但TCP最多支持3个SACK范围,而QUIC能支持255个。


除了上述基于TCP的改进的丢包恢复特性以外,早期的QUIC版本还有一个丢包恢复机制,就是FEC(Forward Error Correction),这个特性虽然目前处于正在改造阶段(可能会浪费带宽并且作用不是很明显),但是依然是一个有意思的解决方案。FEC的思路是通过在一组包(一般是10个)中,通过增加一个FEC包,并用FEC和每个包进行XOR,如果一旦有丢包,那么将FEC包和其余包XOR,得到的FEC包就是那个丢包,所以一组包最多只能恢复一个丢包。

QUIC协议的分析,性能测试以及在QQ会员实践

 

更多特性

除了上述的主要特性,QUIC还有一些其他特性,如:

● 通过header stream保证流顺序

● 底层保证连接持久

● 源地址令牌防止地址欺骗

● 握手时压缩证书避免放大攻击

 

在此不深入研究,大家有兴趣可以翻阅Google相关的文档查阅。

 

业界应用情况

● Google超过50%的请求来自QUIC

● 目前Youtube有20%的流量来自QUIC

● 微博移动端全面支持QUIC协议

 

测试demo

● 客户端
最新版本PC Chrome(控制开启/关闭quic)

 

● 服务器
经stgw改造支持quic的nginx

 

● 页面地址(机器被回收,后续会更换机器供测试)
https://stgwquic.kof.qq.com/club/platform/act/gift/test1.html
https://stgwquic.kof.qq.com/club/platform/act/gift/test2.html
https://stgwquic.kof.qq.com/club/platform/act/gift/test3.html

 

● 网络
公司staffwifi

 

● 抓包工具
wireshark

 

● 效果对比

QUIC协议的分析,性能测试以及在QQ会员实践

图15 HTTP1.1协议的页面

 

QUIC协议的分析,性能测试以及在QQ会员实践

图16 HTTP2协议的页面

 

QUIC协议的分析,性能测试以及在QQ会员实践

图17 QUIC协议的页面

 

QUIC协议的分析,性能测试以及在QQ会员实践

图18页面请求20个,大小2MB

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwzzxj.html