Skype は何故繋がるか
先日、インターネット電話 Skype をちょっと調べる機会がありました。その話とは直接関係はなかったのですが、調べている最中に「Skype は NAT 内同士の通信をどのように実現しているのだろうか」、という以前からの疑問が解決しました。
通常、FW / NAT 内では外側(例えばインターネット)から内側(例えばLAN)のクライアントに対しては明示的に設定しない限り、直接セッションを貼ることはできません。 ということで会社なんかの FW を勝手に設定できない環境のことも考えて、多くのメッセンジャー系ソフトは先に内側から “サーバ” に対してセッションをはり、サーバがそれらのクライアント同士の通信を取り持つ感じでメッセージの交換をします。 よくやるのは HTTPS の Keep Alive でサーバと接続を維持し続ける方式ですね。 ピアトゥーサーバトゥーピア、となっているわけです。(この場合ピアといっていいのか分かりませんが)
で、テキストメッセージくらいならこれで大丈夫ですが、音声通話だと通信量が大きいためサーバの設備が非常に大きな(高価)ものになりますし、ロケーションの通信経路によっては遅延が大きくなります。 Skype はどのようにこの辺を解消しているのだろうと、いくつかの記事を読んでいると・・・
P2Pソフト「Skype」で新しいタイプの通信事業者を目指す──Skype CEO Niklas Zennstrom氏に聞く : IT Pro ニュース
Q.ファイアウォールがあっても通信できるのはなぜか。
A.片方がファイアウォールの内側にいるときはスーパーノードに常にパケットを出し続けている(keep alive)。両方がファイアウォールの内側にいるときは,グローバル・アドレスを持つ第三者のマシンを介してP2P2Pのような状態で通信する。
なるほどー。 P2P2P。 サーバを設けて通信を仲介するのではなく、使えそうなピアを介して通信するわけですね。 一つ賢くなりました。
それにしても、P2P は面白いですね。 Freenet とか Winny の、データがノードをさまよう様なんかは動物の生存競争をみているようで興味深いですし、BitTorrent のピアの登り帯域を使ってダウンロードを速くするなんてのは素晴らしいアイディアです。
最近、Web サーバをピアにみたてて面白いことできないかな、と考えましたが方式が先立ち、要件はありませんでした。 なんかないかな・・・。