TLSv1.3 的体验其实已经很久了,比如我的运维学习笔记博客里的『纯自嗨,LNMP 下启用 TLSv1.3 支持过程全记录』一文都已经是一年前的事儿了,时至今日随着 lnmp 1.6 测试版的发布,在 VPS 上开启 TLSv1.3 支持也变得是越来越简单和稳定了,昨晚上将自己 VPS 上的 lnmp 1.5 给升级到了 lnmp 1.6 测试版就发现 TLSv1.3 的支持更加的健全和完美了,今天就给大家说道说道!
都说 TLSv1.3 好,可是 TLSv1.3 具体好在哪里?能详细回答上来的人估计没有几个,大家最多也就是笼统的知道 TLSv1.3 比 TLSv1.2、TLSv1.1 这些快,至于说为什么快?快在哪里?估计就说不清楚了,也是一知半解的一直,直到这次折腾结束才算是明白了一个大概。先了解一些基础的东西:
传输延迟(Transmission Latency)是 Web 性能的重要指标之一,低延迟意味着更流畅的页面加载以及更快的 API 响应速度。而一个完整的 HTTPS 链接的建立大概需要以下四步:
- 第一步:DNS 查询
浏览器在建立链接之前,需要将域名转换为互联网 IP 地址。一般默认是由你的 ISP DNS 提供解析。ISP 通常都会有缓存的,一般来说花费在这部分的时间很少。
- 第二步:TCP 握手( 1 RTT)
和服务器建立 TCP 连接,客户端向服务器发送 SYN 包,服务端返回确认的 ACK 包,这会花费一个往返(1 RTT)
- 第三步:TLS 握手 (2 RTT)
该部分客户端会和服务器交换密钥,同时设置加密链接,对于 TLS 1.2 或者更早的版本,这步需要 2 个 RTT
- 第四步:建立 HTTP 连接(1 RTT)
一旦 TLS 连接建立,浏览器就会通过该连接发送加密过的 HTTP 请求。
我们假设 DNS 的查询时间忽略不计,那么从开始到建立一个完整的 HTTPS 连接大概一共需要 4 个 RTT,如果是浏览刚刚已经访问过的站点的话,通过 TLS 的会话恢复机制,第三步 TLS 握手能够从 2 RTT 变为 1 RTT。
- 总结:
建立新连接 :
4 RTT + DNS 查询时间
访问刚浏览过的连接:
3 RTT + DNS 查询时间
TLSv1.2 需要 2 个 RTT 完成 TLS 协商,TLSv1.3 只需要一个。而重复连接 TLSv1.2 需要 1RTT,TLSv1.3 Early data 就可以 0RTT 重复连接,也就是说 TLSv1.3 比 TLSv1.2 少了一个 0RTT,TLSv1.3 比 TLSv1.2 快就主要快在这里了。
如果你是使用军哥 LNMP 一键安装包来部署 VPS 环境的,那么就可以参考「开始使用 lnmp 1.6 测试版 支持 TLSv1.3 的 Early data」一文的方法更新部署环境即可体验 TLSv1.3 的 Early data (0-RTT),需要强调的是如果你的站点开启了 CDN 加速服务的话,要让所有客户端访问都采用 TLSv1.3 就需要 CDN 本身也支持 TLSv1.3 才可以的,目前使用又拍云 CDN 的几个博客都是支持 TLSv1.3 的,大家可以围观体验一下: