SIP(Session Initiation Protocol)は、インターネット上で電話をつなぐためのプロトコルです。あるデバイスが別のデバイスに電話をかけたいとき、SIPがその交渉を運びます。誰がかけているか、相手にどこで届くか、双方がどの音声コーデックに対応しているか、誰がいつ切るか。音声そのものがSIPを通ることはありません。両側が合意すると、音声は別のストリームとして、ほぼ必ずRTPで流れます。
この分離こそ、このガイドから持ち帰るべき1点です。SIPは通話についての会話であり、通話そのものではありません。メソッド、レスポンスコード、ポート番号、その他すべてはそこから導かれます。このガイドでは、SIP通話がメッセージごとにどう動くか、用語の意味、そして電話に出る相手がAI音声エージェントになったときにSIPが顔を出す場面を説明します。
SIPとは何か、何でないか
SIPはIETFが定義するアプリケーション層のシグナリングプロトコルです。1999年にRFC 2543として初めて登場し、2002年にRFC 3261として改訂されました。RFC 3261は今も、あらゆるSIP電話、PBX、通信事業者が実装する標準です。設計者はHTTPのリクエスト・レスポンスモデルとテキスト構文を借りたため、SIPメッセージは特別なツールなしにパケットキャプチャの中で読めます。
SIPでないものを3つ挙げます。
- 音声ではありません。 SIPはセッションをネゴシエートしたら脇に退きます。音声とビデオは、後述するRTPパケットとして運ばれます。
- サービスではありません。 「SIP」そのものを売る人はいません。通信事業者が売っているのはSIPトランキングです。SIPプロトコルを使ってあなたの電話システムを公衆電話網につなぐサービスです。
- 通話をシグナルする唯一の方法ではありません。 H.323はSIPより古く、WebRTCはブラウザ内の通話を扱い、閉じたアプリの中では独自プロトコルが動いています。SIPがビジネス電話の世界を制したのは、オープンでテキストベースで、どのベンダーでも実装できるほどシンプルだったからです。
SIP通話の仕組み
SIP通話は、テキストのリクエストと番号付きレスポンスの短いやり取りです。典型的な着信通話を、呼び出しから切断まで見ていきます。
- INVITE。 発信側が着信側のアドレスにINVITEを送ります。ボディにはSDP(Session Description Protocol)ブロックが載り、発信側のIPアドレス、音声を受け取りたいポート、対応するコーデックが列挙されています。
- 100 Trying。 経路上のプロキシが受信を確認するので、発信側は再送をやめます。
- 180 Ringing。 着信側のデバイスがユーザーを呼び出しています。発信側にリングバックトーンが聞こえるのはこのタイミングです。
- 200 OK。 着信側が応答します。このレスポンスには着信側自身のSDPブロックが載り、コーデックのネゴシエーションが完了します。
- ACK。 発信側が最終レスポンスを確認します。これでセッションが確立し、双方向にRTP音声が流れ始めます。
- BYE。 切る側がBYEを送ります。もう一方が200 OKを返し、セッションは終了します。
通話中には、どちら側もre-INVITEと呼ばれる新しいINVITEを送ってセッションを変更できます。保留にする、ビデオを追加する、コーデックを切り替える、といった変更です。REFERリクエストは相手に別の宛先へかけ直すよう求めるもので、転送はこの仕組みで動きます。
実際のINVITEがネットワーク上でどう見えるかを、少し省略して示します。
INVITE sip:+14155550132@sip.example.com SIP/2.0
Via: SIP/2.0/TLS client.example.com:5061;branch=z9hG4bK74bf9
Max-Forwards: 70
From: "Alice" <sip:alice@example.com>;tag=9fxced76sl
To: <sip:+14155550132@sip.example.com>
Call-ID: 3848276298220188511@client.example.com
CSeq: 1 INVITE
Contact: <sip:alice@client.example.com;transport=tls>
Content-Type: application/sdp
Content-Length: 213
v=0
o=alice 2890844526 2890844526 IN IP4 client.example.com
s=-
c=IN IP4 client.example.com
t=0 0
m=audio 40000 RTP/AVP 0 8 101
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
SDPオファーの最後の3行が、テーブルに並んだコーデックです。ペイロード0はG.711 mu-law、ペイロード8はG.711 A-law、ペイロード101はtelephone-eventで、音声ストリームの中でDTMFのキー入力を帯域外で送る方式です。公衆電話網の通話は通常、2つのG.711バリアントのどちらかに落ち着きます。電話の音声がああ聞こえるのはそのためです。
知っておきたいSIPメソッド
SIPのリクエストにはメソッドという名前が付いています。キャプチャで実際に出会うのは次のものです。
| メソッド | 動作 |
|---|---|
| INVITE | セッションを開始する、または通話中に変更する(re-INVITE) |
| ACK | INVITEへの最終応答を確認する |
| BYE | セッションを終了する |
| CANCEL | まだ応答されていないINVITEを取りやめる |
| REGISTER | レジストラーに「このアドレスで受け付けている」と伝える |
| OPTIONS | 呼ばずに、デバイスが何ができるかを尋ねる |
| REFER | 相手に第三者へかけるよう求める。転送の基礎 |
| INFO | 通話中の情報を運ぶ。DTMFの数字が流れる経路の1つ |
すべてのリクエストには、3桁のコードによるレスポンスが返ります。先頭の桁で分類されます。
| クラス | 意味 | 例 |
|---|---|---|
| 1xx | 暫定応答 | 100 Trying, 180 Ringing, 183 Session Progress |
| 2xx | 成功 | 200 OK, 202 Accepted |
| 3xx | リダイレクト | 301 Moved Permanently, 302 Moved Temporarily |
| 4xx | クライアントエラー | 401 Unauthorized, 403 Forbidden, 404 Not Found, 486 Busy Here |
| 5xx | サーバーエラー | 500 Server Internal Error, 503 Service Unavailable |
| 6xx | グローバルな失敗 | 603 Decline, 604 Does Not Exist Anywhere |
このうち2つは、通話設定時に実際に役立ちます。401や407は失敗ではなく認証チャレンジで、送信側はダイジェスト認証情報を付けて再送することが期待されています。488 Not Acceptable Hereは、両側に共通のコーデックがないことを意味します。音声をどうエンコードするか合意できていないことを、通話が丁寧に伝える言い方です。
アドレス、登録、そして間に立つ機器
SIPアドレスはメールアドレスに似ています。sip:alice@example.comのように書き、sip:alice@example.com:5061;transport=tlsのようにポートやトランスポートを付けることもできます。電話番号は通信事業者のドメインを付けるとSIP URIになります。だからsip:+14155550132@sip.example.comは完全な発信可能なアドレスです。
デバイスは移動し、NATの内側にいることがあるため、SIP電話は自分の居場所をネットワークに知らせます。レジストラーにREGISTERを送り、「alice@example.comは現在このIPにいる」と記録させます。Alice宛てのINVITEが届くと、プロキシサーバーがその記録を引き、Aliceが実際にいる場所へリクエストを転送します。実際のデプロイの前面にはたいてい、セッションボーダーコントローラー(SBC)がいます。SIPトラフィックの用心棒で、シグナリングを終端し、内部ネットワークを隠し、セキュリティポリシーを適用し、ベンダーごとのSIPスタックの奇妙な振る舞いを正規化します。
SIP・RTP・SDPの違い
3つのプロトコルが、すべてのSIP通話の仕事を分担しています。
| プロトコル | 役割 |
|---|---|
| SIP | シグナリング:着信相手を見つけ、セッションをネゴシエートし、終了する |
| SDP | 記述:SIPメッセージの中に載り、コーデック、IP、ポートを列挙するペイロード |
| RTP | メディア:実際の音声・ビデオを運び、シーケンス番号とタイムスタンプが刻まれる |
これが、通話は完璧に鳴るのに無音が届くことがある理由です。SIPの半分は動いたので、両方の電話は通話の存在に合意していますが、RTPの半分が壊れています。原因はたいてい、シグナリングは通すがメディアを落とすファイアウォールやNATです。無音の通話をデバッグするときは、シグナリングではなくメディア経路を見てください。同じ分離が、ジッターをRTPの問題にしています。RFC 3550で定義された、すべてのRTPパケットに刻まれるシーケンス番号とタイムスタンプこそ、受信側がジッターを計算するために測るものだからです。
SIP・VoIP・SIPトランキングの違い
この3つの言葉は入れ替えて使われがちですが、同じものではありません。
| 用語 | 内容 |
|---|---|
| VoIP | 包括的な概念:IPネットワークで音声を運ぶこと |
| SIP | VoIP通話の設定に使われる1つのシグナリングプロトコル |
| SIPトランキング | SIPを使って電話システムをPSTNにつなぐ通信事業者のサービス |
VoIPがインターネットで電話をかけるという概念だとすれば、SIPは両端が話す文法で、SIPトランクはあなたの通話を公衆電話網に載せる契約です。サービス側の話(事業者、チャネル、設定)はSIPトランキングガイドで説明しています。
トランスポート、ポート、暗号化
SIPのシグナリングは、5060番ポートでUDPまたはTCP上を、5061番ポートでTLS上を流れます。UDPは伝統的なデフォルトで、ヘッドオブラインブロッキングを避けられますが、大きなメッセージはフラグメント化するため、ある程度のサイズがあるものにはTCPが一般的です。TLSはシグナリングを暗号化し、相手側を認証します。本番環境で通信事業者が期待するのはこちらです。
素のSIPは何も暗号化しません。経路上の誰でもシグナリングを読め、メディアは暗号化されていないRTPに乗ります。標準的な対策は、シグナリングにTLSを、メディアにRFC 3711で定義されるSRTPを使うことです。両端が合意する必要があります。片側だけ暗号化を有効にすると、つながるのに音声が流れない通話が確実にできあがります。
SIPの歴史のどの年代にも生き残ってきた警告が1つあります。開放されたSIPエンドポイントをさらさないことです。5060番ポートが現れると数分以内に、タダで電話をかけられるトランクを探すスキャナーがインターネットを掃引します。ダイジェスト認証情報で送信者を認証するか、通信事業者のシグナリングIPを許可リストに入れるか、その両方をしてください。
SIPと音声エージェントが出会う場所
AI音声エージェントを電話網に載せるなら、SIPは通話の両端で働くプロトコルです。通信事業者は着信をSIPのINVITEとしてエージェント基盤に届け、基盤は発信と転送を同じ方法で送り返します。そのスタックを自分で運用するようになった瞬間、いくつかのプロトコルの細部は雑学ではなくなります。
- 転送はREFERです。 エージェントが発信者を人に引き継ぐとき、基盤はSIP REFERを送り、通信事業者に新しい宛先を鳴らすよう求めます。素のREFERはコールド転送です。受け取る人が先に状況を聞けるウォーム転送にするかは、REFERを送る前のエージェントの仕事です。
- キー入力には3つの運び方があります。 DTMFの数字は、帯域内で音声として、帯域外でRFC 4733のtelephone-eventとして(上のINVITEのペイロード101)、またはSIP INFOメッセージの中で流れます。電話が送る方式とエージェントが待つ方式の不一致が、「1を押してください」のメニューが静かに数字を飲み込む原因です。
- メディアは8 kHzです。 電話の通話はG.711で合意するため、エージェントの音声認識には好むと好まざるとにかかわらず狭帯域音声が届きます。他の何かを調整する前に、実際の電話音声でテストしてください。コーデックが何をカットするかはG.711ガイドで説明しています。
- ブラウザの通話は別世界です。 WebRTCには独自の、シグナリングに依存しないモデル、必須の暗号化、適応型ジッターバッファがあります。電話網ではなくブラウザに住む音声エージェント向けの違いは、WebRTCとWebSocketのガイドで整理しています。
Cartesiaでは、Managed Agentsはあなた自身のSIPトランクからの通話をTCPまたはTLSで受け付け、SRTPメディア暗号化はdisabled、allowed、requiredから設定でき、着信はダイジェスト認証情報またはIP許可リストで認証します。転送は電話番号またはSIP URIへのSIP REFERとして送出されます。通信事業者をCartesiaのSIPエンドポイントに向ける手順はSIPトランキングのインテグレーション(英語)で、APIフィールドや失敗の一覧表を含む設定の全体像はSIPトランキングガイドで説明しています。