# 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](https://tools.ietf.org/html/draft-ietf-httpbis-priority).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://http3-explained.haxx.se/zh-tw/quic/quic-streams.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
