ICE(Interactive Connectivity Establishment)について、できるだけ分かりやすく平易に解説する
ICEとは? 一言でいうと…
ICEとは、**インターネットを介して2つのコンピューター(端末)同士を直接つなぐための「賢いやり方」**です。特に、Web会議やオンラインゲームなど、リアルタイムで音声や映像のやりとり(WebRTC)をするときに使われる重要な技術です。
なぜICEが必要なのでしょうか?
私たちの多くは、自宅や会社のルーターを介してインターネットに接続しています。このルーターは「NAT」や「ファイアウォール」という仕組みを持っており、外部からの不正なアクセスを防ぐ「壁」のような役割をしています。
この「壁」のおかげでセキュリティは高まるのですが、副作用として、外から中のコンピューターに直接アクセスするのが難しくなります。
-
例えるなら…
- あなたのパソコンは、大きなオフィスビル(ルーター)の中にある内線電話のようなものです。
- あなたは自分の内線番号(プライベートIPアドレス)は知っていますが、ビルの外から直接その番号に電話をかけることはできません。
- 外の世界とやりとりするには、ビルの代表番号(グローバルIPアドレス)を使う必要があります。
このため、AさんとBさんがビデオ通話をしようとしても、お互いが「壁」の内側にいるため、直接声(データ)を届けることができない、という問題が起こります。
ICEはどのようにこの問題を解決するのか?
そこでICEの出番です。ICEは、なんとかしてこの「壁」を乗り越えて、2つの端末が通信できる経路を見つけ出そうとします。そのために、以下のような手順を踏みます。
-
通信経路の候補を集める(Candidate Gathering)
「どうやったら相手と連絡が取れるか?」という通信経路の候補を、あらゆる方法でかき集めます。- 自分自身のIPアドレス(内線番号)
- STUNサーバーに聞く:「すいません、うちのビルの代表番号(グローバルIPアドレス)って何番ですか?」と外部のSTUNサーバーに問い合わせて、インターネット上での自分の「住所」を教えてもらいます。
- TURNサーバーを使う:どうしても直接通信できない場合の最終手段です。「伝言役」や「中継基地」として、TURNサーバーにデータを送り、そこから相手に届けてもらいます。ただし、中継が入る分、少し遅延が発生します。
-
候補を交換し、接続テストを行う(Connectivity Checks)
お互いが集めた候補のリストを交換します。そして、そのリストにある経路を片っ端から「もしもし、聞こえますか?」とテストしてみて、実際に通信できるかどうかを確認します。 -
最適な経路を選ぶ
テストに成功した経路の中から、一番速くて効率の良い(遅延が少ない)ものを選び、その経路を使って通信を開始します。直接つなぐのが一番速いので、それを優先的に試します。
まとめ
ICEとは、NATやファイアウォールという「壁」を乗り越えるために、様々な通信経路の候補(直接、STUN経由、TURN経由)を集めて、その中からベストなものを選んでくれる賢い仕組みです。
このICEのおかげで、私たちは複雑なネットワーク設定を意識することなく、スムーズにビデオ通話などを楽しむことができるのです。
関連資料
Discussion