フタなしカンヅメ

徒然なるままに @happytar0

ブラウザでP2P通信、ファイル転送が出来るのか

P2Pと聞くとマイナスのイメージを持ってしまいますが、P2P技術が使われているプロダクトは意外に多いのではないかと思います。

もちろん、P2Pを利用する上での長所・短所はあります。
長所は、通信帯域を多く使うアプリケーションの場合、サーバを介さずに通信が出来るためコストを抑えることができ、Winnyに代表されるように匿名性やスケーラビリティといった耐障害性の観点からもメリットがあります。
逆に短所は、実装が困難な点やノード管理の複雑さ、接続先のネットワーク環境に左右されうる点などがあると思います。


特に通信帯域を多く使うような場面での効果は絶大です。動画や音声配信などの通信帯域を使う場面はどんどん増えていっています。
この状況下(1年くらい前?)で、FlashPlayer1.0から実装されたのがRTMFP(Real Time Media Flow Protocol)というプロトコルです。
これはUDPを使い、ユーザ間同士で直接通信することができるような夢のような機能です。


少し気になるのはUDP?というわけですが、これにはいくつか理由があるようです。動画や音声送信などのリアルタイム性(遅延が少ない)を求める場面で有利ということや、NAT越えもし易いってこともあるんじゃないでしょうか。

コネクションレスUDPでは、遅延が少ないといってもちゃんと届いている不安な感じですが、信頼性を上げるために輻輳処理や暗号化などが取り入れられているそうです。詳しくは下記参照。
Flash Player 10.1 と RTMFP - akihiro kamijo


あともう一つ、このプロトコルではStratusという中央サーバが必要であり、ハイブリッドP2Pであるということが言えます。Stratusは現在Adobeのサイトにて無償開放されていますが、将来的にはFMSに取り込まれるのではないかと思います。
Cirrus | Real Time Media Flow Protocol (RTMFP) - Adobe Labs


NAT越えは、UDPホールパンチングという方法を使っているそうで、最初に中央サーバに接続する事で実現しているようです。アウトバウンドのUDPが使える環境で、なおかつルータがNATトラバーサルに対応している必要があるという条件は限られますが、多くの環境では使えるのではないかと思います。信頼性を重視するサービスの場合、既存のRTMP等のプロトコルと併用します。



そして6月になり、FlashPlayer10.1が正式リリースされました。新たに10.1で導入された機能にピアアシストネットワークというものがあります。
これはノード同士をグループ化することができ、自律したネットワークを構成してくれるという優れものです。詳しくは下記参照。
Flash Player 10.1 と RTMFP (ピアアシストネットワーク) - akihiro kamijo


そんなこんなでFlashでP2Pを利用できる環境がばっちり整ってきた訳で、早速何か作ろうかと考えて出来たのが、ブラウザ間でファイルをP2P転送することが出来るWebサービスです。
We're sorry, but something went wrong (500)

まだ公開したばかりですが、上に書いたようにビアアシストネットワークを使ったりすれば、もう少し便利になるのではないかという感じです。他のサービスにも応用出来そうなので色々作れればいいなーと思います。