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

2.1. 再送タイマーの使用

2.1. 再送タイマーの使用​

IKE のすべてのメッセージは対をなして存在します: 要求と応答です。IKE SA のセットアップは通常, 2 つの交換から構成されます。IKE SA が確立されると, セキュリティアソシエーションのどちらの端点もいつでも要求を開始でき, 任意の時点で多数の要求と応答が"進行中 (in flight)"である可能性があります。しかし, 各メッセージは要求または応答のいずれかとしてラベル付けされ, 各交換において, セキュリティアソシエーションの一方の端点がイニシエータであり, もう一方がレスポンダです。

IKE メッセージの各ペアについて, イニシエータはタイムアウトが発生した場合の再送の責任を負います。レスポンダは, 要求の再送を受信しない限り, 応答を再送してはなりません (MUST NOT)。その場合, レスポンダは, 応答の再送を引き起こすという点を除いて, 再送された要求を無視しなければなりません (MUST)。イニシエータは, 対応する応答を受信するまで各要求を覚えておかなければなりません (MUST)。レスポンダは, シーケンス番号が応答内のシーケンス番号にそのウィンドウサイズを加えた値以上である要求を受信するまで, 各応答を覚えておかなければなりません (MUST) (セクション 2.3 を参照)。メモリを節約できるようにするため, レスポンダは数分のタイムアウト後に応答を忘れることが許可されています。レスポンダが, すでに応答を忘れてしまった要求の再送を受信した場合, その要求を無視しなければなりません (MUST) (たとえば, 新しい応答の構築を試みてはなりません)。

IKE は信頼性のあるプロトコルです: イニシエータは, 対応する応答を受信するか, または IKE SA が失敗したとみなすまで, 要求を再送しなければなりません (MUST)。後者の場合, イニシエータは IKE SA に関連付けられたすべての状態と, その IKE SA を使用してネゴシエートされたすべての Child SA を破棄します。イニシエータからの再送は, 元の要求とビット単位で同一でなければなりません (MUST)。つまり, IKE ヘッダー以降 (IKE SA イニシエータの SPI 以降) のすべてがビット単位で同一でなければなりません (MUST)。その前の項目 (IP ヘッダーや UDP ヘッダーなど) は同一である必要はありません。

IKE_SA_INIT 要求の再送には, 特別な処理が必要です。レスポンダは IKE_SA_INIT 要求を受信すると, そのパケットが既存の"ハーフオープン (half-open)"の IKE SA に属する再送であるか (その場合, レスポンダは同じ応答を再送します), 新しい要求であるか (その場合, レスポンダは新しい IKE SA を作成して新しい応答を送信します), または IKE_AUTH 要求がすでに受信されている既存の IKE SA に属するか (その場合, レスポンダはそれを無視します) を判断しなければなりません (MUST)。

これらの 3 つのケースを区別するために, イニシエータの SPI および/または IP アドレスを使用するだけでは不十分です。なぜなら, 単一の NAT の背後にある 2 つの異なるピアが同じイニシエータ SPI を選択する可能性があるからです。代わりに, 堅牢なレスポンダは, パケット全体, そのハッシュ, または Ni ペイロードを使用して IKE SA のルックアップを行います。

一方向メッセージの再送ポリシーは, 通常のメッセージのポリシーとはやや異なります。確認応答が送信されることは決してないため, 一方向メッセージを理由なく再送する理由はありません。これらのメッセージはすべてエラーであることを考えると, それらを"問題のある"パケットごとに一度だけ送信し, さらなる問題のあるパケットを受信した場合にのみ再送するのが理にかなっています。それでも, そのようなエラーメッセージの再送を制限することも理にかなっています。