那面试官说的这句「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;
-
客户端和服务端已经完成过一次通信;