看 B 站,可以更快!
共 6159字,需浏览 13分钟
·
2021-05-05 07:59
因为 B 站部分视频服务器支持使用 QUIC 协议观看视频,QUIC 是基于 UDP 传输协议实现的,而且最新的 HTTP/3 使用的正是 QUIC 协议,它相比 HTTP/2 性能其实更好,观看视频体验更佳,特别是弱网环境下。
QUIC 协议性能有多好?
Chromium ( Google 的 Chrome 浏览器背后的引擎)团队表示,其发现 QUIC 的性能优势特别高,使得 Google 搜索延迟减少了 2% 以上,YouTube 的重新缓冲时间减少了 9% 以上,PC 客户端吞吐量增加了 3% 以上,移动设备的客户端吞吐量增加了 7% 以上。
怎么用 QUIC 看 B 站视频?
手机端我没研究过怎么使用 QUIC 协议看 B 站视频,但是谷歌浏览器则很容易搞定。
谷歌浏览器支持 QUIC 协议,这个是属于实验性功能,QUIC 协议实际上还在草案中,还没有正式发布,所以不是默认启动的,需要手动打开。
第一步,打开Chrome浏览器, 在地址输入 chrome://flags/#enable-quic
, 将标志设置为 Enabled
。
第二步,重启浏览器后, 打开B站, 随便点开个视频,然后检查是否使用 QUIC 协议进行视频播放, 检查方法如下:
按下 F12
进入浏览器调试信息界面;选取 Network->Protocol, 如果 Protocol 显示 h3 则表示目前是使用 HTTP/3 (意味着使用 QUIC 协议)协议进行视频内容传输。
转场
美中不足的 HTTP/2
队头阻塞; TCP 与 TLS 的握手时延迟; 网络迁移需要重新连接;
队头阻塞
TCP 与 TLS 的握手时延迟
网络迁移需要重新连接
QUIC 协议的特点
无队头阻塞; 更快的连接建立; 连接迁移;
无队头阻塞
更快的连接建立
连接迁移
HTTP/3 协议
一个叫 QPACK Encoder Stream, 用于将一个字典(key-value)传递给对方,比如面对不属于静态表的 HTTP 请求头部,客户端可以通过这个 Stream 发送字典; 一个叫 QPACK Decoder Stream,用于响应对方,告诉它刚发的字典已经更新到自己的本地动态表了,后续就可以使用这个字典来编码了。
总结
队头阻塞,HTTP/2 多个请求跑在一个 TCP 连接中,如果序列号较低的 TCP 段在网络传输中丢失了,即使序列号较高的 TCP 段已经被接收了,应用层也无法从内核中读取到这部分数据,从 HTTP 视角看,就是多个请求被阻塞了; TCP 和 TLS 握手时延,TCL 三次握手和 TLS 四次握手,共有 3-RTT 的时延; 连接迁移需要重新连接,移动设备从 4G 网络环境切换到 WIFI 时,由于 TCP 是基于四元组来确认一条 TCP 连接的,那么网络环境变化后,就会导致 IP 地址或端口变化,于是 TCP 只能断开连接,然后再重新建立连接,切换网络环境的成本高;
无队头阻塞,QUIC 连接上的多个 Stream 之间并没有依赖,都是独立的,也不会有底层协议限制,某个流发生丢包了,只会影响该流,其他流不受影响; 建立连接速度快,因为 QUIC 内部包含 TLS1.3,因此仅需 1 个 RTT 就可以「同时」完成建立连接与 TLS 密钥协商,甚至在第二次连接的时候,应用数据包可以和 QUIC 握手信息(连接信息 + TLS 信息)一起发送,达到 0-RTT 的效果。 连接迁移,QUIC 协议没有用四元组的方式来“绑定”连接,而是通过连接 ID 来标记通信的两个端点,客户端和服务器可以各自选择一组 ID 来标记自己,因此即使移动设备的网络变化后,导致 IP 地址变化了,只要仍保有上下文信息(比如连接 ID、TLS 密钥等),就可以“无缝”地复用原连接,消除重连的成本;
参考连接
https://medium.com/faun/http-2-spdy-and-http-3-quic-bae7d9a3d484
https://developers.google.com/web/fundamentals/performance/http2?hl=zh-cn
https://blog.cloudflare.com/http3-the-past-present-and-future/
https://tools.ietf.org/html/draft-ietf-quic-http-34
https://tools.ietf.org/html/draft-ietf-quic-transport-34#section-17
https://ably.com/topic/http3?amp%3Butm_campaign=evergreen&%3Butm_source=reddit&utm_medium=referral
https://www.nginx.org.cn/article/detail/422
https://www.bilibili.com/read/cv793000/
https://www.chinaz.com/2020/1009/1192436.shtml
有道无术,术可成;有术无道,止于术
欢迎大家关注Java之道公众号
好文章,我在看❤️