メインコンテンツまでスキップ

16. 可変長整数エンコーディング

16. 可変長整数エンコーディング

QUICパケットとフレームは、非負整数値に対して可変長エンコーディングを一般的に使用します。このエンコーディングにより、より小さな整数値はエンコードに必要なバイト数が少なくなります。

QUIC可変長整数エンコーディングは、最初のバイトの最上位2ビットを予約して、整数エンコーディング長のバイト単位での底2の対数をエンコードします。整数値は、残りのビット上にネットワークバイトオーダーでエンコードされます。

これは、整数が1、2、4、または8バイトでエンコードされ、それぞれ6、14、30、または62ビットの値をエンコードできることを意味します。表4はエンコーディングの特性をまとめています。

2Bit長さ使用可能ビット範囲
00160-63
012140-16383
104300-1073741823
118620-4611686018427387903

表4: 整数エンコーディングの概要

たとえば、8バイトシーケンス 0xc2 0x19 0x7c 0x5e 0xff 0x14 0xe8 0x8c(16進数)は10進値 151288809941952652 にデコードされます; 4バイトシーケンス 0x9d 0x7f 0x3e 0x7d は 494878333 にデコードされます; 2バイトシーケンス 0x7b 0xbd は 15293 にデコードされます; そして単一バイト 0x25 は 37 にデコードされます(2バイトシーケンス 0x40 0x25 も同様です)。

値は、必要な最小バイト数でエンコードする必要はありません。

エンドポイントは、値をエンコードするために厳密に必要な値よりも大きな値を使用することができます (MAY)。たとえば、64未満の値をエンコードするために2バイトエンコーディングを使用できます。

バージョン (セクション 15)、ヘッダーで送信されるパケット番号 (セクション 17.1)、およびフレームタイプ (セクション 19) はすべて整数を使用して記述されますが、このエンコーディングは使用しません。