QUIC串流

在 QUIC 中的資料串流( Streams )提供了一個輕量級,有序的字節流的抽象化。

QUIC 中有兩種基本的資料串流類型:

  • 單向資料串流: 從發起者到對等端( Peer )的單向資料串流。

  • 雙向均可發出資料的雙向資料串流。

連接端點的任意一方都可以建立這兩種資料串流,資料串流之間可並行、交錯地傳輸,並且可以被取消。

通過 QUIC 發送資料將建立一個或多個資料串流。

流量控制 ( Flow control )

每個資料串流都有獨立的流量控制,端點可以通過此實現內存控制和反壓( back pressure )。資料串流的創建本身也受到流量控制,連接雙方可以聲明最多願意接受多少數量的資料串流ID。

資料串流識別符 ( Stream Identifiers )

資料串流由一組無符號62位元的整數標示,稱為資料串流ID。資料串流ID的最低2位元用於標示資料串流類型( 單向或雙向 )和資料串流啟動器。

資料串流ID的最低位元( 0x1 )標示資料串流的發起者。客戶端發起為偶數( 設置為0 )資料串流,伺服器端發起為奇數( 設置為1 )資料串流。

第2個位元( 0x2 )用於識別單/雙向資料串流。單向資料串流始終為1,雙向資料串流則為0。

資料串流的並行性 ( Stream concurrency )

QUIC 允許任意數量的資料串流同時運行。端點通過閒置最大資料串流ID來控制並行的傳入資料串流數量。

每個端點指定自己的最大資料串流ID數,並只對對等端端點有效。

傳送和接收資料 ( Sending and Receiving Data )

端點使用資料串流來發送和接收資料。這是資料串流的最終目的。 QUIC 資料串流是有序的字節流抽象。但是不同資料串流之間是無序的。

資料串流的優先順位 ( Stream Prioritization )

如果正確設置了各資料串流的優先度,流復用機制可以顯著提升應用的效率。使用其它多路復用協定( 如HTTP/2 )的經驗表明,有效的優先度劃分策略對效率具有顯著的正面影響。

QUIC 本身沒有交換優先級訊息的框架。 相反,它信任來自使用 QUIC 的應用程序的優先級訊息。利用 QUIC 的協定可以定義與它們的應用程序語義相匹配的優先級分配方案。

有許多對 HTTP/2 優先級排序模型的批評,並且擔心它過於復雜,並且沒有被許多 HTTP/2 伺服器端使用和實現。 目前,HTTP/3 中的優先級已從主要的 HTTP/3 規範中刪除,且正被做成一個 separate specification.

Last updated