この記事は筆者オンリーのAdvent Calendar 202510日目の記事です。
VoIP(IP電話)を触り始めると、まず出てくるのが SIP と SIPフォン(ソフトフォン) です。
この記事では、ZoiperのようなSIPソフトフォンを例にしつつ、SIPフォンが何をしていて、通話がどう成立するのか を、実装・検証に役立つ観点でまとめます。
SIPフォン(ソフトフォン)とは?
SIPフォンは、SIP(Session Initiation Protocol)を使って通話の開始・終了などの制御を行う端末(アプリ)です。
スマホ/PCアプリとして動くものは特に ソフトフォン と呼ばれます。
例:Zoiper / Linphone / MicroSIP / Bria など
できること:発信、着信、保留、転送、DTMF、録音…など(アプリ次第)
ポイントはこれです:
SIPは「通話の制御(シグナリング)」
音声データ自体は主にRTP(Real-time Transport Protocol)で流れる
SIPで通話が成立するまでの流れ(超ざっくり)
通話は大きく 2つの経路 で動きます。
- シグナリング(SIP)
「誰に電話するか」
「通話を開始していいか」
「どのIP/ポートで音声を送るか」
「どのコーデックで話すか」
を決める通信です。
代表的なSIPメッセージ:
REGISTER:この端末はここに居ます(着信先の登録)
INVITE:通話したいです(発信)
BYE:切ります(終話)
ACK:確定しました(確立)
OPTIONS:生存確認・機能確認など
- メディア(RTP)
実際の音声(パケット)が流れる経路
通常、UDPで流れることが多いです(低遅延優先)
SIPとSDP:音声の「取り決め」はSDPでやる
INVITE などのSIPメッセージには、しばしば SDP(Session Description Protocol) が含まれます。
SDPには例えば以下が入ります:
音声を送る宛先IP/ポート
利用コーデック(G.711 / Opus / G.729など)
メディアの種類(audio/video)
方向(sendrecv / sendonly / recvonly など)
つまり、
SIP:通話開始の合図
SDP:音声の送り方の合意
RTP:実際の音声
という役割分担です。
典型的な構成:SIPサーバ(PBX)とソフトフォン
現実的には、SIPフォン単体で完結するより、真ん中に SIPサーバ(PBX) がいることが多いです。
よくある構成要素:
UA(User Agent):ZoiperなどのSIPフォン
Registrar:REGISTERを受けて「どこに居るか」を管理
Proxy:INVITEなどを中継して呼制御
PBX:内線・外線・IVR・録音などの機能を持つ(例:Asterisk / FreeSWITCH)
SIPアカウント設定でよく出てくる項目
Zoiper等でアカウントを作るときに出る典型項目です。
SIP server / Domain:例 sip.example.com
Username / Auth user:認証に使うID
Password:認証パスワード
Port:UDP 5060(典型)、TLSは5061など
Transport:UDP / TCP / TLS
Outbound proxy:指定が必要な環境もある
※サービスやPBXの設定によって表記が微妙に違いますが、「どこにREGISTER/INVITEを投げるか」「何で認証するか」が本質です。
コーデックの話(音が出ない原因にもなる)
SIP通話で「つながるけど無音」「片通話」になるとき、コーデック不一致 が原因のことがあります。
よくあるコーデック例:
G.711 (PCMU/PCMA):昔からの定番。軽いが帯域はそこそこ使う
Opus:高音質・可変・低遅延寄り(使える環境なら強い)
G.729:帯域は小さいがライセンス事情が絡むことも
検証ではまず G.711を許可 しておくと切り分けがラクなことが多いです。
NAT越え(ここが一番ハマりやすい)
ソフトフォンが家庭/社内LANなどNAT配下にいると、SIP/RTPが外から戻って来られずハマります。
代表的な対策・キーワード:
STUN:自分のグローバル側アドレス/ポートを知る
TURN:どうしてもダメなとき中継する
ICE:STUN/TURNを組み合わせて経路選択する仕組み
SIP ALG:ルータの「親切機能」だが、壊すことも多い(無効化推奨のケース多い)
症状例:
発信はできるが着信できない
つながるが片方の音声だけ聞こえない(片通話)
セキュリティ:SIPも平文だと覗ける
検証用途ではUDP 5060で平文SIPを使うこともありますが、本番や外部接続では注意。
SIP over TLS:シグナリング暗号化
SRTP:音声(RTP)の暗号化
認証情報の保護、盗聴対策、なりすまし対策につながります
デバッグの基本(困ったらここを見る)
ソフトフォンのログ:SIPメッセージの送受信が見えることが多い
tcpdump / Wireshark:
sip フィルタでINVITE/REGISTERを見る
rtp で音声が飛んでいるか見る
切り分け順(おすすめ)
REGISTERできているか
INVITE→200 OK→ACK まで行くか(通話確立)
RTPが双方向に流れているか
コーデック一致しているか
NAT / ファイアウォール疑う
まとめ:SIPフォン理解の最短ルート
SIPは「通話の開始/終了などの制御」
音声はRTPで流れる
SDPで「どのIP/ポートに」「どのコーデックで」を合意
実運用はPBX(Asterisk等)を挟むことが多い
ハマりどころはNATとコーデック