10. Keepalives (キープアライブ)
すべてのエンドポイントは、各メディアセッションに対してキープアライブを送信しなければなりません (MUST)。これらのキープアライブは、メディアセッションの NAT バインディングを維持する目的を果たします。これらのキープアライブは、メディアストリームが現在 inactive、sendonly、recvonly、または sendrecv であるかどうかに関係なく、また帯域幅属性の存在や値に関係なく、送信されなければなりません (MUST)。これらのキープアライブは、ICE がセッションにまったく利用されていない場合でも送信されなければなりません (MUST)。キープアライブは、ピアによってサポートされている形式を使用して送信されるべきです (SHOULD)。ICE エンドポイントは UDP ストリームの STUN ベースのキープアライブを許可するため、エージェントが完全な ICE 実装であり、ICE(Lite または完全)をサポートするピアと通信している場合、STUN キープアライブを使用しなければなりません (MUST)。エージェントは、各メディアセッションの a=candidate 属性の存在によって、ピアが ICE をサポートしていると判断できます。ピアが ICE をサポートしていない場合、キープアライブのパケット形式の選択はローカル実装の問題です。実際のメディアコンテンツがない場合にパケットを簡単に送信できる形式が推奨されます (RECOMMENDED)。この目標を容易に達成する形式の例は、RTP No-Op [NO-OP-RTP]、および双方がサポートしている場合の RTP コンフォートノイズ [RFC3389] です。ピアがキープアライブに特に適した形式をサポートしていない場合、エージェントは、誤ったバージョン番号を持つ RTP パケット、またはピアによって破棄されるその他の形式のエラーを送信すべきです (SHOULD)。
メディアコンポーネントに ICE が使用している候補ペアで Tr 秒間パケットが送信されなかった場合(パケットには、コンポーネント(RTP または RTCP)に定義されたものと以前のキープアライブが含まれます)、エージェントはそのペアでキープアライブを生成しなければなりません (MUST)。Tr は構成可能であるべきであり (SHOULD)、デフォルトは 15 秒であるべきです (SHOULD)。Tr は 15 秒未満に構成してはなりません (MUST NOT)。あるいは、エージェントが介在する NAT のバインディング寿命を動的に発見する方法を持っている場合、その値を使用して Tr を決定できます。より制御されたネットワーク環境で ICE を展開する管理者は、Tr を環境で可能な限り長い期間に設定すべきです (SHOULD)。
STUN がキープアライブに使用されている場合、STUN Binding Indication が使用されます [RFC5389]。Indication は認証メカニズムを利用してはなりません (MUST NOT)。多重化解除を支援するために FINGERPRINT 属性を含めるべきですが (SHOULD)、他の属性を含めるべきではありません (SHOULD NOT)。これは、NAT バインディングを維持するためだけに使用されます。Binding Indication は、メディアに使用されているのと同じローカル候補とリモート候補を使用して送信されます。Binding Indication はキープアライブに使用されますが、エージェントは接続チェックも受信する準備ができていなければなりません (MUST)。接続チェックが受信された場合、[RFC5389] で説明されているように応答が生成されますが、それ以外の場合、ICE 処理への影響はありません。
エージェントは、ICE がメディアで使用する候補を選択するか、メディアのフローが開始されるかのいずれか早い方の時点で、キープアライブ処理を開始しなければなりません (MUST)。セッションが終了するか、メディアストリームが削除されると、キープアライブは終了します。