コンテンツにスキップ

現在の上限

wired が内部に持つ表(コネクションやストリームの管理表)は、すべてビルド時に大きさが決まる固定長の配列です。 表に収まらない要求をしてきた相手には、新しくメモリーを確保して応じるのではなく、ストリームのリセットやエラー応答といった通信上の拒否を返します。 以下はソースコード上の値で、右の列がその定数の名前です(注記したものは、ビルド時に -D で上書きできます)。

上限 値 定数
サーバーあたりの 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
上限 値 定数
コネクションあたりの同時リクエストストリーム 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 回分を超えるレスポンスはストリーミングします(大きなボディのストリーミング)。

上限 値 定数
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 クライアントでしか確認していません。