🏢

ICE(Interactive Connectivity Establishment)について、できるだけ分かりやすく平易に解説する

に公開

ICEとは? 一言でいうと…

ICEとは、**インターネットを介して2つのコンピューター(端末)同士を直接つなぐための「賢いやり方」**です。特に、Web会議やオンラインゲームなど、リアルタイムで音声や映像のやりとり(WebRTC)をするときに使われる重要な技術です。


なぜICEが必要なのでしょうか?

私たちの多くは、自宅や会社のルーターを介してインターネットに接続しています。このルーターは「NAT」や「ファイアウォール」という仕組みを持っており、外部からの不正なアクセスを防ぐ「壁」のような役割をしています。

この「壁」のおかげでセキュリティは高まるのですが、副作用として、外から中のコンピューターに直接アクセスするのが難しくなります

  • 例えるなら…
    • あなたのパソコンは、大きなオフィスビル(ルーター)の中にある内線電話のようなものです。
    • あなたは自分の内線番号(プライベートIPアドレス)は知っていますが、ビルの外から直接その番号に電話をかけることはできません。
    • 外の世界とやりとりするには、ビルの代表番号(グローバルIPアドレス)を使う必要があります。

このため、AさんとBさんがビデオ通話をしようとしても、お互いが「壁」の内側にいるため、直接声(データ)を届けることができない、という問題が起こります。


ICEはどのようにこの問題を解決するのか?

そこでICEの出番です。ICEは、なんとかしてこの「壁」を乗り越えて、2つの端末が通信できる経路を見つけ出そうとします。そのために、以下のような手順を踏みます。

  1. 通信経路の候補を集める(Candidate Gathering)
    「どうやったら相手と連絡が取れるか?」という通信経路の候補を、あらゆる方法でかき集めます。

    • 自分自身のIPアドレス(内線番号)
    • STUNサーバーに聞く:「すいません、うちのビルの代表番号(グローバルIPアドレス)って何番ですか?」と外部のSTUNサーバーに問い合わせて、インターネット上での自分の「住所」を教えてもらいます。
    • TURNサーバーを使う:どうしても直接通信できない場合の最終手段です。「伝言役」や「中継基地」として、TURNサーバーにデータを送り、そこから相手に届けてもらいます。ただし、中継が入る分、少し遅延が発生します。
  2. 候補を交換し、接続テストを行う(Connectivity Checks)
    お互いが集めた候補のリストを交換します。そして、そのリストにある経路を片っ端から「もしもし、聞こえますか?」とテストしてみて、実際に通信できるかどうかを確認します。

  3. 最適な経路を選ぶ
    テストに成功した経路の中から、一番速くて効率の良い(遅延が少ない)ものを選び、その経路を使って通信を開始します。直接つなぐのが一番速いので、それを優先的に試します。

まとめ

ICEとは、NATやファイアウォールという「壁」を乗り越えるために、様々な通信経路の候補(直接、STUN経由、TURN経由)を集めて、その中からベストなものを選んでくれる賢い仕組みです。

このICEのおかげで、私たちは複雑なネットワーク設定を意識することなく、スムーズにビデオ通話などを楽しむことができるのです。

関連資料

https://developer.mozilla.org/ja/docs/Glossary/ICE

Discussion