本文分享自天翼雲開發者社區《quic協議中Connection ID的協商機制》.作者:沈****揚
quic協議是基於UDP的應用層可靠協議。
由於UDP本身是無連接的服務,因此quic數據包的連接ID(connection id)用於確定該數據包屬於哪個quic連接。長包頭包含兩個連接ID:目標連接ID(DCID=Destination Connection ID)和目標連接ID(SCID=Source Connection ID)。
通常客户端的DCID是由客户端初始數據包確定,通過在初始數據包中攜帶DCID告知服務端。但是服務端可以在接收到客户端的初始數據包後,對客户端的DCID字段進行變更。
參考RFC9000文檔,如下所示:客户端發送初始數據包標記DCID為S1,服務端收到客户端的初始數據包後,響應給客户端初始數據包,此時變更了直接的SCID為S3。而客户端在收到該報文後,也將自己的DCID設置為S3,從而改變了DCID字段。
具體的,我們可以通過客户端模擬,下面是通過wireshark抓包的實例,可以看到DCID通過協商值發生了改變: