文分享自天翼雲開發者社區《谷歌瀏覽器訪問QUIC實踐》.作者:林****娟
一、背景信息:
QUIC由Google自研,2012年部署上線,2013年提交IETF,2021年5月,IETF推出標準版RFC9000。Google推出的QUIC被稱為GQUIC,IETF制定的QUIC稱為IQUIC。
QUIC的主要優勢如下:
1、握手建連更快
QUIC建連時間大約0~1 RTT,在兩方面做了優化:
1)傳輸層使用了UDP,減少了1個RTT三次握手的延遲。
2)加密協議採用了TLS 協議的最新版本TLS 1.3,相對之前的TLS 1.1-1.2,TLS1.3允許客户端無需等待TLS握手完成就開始發送應用程序數據的操作,可以支持1 RTT和0RTT。
對於QUIC協議,客户端第一次建連的握手協商需1-RTT,而已建連的客户端重新建連可以使用之前協商好的緩存信息來恢復TLS連接,僅需0-RTT時間。因此QUIC建連時間大部分0-RTT、極少部分1-RTT,相比HTTPS的3-RTT的建連,具有極大的優勢。
2、避免隊首阻塞的多路複用
QUIC同樣支持多路複用,相比HTTP/2,QUIC的流與流之間完全隔離的,互相沒有時序依賴。如果某個流出現丟包,不會阻塞其他流數據的傳輸和應用層處理,所以這個方案並不會造成隊首阻塞。
3、支持連接遷移
當你用手機使用蜂窩網絡參加遠程會議,當你把網絡切換到WLAN時,會議客户端會立馬重連,視頻同時出現瞬間卡頓。這是因為,TCP採用四元組(包括源IP、源端口、目標地址、目標端口)標識一個連接,在網絡切換時,客户端的IP發生變化,TCP連接被瞬間切斷然後重連。連接遷移就是當四元組中任一值發生變化時,連接依舊能保持,不中斷業務。QUIC支持連接遷移,它用一個(一般是64位隨機數)ConnectionID標識連接,這樣即使源的IP或端口發生變化,只要ConnectionID一致,連接都可以保持,不會發生切斷重連。
4、可插拔的擁塞控制
QUIC是應用層協議,用户可以插拔式選擇像Cubic、BBR、Reno等擁塞控制算法,也可以根據具體的場景定製私有算法。
5、前向糾錯(FEC)
QUIC支持前向糾錯,弱網丟包環境下,動態的增加一些FEC數據包,可以減少重傳次數,提升傳輸效率。
二、適用場景
1、圖片業務:可降低圖片加載時間。
2、短視頻業務:可提升視頻秒開率,並且降低弱網環境卡頓率。
3、直播業務:可提升播放穩定性,降低因網絡波動帶來的卡頓率。
三、使用谷歌瀏覽器訪問QUIC實戰
1、谷歌瀏覽器發起QUIC步驟
QUIC屬於雙邊協議,需要客户端同步支持。可以使用Chrome瀏覽器來訪問QUIC網站,或者使用基於Chrome內核的瀏覽器。目前較新版本的chrome瀏覽器已默認開啓QUIC。
一般情況下,Chrome瀏覽器和服務器端協商使用QUIC協議要經過如下步驟:
1)首次訪問,客户端發出正常的TCP請求
2)服務端如果支持QUIC,會通過響應頭部返回alt-svc頭部告知瀏覽器自己支持QUIC及版本號
3)下次訪問,客户端同時發起TCP連接和QUIC連接競速
4)一旦QUIC競速連接獲勝,則後續會採用QUIC協議發送請求
5)如遇網絡或服務器不支持QUIC,客户端標記QUIC為broken
6)傳輸中的QUIC請求立即用TCP重發
7)5min後嘗試重試QUIC,下一次嘗試增大到10min
8)一旦再次成功採用QUIC並把broken標記取消
2、如何判斷一個網站是否支持QUIC呢?
可以通過服務器返回的響應頭部來判斷,當出現響應頭部返回alt-svc時,即表示該網站支持QUIC。
該行的含義是服務器在443端口開啓了QUIC,最大緩存時間是2592000秒(30天),支持的QUIC版本IQUIC。
3、查看是否正常使用QUIC
當訪問支持QUIC的網站時,可以打開開發者工具(快捷鍵F12),在Protocol列可以查看其具體的協議,如下圖所示:

這裏顯示的h3表示採用的是IQUIC。
備註:如果沒有Protocol列,右鍵點擊Header Options,勾選Protocol列即可。