QUIC分层是在UDP层上面叠加了自己的两个层次——连接层和流层,具体分层如图2-1所示。
图2-1 QUIC分层
UDP以UDP四元组(源IP地址、源端口号、目的IP地址、目的端口号)标识,其中IP地址是为了在网络中传递时寻址,端口号是为了在主机上复用时派发。
连接(Connection)是最基本的QUIC实例,一个连接代表客户端和服务器之间的单次会话。一个QUIC连接可以使用多个连接标识识别。流(Stream)是QUIC提供给应用层的有序字节流抽象,在QUIC协议内部以流标识(Stream ID)区分,在QUIC报文中封装为STREAM帧。
一般一个连接关联一个UDP四元组,当本地IP变化时,绑定到新的源IP对应的UDP上。但也可以在一个UDP上复用多个QUIC连接,即在一个UDP上多路复用;或者一个QUIC连接工作在多个UDP上,比如多路QUIC,但这两种形式都不常见。
使用QUIC的应用可以打开/关闭流、在对应流上收发数据。QUIC协议将应用的数据封装在STREAM帧中,和QUIC协议自身的其他QUIC语义的帧封装成QUIC报文一起发送,典型的QUIC报文如图2-2所示。图2-2中Flag是8位,包含了QUIC的一些标识位,CID是QUIC的连接标识(Connection ID),报文长度是可选的,PN是报文的编号(Packet Number)。
图2-2 QUIC报文