要約

  • RFC 3015のContextは、一台のMedia Gateway内でTerminationsを関連付け、その媒体トポロジーを表す局所オブジェクトだった。世界共通の通話IDでも、会話全体の記録でもない。
  • Transactionの応答、監査、at-most-onceの再実行防止は、それぞれ限定された制御事実を示す。外部経路の配送、相手側の再生、人の理解には別の観測が必要だった。

MGCがAddを送り、MGが回線側のTerminationとRTP側のTerminationを同じContextに置き、成功を返したとする。その瞬間、ゲートウェイ内部の関連は実在する。しかし、相手のスピーカーから音が出たかどうかは、その成功応答には書かれていない。

2000年11月のRFC 3015は、Megaco Protocol Version 1.0を標準化過程の文書として定め、ITU-T H.248と共通の本文を持った。対象は、物理的に分解されたマルチメディアゲートウェイのMGとMGCの間である。制御の知能と媒体処理を分けることで異なる設備を共通に扱える一方、意図・実行・配送の観測主体も分かれた。

ContextIDの権威はMGの内側にあった

接続モデルの基本は二つである。Terminationは一つ以上の媒体または制御ストリームを出力・入力する。Contextは複数のTerminationを関連付け、誰が誰を聞く、または見るかを表し、三者以上なら混合や交換の条件も持つ。

ContextIDはMGが割り当て、そのMGの範囲で一意だった。このスコープは重要である。値だけを見て、ネットワーク全体の通話、加入者、課金イベント、あるいは人間の会話を一意に識別することはできない。一つのサービスが複数のゲートウェイを通ることも、一つのContextが待機呼や会議の局面だけを表すこともある。

寿命も均一ではない。物理回線を表すTerminationは設備が用意されている限り残り得る。RTPフローのような一時的Terminationは利用期間だけ作られる。ほかのTerminationと関連していない物理Terminationはnull Contextに置かれる。AddはContextを暗黙に作り、Moveは所属を移し、Subtractは関連から外す。最後のTerminationが出るとContext自体も暗黙に消える。

消えるから価値がないのではない。これは実行装置の現在状態として価値がある。ただし、後日の通話履歴として必要なら、命令、時刻、統計、外部媒体の証拠を別に保持しなければならない。

トポロジーは遠端の耳ではなかった

RFC 3015はContext内のtopologyとTerminationのmodeを分けた。topologyはContext内のTermination相互の媒体関係を示し、modeはゲートウェイの入口・出口での流れを示す。

ここで「T1がT2を聞く」という表現は、MG内に設定された関係である。遠端の人が聞こえたと返した証言ではない。MGが正しくRTPを出しても、その後にパケットが失われることがある。相手が受け取っても、コーデック不一致、ミュート、誤った出力先、再生処理の停止によって音にならないことがある。

SDPはセッションの記述を与え、RTPはシーケンス、時刻、受信報告を与え得る。それでも、記述、構成、送信、到着、デコード、再生、理解は別々である。一つの層で正しいことが、次の層の領収書を自動的に発行するわけではない。

Transaction内の順序と、Transaction間の責任

MegacoではCommandをActionに、ActionをTransactionにまとめた。一つのActionは通常一つのContextを対象とする。同じTransaction内のCommandsは順番に実行され、TransactionReplyは成功したCommandの結果と、失敗が起きた箇所のエラーを返す。

異なるTransactionsの間に万能な順序はなかった。整合した運用を望むMGCが規律を持たなければならない。同じTerminationに対する未完了のAdd、Modify、Moveは通常一つまでとし、複数なら同じTransactionに置く。Subtractは途中に入ることができ、ワイルドカード削除が保留中の追加より先に効けば、MGCは残ったTerminationを個別に整理する必要がある。

したがって、MGは局所実行の責任者であり、MGCは意図の順序の責任者である。成功応答は、そのTransactionについてMGが返した結果を示す。別の制御プロセスが同じ呼状態を持つことや、次の命令が関連を維持することは示さない。

TransactionPendingは、処理が活動中だが未完了だという通知である。再送タイマーを更新するための重要な情報だが、最終成功、外部資源の予約、媒体の到達を約束しない。

Auditは時計を止めなかった

AuditValueは現在のproperty、event、signal、statisticsを返す。AuditCapabilitiesは取り得る値を返す。可能性と現在状態は違い、現在状態とサービス結果も違う。

ワイルドカードを使うと、複数のTerminationの値をunionとして返せた。通信量は減るが、どの値がどのTerminationに属するかは失われ得る。集合に能力が含まれていても、全メンバーがそれを現在使っているとは言えない。

さらに、RFCはAuditValueとAuditCapabilitiesがsequencingの対象外だとした。Modifyが進行中のとき、Auditは変更前または変更後のどちらかの真実を観測し得る。回答が正確でも、制御側が想定した順序と一致するとは限らない。「current」という語は、全Transactionと線形化された瞬間を意味しない。

SubtractはContext参加中に蓄積された統計を返し得る。関連が消える前の局所証拠として重要だが、相手側が同じ数のパケットを受けたこと、音声が聞き取れたこと、会話が成立したことまでは示さない。

at-most-onceは保持された記憶に依存した

UDPでは要求も応答も失われ得る。多くのCommandは冪等でなく、Addを二度実行すればMGの状態が予測不能になり得る。そのためRFC 3015はat-most-once機能を求めた。

両端は最近送った応答と実行中のTransactionsを記憶し、送信者のスコープにあるTransactionIDを比較する。完了済みの重複なら、再実行せず保存済み応答を返す。実行中の重複なら再実行を抑え、必要に応じてTransactionPendingを返す。応答確認を受ければ応答本体を解放できるが、遅延した重複を捨てるため識別子はLONG-TIMERの間残す。

この保証は記憶、IDの一意性、タイマー、稼働epochに依存する。期限切れや再起動の後、以前の履歴は同じ比較能力を持たない。完全に動作しても意味は「この比較窓内で同じゲートウェイTransactionを再実行していない」であり、「通話がちょうど一度成立した」ではない。

TCPを使っても、プロセス障害や接続の切替点ではTransactionの要求・応答の文脈が失われる。このためアプリケーション層の処理がなお推奨された。順序あるバイト列は、消えたMG内部状態を復元しない。

安全な制御路は結果の証明書ではない

不正なMegaco命令は無許可の呼を作ったり正当な呼を妨害したりできる。RFCはIP環境でプロトコル接続を保護し、IPsecによる送信元認証、完全性、リプレイ対策、必要な機密性を定めた。これはMGCとMGの権限関係を守る。相手端末の再生結果を認証するものではない。

RFC 3525は2003年にRFC 3015を置き換えた。RFC 3435はMGCPのInformationalな系列を続け、標準に基づく方向としてMegaco/H.248を示した。これは標準史の証拠であり、特定製品の実装、通信事業者の導入、相互接続試験、成功率の証拠ではない。

RFC 3015の成果は、通話全体を一語に押し込むことではなかった。MGが作成、変更、移動、監査、削除できる小さな実行対象を共通化したことである。Contextが接続されたという事実は強い。ただし、その事実が通話全体の代理人になることはない。

情報源