开始体验 TLSv1.3 的 Early data (0-RTT)

2019-05-15 16:58:54 浏览数 (1)

关注一下,更多精彩等着你!

明月对 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 的,大家可以围观体验一下:

运维学习笔记博客(www.imydl.tech)

明月登楼 Hexo 博客 (hexo.imydl.tech)

上述两个博客一个是 Typecho 动态博客,一个是 Hexo 框架下的纯静态博客,都已经支持 TLSv1.3 并开启了 Early data 支持 0-RTT。

·END·

0 人点赞