近年来,随着固网宽带以及移动互联网的快速发展,以及5g时代的加速,视频直播行业
迎来新的巨大商机,各种视频直播平台如雨后春笋般的涌现。然而当大量用户同时在线访问
时,极致高清、无卡顿的视频直播体验成为大家的一致诉求。
而quik
能够帮助互联网内容服务商实现更快
的连接建立、弱网环境抗丢包
、切换网络无需重新连接
等等特性,可以帮助直播平台轻松解决卡顿
、首屏时间太长
等问题。
那就让我们对它有个初步的了解8⃣️
quic是什么❓
”QUIC(快速UDP网络连接)是一种实验性的网络传输协议,由Google开发,该协议旨在使网页传输更快 “
“QUIC提高了目前使用TCP的面向连接的网络应用程序的性能。它通过使用用UDP在两个端点之间创建
若干个多路连接
来实现这一目标,其目的是为了在网络层淘汰TCP,以满足许多应用的需求”-- 维基百科
quic的目标
QUIC与HTTP/2的
多路复用连接
协同工作,允许多个数据流独立
到达所有端点,因此不受涉及其他数据流的丢包影响。
- 相反,HTTP/2创建在传输控制协议上,如果任何一个TCP数据包延迟或丢失,所有多路数据流都会遭受
队头阻塞
延迟。 (head-of-line-blocking)低连接和传输时延,以及每个方向的带宽]估计以避免拥塞
- 拥塞控制移动到了两个端点的
用户空间
,而不是内核空间,使得算法得到更苦熬的改进前向纠错
,进一步提高预期错误的性能-- 维基百科
quic快在哪里
连接快
faster handshakes
延迟小
earlier data
网络切换性能好
connection-
迭代快,应用层改进快
前向纠错
- 改进的拥塞控制
quic为啥快
tcp的慢
- 三次握手
- 防止拥塞慢启动
- 丢包导致的对头阻塞
为啥快❗️
- 减少往返次数RTT,缩短连接建立时间⌚️:
缓存
对方的信息- 连接多路复用,且采用独立数据流避免丢包阻塞
- 使用前行纠错恢复丢失的包,减少超时重传
- 连接保存连接标志符,网络迁移连接快
quic为什么不是发明新的协议,而是基于UDP❓
1)新的协议需要的代价高
2)选择udp的出发点
- 避免 ossification(僵化):QUIC 协议加密负载,也是避免协议僵化一种方式,比如当中间层处理 UDP 数据时,只需要按照数据包的方式去处理即可,不需要去关注内部层的具体信息。
- 放弃改进 TCP 本身
- 创新方向:QUIC 是由谷歌提出的,所以 UDP 是以
浏览器
为出发点,从协议、从浏览器方向来进行创新
quik的挑战
针对tcp改进,所以大多挑战也是udp面临的
安全问题,反射攻击,伪造了原地址
- QUIC 握手过程是
不对称
的,特别是第一次请求时,客户端只需要发送几个字节的信息到服务器,而服务器则需要把证书等很多东西返还给客户端,这个不对称
的机会造成了放大。
开源quik
- quiche:这个是用·
Rust
做的库,通过 Nginx 调用。- google 自己的库也叫
quiche
,C++
写的。- ATS:Apache Traffic Server
- golang:
Caddy
- python+C:
aioquic
- 微软:
msquic
总结
- 利用
缓存
,显著减少连接建立时间- 改善拥塞控制,拥塞控制从内核空间到
用户空间
- 没有
head of line
阻塞的多路复用前向纠错
,减少重传- 连接
平滑迁移
,网络状态的变更不会影响连接断线
参考文献
唱吧前端:了解 QUIC
QUIC
HTTP/3 - HTTP over QUIC is the next generation by Daniel Stenberg
又拍云 |QUIC/HTTP3 协议简析
https://halfrost.com/ |本站开始支持 QUIC
https://www.slideshare.net/apnic/a-new-internet-introduction-to-http2-quic-and-doh
HTTP/3 Deep Dive
http://science.china.com.cn/2019-11/07/content_40951189.htm