現在の上限
wired が内部に持つ表(コネクションやストリームの管理表)は、すべてビルド時に大きさが決まる固定長の配列です。
表に収まらない要求をしてきた相手には、新しくメモリーを確保して応じるのではなく、ストリームのリセットやエラー応答といった通信上の拒否を返します。
以下はソースコード上の値で、右の列がその定数の名前です(注記したものは、ビルド時に -D で上書きできます)。
コネクションと WebTransport
Section titled “コネクションと WebTransport”| 上限 | 値 | 定数 |
|---|---|---|
| サーバーあたりの QUIC コネクション | 64 | WIRED_CONNTABLE_CAP |
| コネクションあたりの WebTransport セッション | 2 | SRVRUN_MAX_WT_SESSIONS |
| 全コネクション合計の WebTransport セッション | 64 | SRVRUN_MAX_WT_SESSIONS_GLOBAL |
| コネクションあたり 1 秒間に開ける WebTransport セッション | 10 | SRVRUN_MAX_WT_SESSIONS_PER_WINDOW |
| コネクションあたりの、クライアントが開いた WT 双方向ストリーム | 24(-D で上書き可) |
WIRED_SRVLOOP_MAX_WT_STREAMS |
| コネクションあたりの、クライアントが開いた WT 単方向ストリーム | 6 | WIRED_SRVLOOP_MAX_WT_UNI_STREAMS |
| コネクションあたり同時に送信中の、サーバーが開いた WT ストリーム | 16 | SRVRUN_WT_SEND_SLOTS |
| WT ストリーム 1 本の受信ウィンドウ | 49152 バイト | WIRED_SRVLOOP_WT_BUF_CAP |
HTTP/3 のリクエスト
Section titled “HTTP/3 のリクエスト”| 上限 | 値 | 定数 |
|---|---|---|
| コネクションあたりの同時リクエストストリーム | 40(-D で上書き可) |
WIRED_SRVLOOP_MAX_STREAMS |
リクエストボディのウィンドウ(on_body なしではボディ全体、ありでは 1 回分) |
2048 バイト | BODYWIN_CAP |
| リクエストのヘッダーセクション | 2048 バイト | WIRED_H3_MAX_FIELD_SECTION |
| リクエストごとに保持するヘッダー(それ以降は無視) | 32 | WIRED_H3REQDRIVE_MAX_HDRS |
| ハンドラー 1 回あたりのレスポンスヘッダーフィールド | 8 | WIRED_HTTP_MAX_FIELDS |
| エンコード済みのレスポンスヘッダーの領域 | 512 バイト | SRVRUN_RESP_HDR_ROOM |
| 固定長のレスポンス 1 回分(ヘッダーとボディ) | 16384 バイト | WIRED_SRVRUN_RESP_MAX |
2048 バイトを超えるリクエストボディには wired_srvrun_handler.on_body が必要で、ボディをウィンドウ 1 つ分ずつ受け取ります(POST ボディのストリーミング)。
1 回分を超えるレスポンスはストリーミングします(大きなボディのストリーミング)。
MoQT ハブ
Section titled “MoQT ハブ”| 上限 | 値 | 定数 |
|---|---|---|
| 1 つのハブが管理するセッション | 32 | WIRED_MOQTRUN_MAX_SESSIONS |
| 1 つのセッションが PUBLISH できる Track | 3 | WIRED_MOQTRUN_MAX_TRACKS_PER_PEER |
| Track あたり同時に中継する発行者のストリーム | 4 | WIRED_MOQTRUN_MAX_RELAYS |
| 複数回の配送に分かれて届く Object の後半部分 | 16384 バイト | WIRED_MOQTRUN_RELAY_FRAG_MAX |
| 後半を保持するバッファー(ハブ全体) | 8 | WIRED_MOQTRUN_FRAG_POOL |
| リクエストストリーム(ハブ全体) | 64 | WIRED_MOQTRUN_MAX_REQS |
| セッションあたりのリクエストストリーム | 16 | WIRED_MOQTRUN_MAX_REQS_PER_SESSION |
| 同時に応答中の FETCH(ハブ全体) | 8 | WIRED_MOQTRUN_MAX_FETCHES |
| 受信する制御メッセージの本体 | 1024 バイト | WIRED_MOQTRUN_CTL_MSG_MAX |
| Track Name | 64 バイト | WIRED_MOQTRUN_MAX_NAME |
| エンコード済みの Track Namespace | 128 バイト | WIRED_MOQTRUN_MAX_NS |
| GOAWAY の New Session URI | 8192 バイト | WIRED_MOQTRUN_GOAWAY_URI_MAX |
| 1 つのリクエストの Range Filter の Range 数(広告する MAX_FILTER_RANGES) | 4 | WIRED_MOQTRUN_MAX_FILTER_RANGES |
| 1 つのリクエストの未応答の REQUEST_UPDATE(広告する MAX_REQUEST_UPDATES) | 4 | WIRED_MOQTRUN_MAX_REQ_UPDATES |
| FETCH 用のキャッシュ | アプリが渡すアリーナの大きさ | wired_moqt_cache_attach |
draft-ietf-moq-transport のうち実装していない部分
Section titled “draft-ietf-moq-transport のうち実装していない部分”ハブは、クライアントが提示する WebTransport のサブプロトコル(moqt-18/moqt-19/moqt-22)に応じて、セッションごとに draft-18、draft-19、draft-22 のいずれかを話します。
以下は、版を明記したもの以外、3 つの版すべてに当てはまります。
- サブプロトコルを交渉しないセッション(たとえば WebTransport の
protocolsに対応しないブラウザ)は、draft-19 を、従来の双方向の制御ストリーム 1 本の上で話します。 単方向の制御ストリームの組(draft-22 の 6.3)と draft-18、draft-22 を使うには、moqt-NNのサブプロトコルが必要です。 このガイドのサンプルはmoqt-22を交渉するので、この経路では動きません。examples/moqt_chatがフォールバックとしてだけ使います。 - その双方向の制御ストリームで行った購読には、PUBLISH_DONE が送られません。 制御ストリームには、その購読を指す Request ID がないためです。 それぞれのリクエストストリームで行った購読には送られます。
- SUBSCRIBE_TRACKS への REQUEST_UPDATE には NOT_SUPPORTED で答えます。 送信者自身の PUBLISH への REQUEST_UPDATE も、draft-22 のセッション以外では NOT_SUPPORTED で答えます。
- Range Filter(draft-19 と draft-22 のみ)は、検査して MAX_FILTER_RANGES に数えますが、配信を絞るのは OBJECTID_FILTER だけで、それもデータグラムで送る Object に限ります。 ほかの種類のフィルタは素通しです。
- Track Property の DEFAULT_PUBLISHER_PRIORITY は読みません。 Publisher Priority を明示していない Object は 128 として扱います。
- ハブ自身の Track(
wired_moqt_publish_blob、wired_moqt_publish_live)は名前空間を持たず、SUBSCRIBE とは Track Name だけで照合します。 - MoQT は QUIC の上で直接も動きます(ALPN
moqt-22/moqt-19/moqt-18。wired_srvboot_id.raw_alpnsとraw_on_sessionで有効化)。ただし、この経路は まだプロセス内のテストと一部の interop クライアントでしか確認していません。