# 數據流
數據流(Streams)在QUIC中提供了一個輕量級、有序的字節流的抽象化。
QUIC中有兩種基本的數據流類型:
- 從發起者到對等端(Peer)的單向數據流。
- 雙向均可發出數據的雙向數據流。
連接端點的任意一方都可以建立這兩種數據流,數據流之間可并行、交錯地傳輸,并且可以被取消。
通過QUIC發送數據需要建立一個或多個數據流。
## 流量控制(Flow control)
每個數據流都有獨立的流量控制,端點可以通過此實現內存控制和反壓(back pressure)。數據流的創建本身也有流量控制,連接雙方可以聲明最多愿意創建幾個流ID。
## 流標識符
數據流通過一個無符號的62比特整數標識,也稱流ID。流ID的最低2位比特用于識別流的類型(單向或雙向)和流的發起者。
流ID的最低1位比特(0x1)用于識別流的發起者。客戶端發起雙數(最低位置0)流,服務器發起單數(最低位置1)流。
第2個比特(0x2)識別單/雙向流。單向流始終置1,雙向流則置0。
## 流并發
QUIC允許任意數量的并發流。端點通過閑置最大流ID來控制并發活動的傳入流數量。
每個端點指定自己的最大流ID數,并只對對等端端點有效。
## 收發數據
端點使用流來收發數據,這是流的最終用途。QUIC數據流是有序的字節流抽象。但是,不同流之間是無序的。
## 流優先度
如果正確設置了各流的優先度,流復用機制可以顯著提升應用的效率。使用其他多路復用協議(如HTTP/2)的經驗表明,有效的優先度劃分策略對效率具有顯著的正面影響。
QUIC本身沒有提供交換優先度信息的報文。接收優先度信息依賴于使用QUIC的應用層。應用層可以定義所有復合其語義的優先度方案。
基于QUIC使用HTTP/3時,優先度信息在HTTP層完成。