7. Protocol Version Negotiation (プロトコルバージョンネゴシエーション)
ルーターは, リセットクエリまたはシリアルクエリのいずれかを発行することで, 各トランスポート接続を開始しなければなりません。このクエリは, ルーターが実装しているこのプロトコルのバージョンをキャッシュに伝えます。
バージョン 1 をサポートするキャッシュがバージョン 0 を指定するルーターからクエリを受信した場合, キャッシュはプロトコルバージョン 0 [RFC6810] にダウングレードするか, エラーコード 4 ("Unsupported Protocol Version") を含むバージョン 1 エラーレポート PDU を送信して接続を終了しなければなりません。
バージョン 1 をサポートするルーターがバージョン 0 のみをサポートするキャッシュにクエリを送信した場合, 次の 2 つのいずれかが発生します:
-
キャッシュは接続を終了する可能性があり, おそらくバージョン 0 エラーレポート PDU を伴います。この場合, ルーターはプロトコルバージョン 0 を使用して接続を再試行してもよいです。
-
キャッシュはバージョン 0 レスポンスで応答する可能性があります。この場合, ルーターはバージョン 0 にダウングレードするか, 接続を終了しなければなりません。
上記のダウングレードされた組み合わせのいずれにおいても, バージョン 1 の新機能は利用できず, すべての PDU のバージョンフィールドは 0 になります。
このネゴシエーション中にいずれかの当事者が認識されないプロトコルバージョン (0 でも 1 でもない) を含む PDU を受信した場合, 既知のバージョンにダウングレードするか, 接続を終了しなければなりません。受信した PDU 自体がエラーレポート PDU でない限り, エラーレポート PDU を伴います。
ルーターは, この初期起動期間中にキャッシュから受信する可能性のあるシリアル通知 PDU を, シリアル通知 PDU のプロトコルバージョンフィールドに関係なく無視しなければなりません。セッション ID とシリアル番号の値は特定のプロトコルバージョンに固有であるため, 通知内の値はルーターにとって有用ではありません。これらの値が意味を持つとしても, 通知を処理することによる唯一の効果は, ルーターがまだ完了していないバージョンネゴシエーションプロセスの一部としてすでに送信したのとまったく同じリセットクエリまたはシリアルクエリをトリガーすることであるため, バージョンネゴシエーションが完了するまで通知を処理しても何も得られません。
キャッシュは, バージョンネゴシエーションが完了する前にシリアル通知 PDU を送信すべきではありません。ただし, ルーターは, プロトコルバージョン 0 を提供するキャッシュとの下位互換性のために, そのような通知を (無視することで) 処理しなければなりません。
キャッシュとルーターが上記のネゴシエーションプロセスを介してプロトコルバージョンに合意すると, そのバージョンはセッションの存続期間中安定します。プロトコルバージョンとセッション ID の間の相互作用については, 第 5.1 節を参照してください。
上記のネゴシエーションが完了した後にいずれかの当事者が異なるプロトコルバージョンの PDU を受信した場合, その当事者はセッションをドロップしなければなりません; 予期しないプロトコルバージョンを含む PDU 自体がエラーレポート PDU でない限り, セッションをドロップする当事者はエラーコード 8 ("Unexpected Protocol Version") のエラーレポートを送信すべきです。