博客 / 詳情

返回

谷歌瀏覽器訪問QUIC實踐

文分享自天翼雲開發者社區《谷歌瀏覽器訪問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。

示例:alt-svc:h3=":443"; ma=2592000

該行的含義是服務器在443端口開啓了QUIC,最大緩存時間是2592000秒(30天),支持的QUIC版本IQUIC。

 

3、查看是否正常使用QUIC

當訪問支持QUIC的網站時,可以打開開發者工具(快捷鍵F12),在Protocol列可以查看其具體的協議,如下圖所示:

這裏顯示的h3表示採用的是IQUIC。

備註:如果沒有Protocol列,右鍵點擊Header Options,勾選Protocol列即可。

user avatar u_16213607 頭像 u_16213609 頭像 u_16272508 頭像
3 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.