WebRTCとSTUN・TURN・ICEの仕組み完全ガイド

別々の家庭用ルーターの背後にいる二つのブラウザを直接つなげるのは見た目以上に難しい。WebRTC・STUN・TURN・ICEは、それを実現するための仕組みだ。

WebRTCはプラグインなしでブラウザ同士をP2P接続する規格

Web Real-Time Communicationは、拡張機能や別アプリのインストールなしに、二つの端末間で直接音声・映像・データ通信を可能にするブラウザ標準規格で、多くのブラウザ内ビデオ通話を支えている。

家庭用ルーターとNATが直接接続を妨げる

ほとんどの端末はNAT(ネットワークアドレス変換)を行うルーターの背後にあり、外部からは本当のネットワークアドレスが見えない状態になっている。そのため、別々の家庭内ネットワークにある二つの端末は、このアドレスの問題を解決しない限り単純には直接つながれない。

STUNは自分の公開アドレスを調べる

STUN(Session Traversal Utilities for NAT)サーバーは、端末に対して外部から見た自分のIPアドレスとポート番号を教える役割を持ち、通話相手にどこへ接続すればよいかを伝えるために必要な情報になる。

TURNは直接接続が不可能なときに通信を中継する

NATやファイアウォールの制限が厳しすぎて直接のP2P接続ができない場合、TURN(Traversal Using Relays around NAT)サーバーが間に入って双方の通信を中継する。直接接続に比べて遅延が増えるのが代償になる。

ICEはあらゆる経路候補を集めてテストし最適な経路を選ぶ

ICE(Interactive Connectivity Establishment)は、STUNやTURNなどを通じて得られる候補経路をすべて集めてテストし、実際に機能する最適な経路を選ぶ。直接経路がどれも成功しない場合にのみTURN中継にフォールバックする。

シグナリングはWebRTC自体が定めていない別工程

STUN・TURN・ICEが機能する前に、両者はまず接続情報を交換する初期手段(シグナリング)を必要とする。WebRTCはこの部分をあえて規定しておらず、多くの場合、通常のWebSocketやサーバー接続を使ってアプリケーション側が独自に実装する。

直接ビデオ通話がそれほど単純ではない理由

それぞれ別の家庭内ネットワークにいて、それぞれNATを行うルーターの背後にいる二人は、互いのローカルIPアドレスをそのまま指定して接続することはできない。そのアドレスは自宅のネットワークの外では意味を持たないからだ。STUN・TURN・ICEという仕組みは、このアドレスと到達可能性の問題を解決し、WebRTCが可能な限り直接接続を試みられるようにするために存在している。

なぜ多くの通話がTURN中継より直接接続を優先するのか

STUNで見つかりICEによって確認された直接のP2P接続は、遅延が少なく、第三者の中継サーバーが常に利用可能で高速であることに依存しない。TURNは、企業ネットワークやモバイル通信網のような制限の厳しい環境で直接経路が本当に確立できない場合のためだけに存在するフォールバック手段だ。

よくある質問

なぜビデオ通話が急にTURNサーバーを必要とすることがある?

両側のネットワークが厳格なファイアウォールやNAT設定で直接のP2P接続をブロックしている場合、ICEは機能する直接経路を見つけられず、代わりにすべての通信をTURNサーバー経由で中継する。これによって目に見える遅延が発生することがある。

WebRTCは常に完全なピアツーピア通信になる?

そうとは限らない。実際にP2Pになるのは直接経路が見つかった場合のみ。3人以上のグループ通話や、TURN中継にフォールバックした通話は、WebRTC規格を使っていても厳密にはピアツーピアではない。