要約

  • RFC 3261 の 180 Ringing は暫定応答であり、受信ユーザーエージェントが利用者への通知を試みていることを示す。発信側がローカルでリングバックトーンを開始する根拠にもなり得る。
  • 180 は、遠隔端末が実際に音を出したこと、早期メディアが届いたこと、利用者が気づいたこと、通話が受諾されたことを保証しない。RFC 3262 の PRACK は暫定応答の受領を確実にするだけである。
  • 運用記録は、暫定信号の送信元、ブランチ、時刻、後続状態を残し、通知、メディア、最終応答、人の行為を別々に扱う必要がある。

耳に届いた音の発生場所

電話の呼出音は、遠くの出来事をそのまま運んでくるように思える。しかし SIP では、発信側のユーザーエージェントクライアントが 180 を受け、手元でリングバックトーンを生成できる。音はネットワーク越しに相手の部屋から届いたものではなく、信号を解釈した端末の表現かもしれない。

RFC 3261 が述べるのは、招待を受けたユーザーエージェントが利用者への通知を「試みている」という状態だ。画面だけが点灯する場合もあれば、マナーモードで音が消される場合もある。誰もいない机の端末が通知を表示することも、複数の宛先の一つが一時的に反応することもある。プロトコルは通知の試みを観測できても、人の知覚までは観測しない。

180 が属する 1xx という分類も同じ注意を促す。暫定応答は処理が進行中で、結果が確定していないことを表す。INVITE の受諾は最終的な 2xx で示され、失敗なら別の最終応答が到着する。最初の 180 を「応答済み」に置き換えるダッシュボードは、表示を簡略化しているのではなく、未確定という意味を失わせている。

RFC 3261 には Jonathan Rosenberg、Henning Schulzrinne、Gonzalo Camarillo、Alan Johnston、Jon Peterson、Robert Sparks、Mark Handley、Eve Schooler の八人が著者として記されている。Schulzrinne の貢献を論じる際も、集団で作られた標準を一人の発明にしてはならない。その価値は、信号、メディア、ユーザー体験を連携させつつ同一視しない構造にある。

早期メディアには別の経路がある

Gonzalo Camarillo と Schulzrinne による RFC 3960 は、セッション受諾前のメディアと呼出音生成を扱う。ゲートウェイや遠隔端末が早期音声を送る場合がある一方、発信端末が信号に基づいてローカル音を再生する場合もある。どちらも発信者には「何かが聞こえた」と感じられるが、出所は異なる。

ローカル音を優先すると、混雑や待ち行列を説明するインバンドアナウンスを覆い隠す恐れがある。早期メディアだけを待つと、パケットが来ないときに無音になる。フォークされた INVITE では、一つの早期ダイアログが 180 を返し、別のダイアログがメディアを流し、さらに別のダイアログが最終的に受諾されることさえある。RFC 3960 は、この選択を万能な規則ではなくポリシー上のトレードオフとして示す。

証拠を読むには、少なくとも四つの時計が必要だ。暫定応答を受けた時刻、利用可能なメディアが届いた時刻、ローカル端末が通知を提示した時刻、ダイアログの最終結果が決まった時刻である。「人が気づいた時刻」を主張するなら、さらに別の証拠が要る。平常時は時計が近接していても、障害や紛争時には差が決定的になる。

パケットキャプチャが弱いわけではない。それは、特定の SIP 要素が特定時刻にメッセージを受信したことを強く示せる。ただし、遠隔端末の音量、OS の通知抑制、利用者の在席までは見えない。見えない事実を推測で埋めるのではなく、それを制御する面から証拠を取るべきである。

PRACK は暫定応答を受け取ったという確認

暫定応答にも、失われては困るものがある。Jonathan Rosenberg と Schulzrinne が執筆した RFC 3262 は、信頼できる暫定応答に順序情報を持たせ、クライアントが PRACK で受領を通知する仕組みを定めた。

確実になるのは、その暫定メッセージが順序どおり受信されたという点だ。PRACK は最終 2xx に対する ACK ではなく、メディア受領の証明でも、利用者の受話操作でもない。RFC 3262 では、PRACK の到着前に最終応答を送ることさえ認められている。

再送、シーケンス、照合、確認という要素がそろうと、運用画面はイベントを確定済みの節目として扱いたくなる。しかし信頼性が答えるのは「この暫定的な記述は相手に届いたか」であり、最終性が答えるのは「招待はどう終わったか」だ。前者を強化しても、後者を先取りすることはできない。

フォークされた呼出中には所有者がいる

一つの INVITE が複数の連絡先へ分岐すると、各ブランチに別の暫定的な物語が生まれる。一つは 180、別の一つは早期メディア、もう一つは拒否、最後の一つは受諾という展開もある。通話全体に「呼出中」を一つだけ保存すれば、その信号を誰が発したかが消える。

RFC 6228 の 199 応答は、特定の早期ダイアログが終了したことを上流へ知らせる。他の早期ダイアログは継続でき、元の INVITE にはなお最終応答が必要だ。終わったブランチに対応する状態やメディアを選択的に片づけるための信号である。

RFC 6228 の著者は Christer Holmberg で、Schulzrinne ではない。ここでは個人の実績を増やすためではなく、SIP の設計が後に何を必要としたかを見るために参照している。暫定状態には出所があり、後続イベントがある。ブランチを持たない 180 の記録は、重要な文脈を欠く。

それでも 180 は有益だ。ブランチ単位の「通知開始」というイベントなら、ルーティングの進行を測り、最終状態へ進まない端末を見つけ、INVITE から結末までの時間を分析できる。出所、時刻、置換状態を保つ限り、そのイベントは正直である。人の応答証明へ昇格させる必要はない。

肩書と著者名も証拠の一部

Columbia の現行プロフィールは Schulzrinne を Julian Clarence Levi Professor of Mathematical Methods and Computer Science、および電気工学教授と記している。IETF Datatracker の現時点の表示には 90 本の RFC が並ぶ。長い貢献歴を示す事実だが、共同文書の成果を単独の所有物にはしない。

整理すると、RFC 3261 は八人の共同著作、RFC 3262 は Rosenberg と Schulzrinne、RFC 3960 は Camarillo と Schulzrinne による Informational RFC であり Internet Standard ではない。RFC 6228 は Holmberg の文書だ。誰が、どの範囲で、何を述べたかを残す態度は、180 の意味を読み違えない態度と同じである。

出典