付録 A: フローラベルフィールドのセマンティクスと使用方法
フロー (flow) とは、特定の送信元から特定の(ユニキャストまたはマルチキャスト)宛先に送信されるパケットのシーケンスであり、送信元が中間ルーターに特別な処理を要求するものです。その特別な処理の性質は、制御プロトコル(リソース予約プロトコルなど)またはフローのパケット自体内の情報(例えば逐跳オプション内)によってルーターに伝達される場合があります。そのような制御プロトコルまたはオプションの詳細は本文書の範囲外です。
送信元から宛先への複数のアクティブなフロー、およびどのフローにも関連しないトラフィックが存在する場合があります。フローは送信元アドレスと非ゼロのフローラベルの組み合わせによって一意に識別されます。フローに属さないパケットはフローラベル 0 を持ちます。
フローラベルはフローの送信元ノードによってフローに割り当てられます。新しいフローラベルは 1 から FFFFF 16 進数の範囲から(擬似)ランダムかつ均一に選択されなければなりません。ランダム割り当ての目的は、Flow Label フィールドの任意のビット集合が、フローに関連する状態を検索するためのルーターのハッシュキーとして適切に機能するようにすることです。
同じフローに属するすべてのパケットは、同じ送信元アドレス、宛先アドレス、およびフローラベルで送信されなければなりません。これらのパケットのいずれかが Hop-by-Hop Options ヘッダーを含む場合、それらはすべて同じ Hop-by-Hop Options ヘッダーの内容で発信されなければなりません(Hop-by-Hop Options ヘッダーの Next Header フィールドを除く)。これらのパケットのいずれかが Routing ヘッダーを含む場合、それらはすべて Routing ヘッダーまでのすべての拡張ヘッダーで同じ内容で発信されなければなりません(Routing ヘッダーの Next Header フィールドを除く)。ルーターまたは宛先はこれらの条件が満たされているかどうかを検証することが許可されていますが、要求されません。違反が検出された場合、ICMP Parameter Problem メッセージ(Code 0、Flow Label フィールドの上位オクテット(すなわち IPv6 パケット内のオフセット 1)を指す)によって送信元に報告すべきです。
フローパスに沿って確立されたフロー処理状態の最大生存期間は、状態確立メカニズム(リソース予約プロトコルやフロー確立逐跳オプションなど)の説明の一部として指定されなければなりません。送信元は、そのフローラベルの以前の使用に対して確立された可能性があるフロー処理状態の最大生存期間内に、新しいフローのためにフローラベルを再使用してはなりません。
ノードが停止して再起動する場合(例えば「クラッシュ (crash)」により)、その生存期間がまだ期限切れになっていない可能性がある以前のフローに使用されたフローラベルを使用しないように注意しなければなりません。これは、フローラベルの使用を安定したストレージに記録してクラッシュ後に記憶できるようにするか、または以前に確立された可能性があるフローの最大生存期間が期限切れになるまでフローラベルの使用を避けることで実現できます。ノードの再起動の最短時間が既知の場合、フローラベルの割り当てを開始する前に必要な待機期間からその時間を差し引くことができます。
すべてまたは大部分のパケットがフローに属する(すなわち非ゼロのフローラベルを持つ)ことは要求されません。この観察をここに記載するのは、プロトコル設計者と実装者がそうでないと仮定しないよう注意を促すためです。例えば、大部分のパケットがフローに属する場合にのみ十分なパフォーマンスを発揮するルーターを設計したり、フローに属するパケットにのみ適用されるヘッダー圧縮スキームを設計したりすることは賢明ではありません。