5. QUICパケット (QUIC Packets)
QUICエンドポイントは、1つ以上のQUICパケットを含むUDPデータグラムを交換します。本セクションでは、QUICパケットの不変特性を記述します。QUICのバージョンによっては、単一のUDPデータグラムに複数のQUICパケットを許可する場合がありますが、不変特性はデータグラム内の最初のパケットのみを記述します。
QUICは2種類のパケットヘッダー (Packet Headers) を定義します: ロングヘッダー (Long Header) とショートヘッダー (Short Header)。ロングヘッダーを持つパケットは、最初のバイトの最上位ビット (Most Significant Bit) が1に設定されることで識別されます。ショートヘッダーを持つパケットは、そのビットがクリアされます。
QUICパケットは、ヘッダーを含めて完全性保護 (Integrity Protected) される場合があります。ただし、QUICバージョンネゴシエーションパケット (Version Negotiation Packets) は完全性保護されません。セクション6を参照してください。
ここで説明する値以外に、QUICパケットのペイロード (Payload) はバージョン固有 (Version-Specific) であり、任意の長さ (Arbitrary Length) です。
5.1 ロングヘッダー (Long Header)
ロングヘッダーは図2に記述された形式をとります。
Long Header Packet {
Header Form (1) = 1,
Version-Specific Bits (7),
Version (32),
Destination Connection ID Length (8),
Destination Connection ID (0..2040),
Source Connection ID Length (8),
Source Connection ID (0..2040),
Version-Specific Data (..),
}
図2: QUICロングヘッダー
ロングヘッダーを持つQUICパケットは、最初のバイトの高位ビットが1に設定されています。そのバイトの他のすべてのビットはバージョン固有です。
次の4バイトには32ビットのバージョンフィールド (Version Field) が含まれます。バージョンはセクション5.4で説明されます。
次のバイトには、その後に続く宛先接続IDフィールド (Destination Connection ID Field) のバイト長が含まれます。この長さは8ビット符号なし整数としてエンコードされます。宛先接続IDフィールドは宛先接続ID長フィールドに続き、長さは0から255バイトの間です。接続IDはセクション5.3で説明されます。
次のバイトには、その後に続く送信元接続IDフィールド (Source Connection ID Field) のバイト長が含まれます。この長さは8ビット符号なし整数としてエンコードされます。送信元接続IDフィールドは送信元接続ID長フィールドに続き、長さは0から255バイトの間です。
パケットの残りの部分にはバージョン固有のコンテンツが含まれます。
5.2 ショートヘッダー (Short Header)
ショートヘッダーは図3に記述された形式をとります。
Short Header Packet {
Header Form (1) = 0,
Version-Specific Bits (7),
Destination Connection ID (..),
Version-Specific Data (..),
}
図3: QUICショートヘッダー
ショートヘッダーを持つQUICパケットは、最初のバイトの高位ビットが0に設定されています。
ショートヘッダーを持つQUICパケットは、最初のバイトの直後に宛先接続IDを含みます。ショートヘッダーには、宛先接続ID長 (Destination Connection ID Length)、送信元接続ID長 (Source Connection ID Length)、送信元接続ID、またはバージョン (Version) フィールドは含まれません。ショートヘッダーを持つパケット内の宛先接続IDの長さは、パケット内にエンコードされておらず、本仕様によって制約されていません。
パケットの残りの部分はバージョン固有のセマンティクスを持ちます。
5.3 接続ID (Connection ID)
接続ID (Connection ID) は任意の長さの不透明なフィールド (Opaque Field) です。
接続IDの主な機能は、下位プロトコル層 (UDP、IP、およびそれ以下) でのアドレス変更が、QUIC接続のパケットを誤ったQUICエンドポイントに配信させないことを保証することです。接続IDは、エンドポイントとそれらをサポートする中間デバイス (Intermediaries) によって使用され、各QUICパケットがエンドポイントの正しいインスタンスに配信されることを保証します。エンドポイントでは、接続IDはパケットが意図するQUIC接続を識別するために使用されます。
接続IDは、各エンドポイントによってバージョン固有の方法で選択されます。同じQUIC接続のパケットは、異なる接続ID値を使用する場合があります。
5.4 バージョン (Version)
バージョンフィールド (Version Field) には4バイトの識別子が含まれます。この値は、エンドポイントがQUICバージョンを識別するために使用できます。0x00000000の値を持つバージョンフィールドは、バージョンネゴシエーション用に予約されています。セクション6を参照してください。他のすべての値は有効である可能性があります。
本文書で説明されている特性は、QUICのすべてのバージョンに適用されます。本文書で説明されている特性に準拠していないプロトコルはQUICではありません。将来の文書では、特定のQUICバージョンまたは一連のQUICバージョンに適用される追加の特性が説明される場合があります。