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