5.1. Fields of a PDU (PDUのフィールド)
5.1 Fields of a PDU (PDUのフィールド)
PDUには以下のデータ要素が含まれます:
Protocol Version (プロトコルバージョン): 8ビット符号なし整数で, 現在は1であり, このプロトコルのバージョンを示します。
PDU Type (PDUタイプ): 8ビット符号なし整数で, IPv4プレフィックスなどのPDUのタイプを示します。
Serial Number (シリアル番号): 上流のキャッシュサーバーからこのPDUセットを受信したとき, またはグローバルRPKIから収集されたときのRPKIキャッシュのシリアル番号。キャッシュが親キャッシュまたはグローバルRPKIから厳密に検証された更新を完了すると, そのシリアル番号を増加させます。
Session ID (セッションID): 16ビット符号なし整数。キャッシュサーバーが起動すると, キャッシュのインスタンスを識別するセッションIDを生成し, そのキャッシュインスタンスが生成するシリアル番号のシーケンスにバインドします。これにより, ルーターは失敗したセッションを再開でき, 使用しているシリアル番号がキャッシュのシリアル番号と相称であることを知ることができます。プロトコルバージョンネゴシエーション後 (セクション7)のいつでも, ルーターまたはキャッシュがセッションIDの値が相手と異なることを発見した場合, 不一致を検出した側は直ちにコード0 ("Corrupt Data")のError Report PDUでセッションを終了しなければならず, ルーターはそのキャッシュから学習したすべてのデータをフラッシュしなければなりません。
セッションは特定のプロトコルバージョンに固有であることに注意してください。つまり, キャッシュサーバーがこのプロトコルの複数のバージョンをサポートし, 複数のプロトコルバージョンに対して同じセッションID値を使用し, さらに同じセッションIDだが異なるプロトコルバージョン値を持つ2つ以上のセッションに対して同じシリアル番号値を使用している場合, シリアル番号は相称ではありません。シリアル番号が相称であるかどうかをテストする完全なテストには, プロトコルバージョン, セッションID, シリアル番号の比較が必要です。混乱のリスクを減らすために, キャッシュサーバーは複数のプロトコルバージョンで同じセッションIDを使用すべきではありませんが, たとえそうしたとしても, ルーターは異なるプロトコルバージョンフィールドを持つセッションを, たとえ同じセッションIDを持っていても, 別々のセッションとして扱わなければなりません。
キャッシュが誤ってセッションIDを再利用し, ルーターがセッションが変更されたことに気づかない場合 (古いセッションIDと新しいセッションIDが同じ数値を持つ), ルーターはキャッシュの内容について混乱する可能性があります。ルーターが混乱していることを発見するのにかかる時間は, シリアル番号も再利用されるかどうかに依存します。古いセッションと新しいセッションでシリアル番号が十分に異なる場合, キャッシュはルーターのSerial QueryにCache Resetで応答し, 問題が解決されます。しかし, シリアル番号が近い場合, キャッシュはCache Responseで応答する可能性があり, これはルーターをキャッシュと同期させるのに十分でない可能性があります。この場合, ルーターはキャッシュが期待する状態と自身の状態との間に何らかの違いを検出する可能性が高い (ただし確実ではない)です。例えば, Cache Responseがルーターに持っていないレコードを削除するよう指示したり, ルーターがすでに持っているレコードを追加するよう指示したりする可能性があります。この場合, ルーターはエラーを検出し, セッションをリセットします。ルーターが同期を失ったままになる可能性のある1つのケースは, Cache Response内の何もルーターが現在保持しているデータと矛盾しない場合です。
セッションIDに永続ストレージを使用するか, クロックベースのスキームを使用してセッションIDを生成することで, セッションIDの衝突のリスクを回避できるはずです。
セッションIDは擬似ランダム値, 厳密に増加する値 (キャッシュが信頼できるストレージを持つ場合)などである可能性があります。エポック秒のタイムスタンプ値 (POSIX time()関数など)は優れたセッションID値として機能します。
Length (長さ): 32ビット符号なし整数で, その値はPDU全体のバイト数であり, 長さフィールドを含む8バイトのヘッダーを含みます。
Flags (フラグ): フラグフィールドの最下位ビットが1の場合はアナウンスメントを示し, 0の場合は撤回を示します。プレフィックスPDU (IPv4またはIPv6)の場合, このフラグはこのPDUが新しいプレフィックスアナウンスメントの権限をアナウンスしているのか, 以前にアナウンスされた権限を撤回しているのかを示します; 撤回は, まったく同じプレフィックス, 長さ, 最大長, 自律システム番号 (ASN)を持つ以前にアナウンスされたプレフィックスPDUを効果的に削除します。同様に, Router Key PDUの場合, このフラグはこのPDUが新しいルーターキーをアナウンスしているのか, まったく同じAS番号, subjectKeyIdentifier, subjectPublicKeyInfoを持つ以前にアナウンスされたRouter Key PDUを削除しているのかを示します。
フラグフィールドの残りのビットは将来の使用のために予約されています。プロトコルバージョン1では, 送信時にゼロでなければならず, 受信時に無視されなければなりません。
Prefix Length (プレフィックス長): 8ビット符号なし整数で, プレフィックス要素に許可される最短のプレフィックスを示します。
Max Length (最大長): 8ビット符号なし整数で, プレフィックス要素に許可される最長のプレフィックスを示します。これはプレフィックス長要素より小さくすることはできません。
Prefix (プレフィックス): ROAのIPv4またはIPv6プレフィックス。
Autonomous System Number (自律システム番号): 32ビット符号なし整数で, プレフィックスをアナウンスすることが許可されているASN, またはルーターキーに関連付けられているASNを示します。
Subject Key Identifier (サブジェクトキー識別子): [RFC6487]で説明されているルーターキーの20バイトのSubject Key Identifier (SKI)値。
Subject Public Key Info (サブジェクト公開鍵情報): [RFC8208]で説明されているルーターキーのsubjectPublicKeyInfo値。これはsubjectPublicKeyInfo SEQUENCE のASN.1タグと長さ値を含む, subjectPublicKeyInfoの完全なASN.1 DERエンコーディングです。
Refresh Interval (リフレッシュ間隔): 通常のキャッシュポーリング間の間隔。セクション6を参照してください。
Retry Interval (リトライ間隔): キャッシュポーリングの失敗後, キャッシュポーリングを再試行する間隔。セクション6を参照してください。
Expire Interval (有効期限間隔): 成功した後続のキャッシュポーリングがない場合に, キャッシュから取得したデータが有効なままである間隔。セクション6を参照してください。