TLS False Start到底是如何加速网站的

做者:王继波
野狗科技运维总监,曾在360、TP-Link从事网络运维相关工做,在网站性能优化、网络协议研究上经验丰富。
野狗官博:https://blog.wilddog.com/
野狗官网:https://www.wilddog.com/
公众订阅号:wilddogbaashtml

图片描述

咱们是一群认真执着的小野狗,任何体验和性能的提高,咱们都很是关注。今天咱们来介绍HTTPS网站加速中的一个重要功能-TLS False Start,这固然已经在野狗全部网站上实现。浏览器

先来讲说优化HTTPS网站三个基本出发点:安全

  • 使用更少的网络通讯往返;性能优化

  • 更少更快的加解密计算;服务器

  • 更小的网络延迟。网络

而TLS False Start功能对HTTPS网站的加速正是经过减小通讯RT(Round Trip)实现的。并发

TLS False Start是什么?

首先咱们来看看HTTP和HTTPS通讯对比。运维

在最不理想情况下,一个正常HTTP到达TTFB(Time To First Byte)须要通过如下过程:1个DNS查询RT、1个TCP握手RT,至少一个HTTP请求和响应RT。咱们假设浏览器和服务器之间的RTT为50ms(50ms也是中国网络从南到北延迟值),这里咱们暂且不考虑DNS,因此在这个假设下,HTTP到达TTFB须要100ms。高并发

咱们再来看看HTTPS过程,相比于HTTP,HTTPS多出两个RTT用来协商TLS隧道(这里忽略加解密计算和OCSP等时间因素),一样不考虑DNS,在这个假设下,HTTPS到达TTTFB须要200ms。性能

能够看到,HTTPS通讯时间是HTTP的整整两倍,这也是认为HTTPS慢的重要缘由之一。

图片描述

HTTPS通讯过程

试想,若是可以减小HTTPS通讯过程的RT,将时间从200ms提升到150ms,那直接减小了1/4的时间消耗,这对于高并发高负载的服务器性能提高和带宽节省是显而易见的。

这固然是有办法的,这就是今天要介绍的TLS False Start的做用。

TLS False Start是Google提出来的优化方法,其作法是:在TLS协商第二阶段,浏览器发送ChangeCipherSpec和Finished后,当即发送加密的应用层数据,而无需等待服务器端的确认。

下图是启用TLS False Start以后的HTTPS通讯过程。

图片描述

HTTPS通讯过程启用TLS False Start

下面理论结合实际,经过抓包的方法来分析。分别对未启用TLS False Start的京东登陆页面和启用TLS False Start的野狗WildDog首页(https://www.wilddog.com)抓包。

先来看下未启用TLS False Start的京东登陆页面通讯过程。

图片描述

在上图框出两处能够看到,浏览器端在发送ChangeCipherSpec和Finished后,处于等待状态,直到服务器的确认包到达,才进行加密的应用数据传输。

再来看下enable TLS False Start的野狗WildDog首页通讯过程。

图片描述

在上图框出两处能够看到,浏览器在发送ChangeCipherSpec和Finished后,并无等待服务器端的确认就当即发送了加密应用数据。这样就省去了一个RT。

如何启用TLS False Start?

开启TLS False Start须要浏览器端和服务器端同时知足条件。

Chrome和Firefox须要支持NPN/ALPN,而且服务器端配置支持前向安全(Forward Secrecy);
Safari从OSX 10.9开始支持,并须要服务器端开启前向安全配合;
IE使用黑名单和超时机制实现。
Chrome和Firefox的最新版本都是默认支持NPN/ALPN的,这也能够经过抓包看到的,在数据包的扩展字段中。

图片描述

那如何在服务器端开启Forward Secrecy?

不一样的WEB服务器有不一样的方法,这里以Nginx为例说明,开启方法其实不麻烦。

ssl_prefer_server_ciphers on;

ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256…..(加密套件的选择具备很大灵活度,不列举详细列表)

详细的TLS False Start说明能够参见IETF的文档。

https://tools.ietf.org/html/draft-bmoeller-tls-falsestart-00

也欢迎你们关注野狗,和咱们多多交流。

相关文章
相关标签/搜索