開始體驗TLSv1.3 的Early data (0-RTT)
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的,大家可以圍觀體驗一下: