# ストリーム

QUIC におけるストリームは軽量で順序付けられたバイトストリームの概念を提供します。

QUIC には2種類の基本的なストリームが存在します:

* イニシエータからピアへデータを1方向に転送する単方向ストリーム
* お互いにデータを送ることができる双方向ストリーム

どちらのエンドポイントも、両方のタイプのストリームを作成でき、交互に配置した複数ストリームのデータを並行で送信したり中止したりできます。

QUIC のコネクションを経由してデータを送る際には、1つ以上のストリームが利用されます。

## フロー制御

ストリームは各自独立にフロー制御が行われ、エンドポイントがメモリの割当量を制限したり、バックプレッシャーをかけたりできるようになっています。

ストリーム作成も同様にフロー制御が行われ、それぞれのピアが一時的に許可される最大 Stream ID を宣言します。

## ストリームの識別名

ストリームは 62bit の符号なし整数により識別され、この整数を Stream ID と呼びます。

Stream ID の最下位 2bit はストリームの種類 (単方向もしくは双方向) とストリームのイニシエータの識別に利用されます。

Stream ID の 最下位 bit (0x1) は ストリームのイニシエータを識別します。

クライアントは偶数のストリームを開始し (このときの最下位 bit は 0 に設定されます)、サーバーは奇数のストリームを開始します (このときの最下位 bit は 1 に設定されます)。

Stream ID の最下位 2bit (0x2) は 単方向ストリームと双方向ストリームの両者を区別します。

単方向ストリームでは常にこの bit は 1 に設定され、双方向ストリームではこの bit は 0 に設定されます。

## ストリームの並行性

QUIC では任意の数のストリームを並行で操作することができます。エンドポイントは最大の Stream ID を制限することにより、並行して受信できる有効な入力ストリームの個数を制限できます。

Stream ID の上限はエンドポイント特有で、設定を受け取ったピアにのみ適用されます。

## データの送受信

エンドポイントはデータの送受信にストリームを利用します。それがつまるところストリームの究極の目的です。

ストリームは順序付けられたバイトストリームの概念です。

別々のストリームは必ずしも元の順序で配信されるとは限りません。

## ストリームの優先順位付け

ストリームに割り当てられたリソースに正しい優先順位付けがされているのならば、ストリームの多重化はアプリケーションのパフォーマンスに莫大な効果を与えます。

HTTP/2 のような他の多重化されたプロトコルでの経験から言って、効果的な優先順位付けの計画はパフォーマンスに莫大なプラスの影響を持ちます。

QUIC 自身は優先順位付けの情報を交換するフレームを持ちません。そのかわり、QUIC を利用するアプリケーションからの優先順位情報を信頼します。

QUIC を利用するプロトコルはそのアプリケーションのセマンティクスに合った優先順位付けのスキームを定義することが出来ます。

HTTP/3 に QUIC を利用する場合、HTTP レイヤーにおいては優先順位付けは不要です。

HTTP/2 の優先順位付けモデルは、それが過度に複雑で多くの HTTP/2 サーバにおいて使用および実装されていないことを懸念され、批判されています。現時点では、優先順位付けはメインの HTTP/3 仕様から削除されており、[個別の仕様](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/ja/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.
