#このページで確認できること

実装上の制約: 本サイトにシグナリングサーバー・TURNサーバーは未設置です。掲載しているのはブラウザ単体+公開STUNサーバーで試せる範囲と、既存のWebRTCサービス(ビデオ会議等)を観測する手順です。

#構成要素

要素役割仕様
シグナリングSDP と ICE candidate の交換。方式は仕様外で、通常 WebSocket や HTTPS で実装される
SDPコーデック・トランスポート・暗号パラメータの記述 (offer / answer モデル)RFC 8866 / 3264
ICE候補アドレスを列挙し、実際に通る経路を探索する枠組みRFC 8445
STUNWebRTCのBinding利用では、NATの外側から見た自分のIP:portを取得する(UDP 3478ほか)。STUNの用途全体はこれに限らないRFC 8489
TURN直接経路が成立しない場合などに使う中継サーバー。標準ポートはUDP/TCP 3478、TLS/DTLS 5349。到達性を高める配備ではTLS 443も使われるRFC 8656
DTLSメディア鍵の交換とデータチャネルの保護。WebRTCのDTLS要件とDTLS-SRTPプロファイルは、DTLS 1.3そのものとは別の仕様RFC 8827 / RFC 5764
DTLS 1.3: RFC 9147
SRTP音声・映像の暗号化転送RFC 3711
SCTPデータチャネル (DTLS 上で動く)RFC 8831

#接続確立の流れ

WebRTC 接続確立 — シグナリングからメディアまで
participants: Peer A, Signaling, Peer B
Peer A -> Signaling: SDP offer (WebSocket 等)
Signaling -> Peer B: SDP offer を転送
Peer B -> Signaling: SDP answer
Signaling -> Peer A: SDP answer を転送
note: ICE candidate も同じ経路で随時交換 (trickle ICE)
Peer A <-> Peer B: STUN connectivity checks (候補ペアの疎通確認)
note: 通る候補ペアが決まる — 以降はP2P (またはTURN中継)
Peer A <-> Peer B: DTLS handshake (鍵交換)
Peer A <-> Peer B: SRTP media / SCTP data channel

#検証 — ブラウザ単体で試す

DevTools Console — 自分の ICE candidate を見る
const pc = new RTCPeerConnection({
  iceServers: [{ urls: "stun:stun.l.google.com:19302" }]
});
pc.createDataChannel("probe");
pc.onicecandidate = (e) => e.candidate && console.log(e.candidate.candidate);
pc.createOffer().then((o) => pc.setLocalDescription(o));
expected (console 出力の例)
candidate:842163049 1 udp 1677729535 203.0.113.55 54321 typ srflx raddr 0.0.0.0 rport 0 candidate:1234567890 1 udp 2122260223 192.168.1.20 56789 typ host

typ srflx の行に出るIPが「STUNサーバーから見た自分のアドレス」です。VPNやネットワーク環境で値がどう変わるかを比較すると、経路の切り分けに使えます。srflx が出ない場合はUDP(STUN)遮断の可能性がありますが、NATがなくhost候補と冗長になった場合、STUN設定・名前解決・ブラウザポリシーなど別の理由もあり得ます。また、現在のブラウザはプライバシー保護のためhost候補のローカルIPをmDNS名で表示することがあります。STUNパケットとICEエラーを併せて確認してください。

実サービスの観測
# Chrome: 通話中に別タブで開く
chrome://webrtc-internals
# Firefox の場合
about:webrtc

#観測ポイント

DevToolsWS タブでシグナリング(SDP / candidate の JSON)。chrome://webrtc-internals で選択された candidate pair、dtlsState、ビットレート・パケットロスのグラフ。
Proxy従来型の明示HTTPプロキシはUDPをトンネルしないが、プロキシ設定だけでブラウザの直接UDP送信が必ず止まるわけではない。ファイアウォールや端末ポリシーでUDPも遮断される環境では、TURN over TCP/TLS(しばしば443)へのフォールバック可否と品質を確認する。選択されたcandidate pairがrelayならTURN中継経由。
tcpdump / Wiresharkフィルタ: stun(connectivity check の Binding Request/Response)、dtls(鍵交換)。メディアは udp の大量の小パケット — Decode As で RTP と解釈させればヘッダー(SSRC等)は読める。
TLS inspectionシグナリング(WebSocket/HTTPS)は復号対象になり得るが、SRTPは通常のTLSインスペクション装置では復号できない。UDP遮断環境ではTURN/TLSの経路がインスペクション設定と競合し、接続が失敗する場合がある。必要に応じてベンダー要件に沿った復号除外を検討する。
ネットワーク設計主要なWebRTC SaaSは、必要なUDPポート範囲や宛先を公開していることが多い。ファイアウォールで直接UDPを許可するか、TURN/TCP等へフォールバックした場合の品質を受け入れるかの判断材料として観測する。

#関連

鍵交換の仕組みは DTLS、メディア転送の中身は RTP / RTCP / SRTP を参照。シグナリングによく使われる WebSocket も合わせて読むと全体がつながります。