QUIC with TLS1.3 简介

QUIC with TLS1.3 简介

最近TLS1.3[RFC 8446]和QUIC[RFC 8999-9002]的rfc都已经标准化, 网上看了一圈,好像大部分讲QUIC的文章还是在用基础的DH理论在讲, QUIC放弃自加密拥抱TLS1.3已经很长时间了,正好最近在做这方面的研究,就简单介绍一下。

区分QUIC与HTTP/3

QUIC是传输层协议,对标TCP+TLS。HTTP/3,HTTP/2等是应用层协议, HTTP/3为了实现0/1 RTT,所以传输层需要用到QUIC。

TLS 1.3

TLS1.3首次实现了1 RTT:

          Client                                               Server

   Initial Handshake: (首次握手)
          ClientHello
          + key_share               -------->
                                                          ServerHello
                                                          + key_share
                                                {EncryptedExtensions}
                                                {CertificateRequest*}
                                                       {Certificate*}
                                                 {CertificateVerify*}
                                                           {Finished}
                                    <--------     [Application Data*]
          {Certificate*}
          {CertificateVerify*}
          {Finished}                -------->
                                    <--------      [NewSessionTicket]
          [Application Data]        <------->      [Application Data]


   Subsequent Handshake: (再次握手)
          ClientHello
          + key_share*
          + pre_shared_key          -------->
                                                          ServerHello
                                                     + pre_shared_key
                                                         + key_share*
                                                {EncryptedExtensions}
                                                           {Finished}
                                    <--------     [Application Data*]
          {Finished}                -------->
          [Application Data]        <------->      [Application Data]

               Figure 3: Message Flow for Resumption and PSK

QUIC with TLS1.3

服务端运行在18081端口

根据wireshark分析:(已经载入会话密钥解密完成)
QUIC with TLS1.3 简介_第1张图片

其中1-4为QUIC的初始化(实际上用到了TLS1.3)
下面逐个分析:

1号报文:

QUIC with TLS1.3 简介_第2张图片
看UDP报文port可以看到:报文是客户端发给服务端的。 在QUIC段里有QUIC的一些header, 重点在Payload,通过解析加密的Payload 我们得到了TLSv1.3的解析报文:Handshake Protocol: Client Hello
注意下面还有PADDING,这是[RFC 9000 - Section14.1.]里定义的

A client MUST expand the payload of all UDP datagrams carrying
Initial packets to at least the smallest allowed maximum datagram
size of 1200 bytes by adding PADDING frames to the Initial packet or
by coalescing the Initial packet; see Section 12.2.

我们也可以看到QUIC报文的长度由于PADDING 达到了Path Maximum Transmission Unit (PMTU) 也就是 1280 bytes大小

2号报文:

QUIC with TLS1.3 简介_第3张图片
看UDP报文port可以看到:报文是服务端发给客户端的。 UDP上包含2个QUIC报文: Handshake Protocol: Server HelloHandshake Protocol: Multiple Handshake Message
其中后者包含了一个很长的certificate这个被分片(fragment)了,所以报文3 仍旧是报文2的延伸

3号报文:

QUIC with TLS1.3 简介_第4张图片
3号报文也是服务端发给客户端的, 是2号的后一分片, 这里它把cert全部发送完成,最后到服务端发送 Handshake Protocol: Finished

4号报文:

QUIC with TLS1.3 简介_第5张图片
4号报文也是客户端发给服务端的,包含两个QUIC报文, 第一个是客户端 Handshake Protocol: Finished, 此时已经意味着tls1.3握手全部完成了。第二个报文是客户端发给服务端的具体载荷,我们可以看到Stream Data里面解析出来为: “Da Shen Ke Ji: test” 两边通信建立完成,第一个通讯包已经发送。

RTT计算

简单画了一个时序图:
QUIC with TLS1.3 简介_第6张图片
我们可以看到,实际上RTT只有1, 所以很快。

你可能感兴趣的:(http,网络协议,wireshark,网络通信,socket)