這種公司不去也罷!



那面試官說的這句「HTTPS 中的 TLS 握手過程可以同時進(jìn)行三次握手」對不對呢?
客戶端和服務(wù)端都開啟了 TCP Fast Open 功能,且 TLS 版本是 1.3;
客戶端和服務(wù)端已經(jīng)完成過一次通信。
TCP Fast Open
我們先來了解下什么是 TCP Fast Open?


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

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


TCP Fast Open + TLSv1.3
總結(jié)
客戶端和服務(wù)端都開啟了 TCP Fast Open 功能,且 TLS 版本是 1.3;
客戶端和服務(wù)端已經(jīng)完成過一次通信;

