

「HTTPS 中的 TLS 握手過程可以同時進行三次握手」對不對呢?
-
客戶端和服務端都開啟了 TCP Fast Open 功能,且 TLS 版本是 1.3;
-
客戶端和服務端已經完成過一次通信。
TCP Fast Open
我們先來了解下什么是 TCP Fast Open?


-
客戶端發送 SYN 報文,該報文包含 Fast Open 選項,且該選項的 Cookie 為空,這表明客戶端請求 Fast Open Cookie;
-
支持 TCP Fast Open 的服務器生成 Cookie,並將其置於 SYN-ACK 報文中的 Fast Open 選項以發回客戶端;
-
客戶端收到 SYN-ACK 后,本地緩存 Fast Open 選項中的 Cookie。

-
客戶端發送 SYN 報文,該報文可以攜帶「應用數據」以及此前記錄的 Cookie;
-
支持 TCP Fast Open 的服務器會對收到 Cookie 進行校驗:如果 Cookie 有效,服務器將在 SYN-ACK 報文中對 SYN 和「數據」進行確認,服務器隨后將「應用數據」遞送給對應的應用程序;如果 Cookie 無效,服務器將丟棄 SYN 報文中包含的「應用數據」,且其隨后發出的 SYN-ACK 報文將只確認 SYN 的對應序列號;
-
如果服務器接受了 SYN 報文中的「應用數據」,服務器可在握手完成之前發送「響應數據」,這就減少了握手帶來的 1 個 RTT 的時間消耗;
-
客戶端將發送 ACK 確認服務器發回的 SYN 以及「應用數據」,但如果客戶端在初始的 SYN 報文中發送的「應用數據」沒有被確認,則客戶端將重新發送「應用數據」;
-
此后的 TCP 連接的數據傳輸過程和非 TCP Fast Open 的正常情況一致。
TLSv1.3
說完 TCP Fast Open,再來看看 TLSv1.3。


TCP Fast Open + TLSv1.3
總結
-
客戶端和服務端都開啟了 TCP Fast Open 功能,且 TLS 版本是 1.3;
-
客戶端和服務端已經完成過一次通信;
參考: