ピアアシストネットワーキングアプリケーションの開発のヒント

ピア接続なしのユーザーのフォールバックメカニズムの作成

NetStream または NetGroup オブジェクトが groupspec で構築され、その groupspec に peerToPeerDisabled = false があるとき、Flash Player は設定マネージャーで「ピアアシストネットワーキング」ダイアログを示します。ダイアログでは、Flash Player が帯域幅をアプリケーションの他のユーザーと共有するのを許可するよう求めます。ユーザーが、Flash Player が帯域幅を共有するのを許可しない場合、ピアアシストネットワーキングに依存する機能は動作しません。

サーバーによるアプリケーションのアンロードの防止

Flash Media Server は、着信接続のないアプリケーションをアイドルと見なします。その結果、サーバーはアプリケーションをアンロードします。アプリケーションに、グループに接続されているピアが含まれていても、クライアント接続がない場合、アプリケーションはアイドルと見なされます。サーバーがアプリケーションをアンロードしないようにするには、false を返す Application.onAppStop() ハンドラーを定義します。

例えば、サーバー A とサーバー B の 2 台の Flash Media Server がある次のシナリオを考えます。サーバー A は、ピア紹介者として機能し、ライブストリームを取り込みます。サーバー B 上のアプリケーションは、サーバー A からストリームを受信し、Stream.play() を呼び出して、RTMFP グループにストリームをパブリッシュします。サーバー B 上のアプリケーションには、サーバー A への発信接続がありますが、着信クライアント接続はありません。アプリケーションに外部からのクライアント接続がない場合、サーバーは、このアプリケーションをアイドル状態であると見なしてアンロードします。

NAT とファイアウォールのトラバース

ピアツーピア接続は、Network Address Translation(NAT)とファイアウォールフィルタリングによってブロックされることがあります。ネットワーク全体を制御可能なイントラネットアプリケーションでは、次のいずれかの作業を行って、必ずクライアントがピアツーピア接続を作成できるようにします。

  • UDP トラフィックがファイアウォールを通過できるようにします。

  • IETF BEHAVE ワーキンググループによる、NAT の推奨される実装に準拠した NAT またはファイアウォールを使用します。

  • Flash Player で TURN プロキシのサポートを使用して、上記の推奨に準拠した、DMZ 上のプロキシにトラフィックを送信します。「Firewall traversal」を参照してください。

インターネットアプリケーションでは、アプリケーション開発者は、ファイアウォールまたは NAT によって直接のピアツーピア接続がブロックされるケースを扱う方法を選択する必要があります。ピアツーピアでない接続で動作するアプリケーションを作成するには、クライアントサーバー RTMP や RTMPT へのプロトコルフォールバックを作成します。サーバーを通じてメディアを中継しないアプリケーションを作成するには(一部のクライアントがメディアを参照できない場合でも)、プロトコルフォールバックを作成しません。

NAT の種類について

さまざまな種類の NAT の動作について理解しておくことは重要です。

Cone
すべてのピアと会話するときに、同じアドレスとポートを再利用します。

複数 IP アドレス、symmetric
新しいピアと会話するときに、新しいアドレスとポートを選択します。

単一 IP アドレス、symmetric
新しいピアと会話するときに、同じアドレスを使用しますが、新しいポートを使用します。

また、NAT とファイアウォールのフィルタリング動作について理解することも重要です。

なし
フィルタリングを行わない cone NAT は「full cone」と呼ばれます。

アドレス制限型
ピアは、既に会話しているアドレスとの会話だけに制限されます。

アドレスおよびポート制限型
ピアは、既に会話しているアドレスおよびポートとの会話だけに制限されます。

また、いくつかの NAT とファイアウォールの動作は、簡単に定義されません。例えば、NAT が、ポート番号を維持する symmetric NAT として動作しているとします。この NAT が、リソースを使い果たすと、cone NAT として動作することが考えられます。

もう 1 つの例として、NAT が、サーバーに接続する最初のクライアントに対してはある種類の NAT として動作するとします。この NAT が、同じサーバーに接続しようとする第 2 のクライアントに対しては、別の種類の NAT として動作することが考えられます。この場合、単純な分析では、クライアントがピアツーピア接続を行うことができるかどうかを予測できない場合があります。

注意: ファイアウォールはフィルターを行うことができますが、NAT ではありません。NAT は、ファイアウォールとして動作し、フィルタリングを行う場合があります。ファイアウォールは、UDP を完全にブロックする場合があります。

RTMFP Connectivity Checker

Adobe のコンピューターサイエンティストである Matthew Kaufman 氏は、「RTMFP Connectivity Checker」という名前の Web サイトを、http://cc.rtmfp.net/ でホストしています。このサイトを使用して、特定のネットワーク上のクライアントがピアツーピア接続を作成できるかどうか確認してください。

cc.rtmfp.net への接続のプロパティが、ピアとの間の接続のプロパティと同じ場合は、その結果を使用して、ピアツーピア接続を構成できるかどうかを判断します。接続のプロパティが同じにならないことがあるため、結果は決定的でない場合があります。例えば、同じファイアウォールの内側にある、同じ組織内の 2 台のピアで、ピア間のプロパティと、それぞれの http://cc.rtmfp.net へのプロパティが異なる場合があります。

接続をテストするには、クライアント接続のプロパティが、テストしようとしているクライアントのプロパティと同じであり、NAT またはファイアウォールの動作が予測可能であることが必要です。次に、RTMFP Connectivity Checker のテストを示します。

テスト

説明

自身のパブリック IP アドレスを知っている

Flash Player のローカルアドレスは、cc.rtmfp.net が接続を受け付けたときに受け取ったアドレスに一致しています。この場合、アドレス変換は行われていません。

パブリック UDP ポート番号はローカル UDP ポート番号と同じ

Flash Player が使用していると認識している UDP ポート番号は、http://cc.rtmfp.net が接続を受け付けたときに受け取ったポート番号に一致しています。この場合、ポート変換は行われていません。この答えと上のテストの答えが「はい」の場合、NAT がないものと考えられます(ただし、ファイアウォールは存在している可能性があります)。

同じ IP アドレス、同じ UDP ポート番号から受信できる

この値は常に「はい」になります。クライアントがこのテストを完了できないとすると、最初の接続を確立できないためです。

同じ IP アドレス、異なる UDP ポート番号から受信できる

ファイアーウォールが「ポート制限型」かどうかを示します。ポート制限型のファイアウォールでは、あるアドレスとポート番号からの着信トラフィックを許可する前に、そのアドレスとポート番号への発信接続が存在している必要があります。この要件は、以前のトラフィックが同じアドレスの異なるポート番号に送信された場合でも当てはまります。

異なる IP アドレス、異なる UDP ポート番号から受信できる

ファイアーウォールが「アドレス制限型」かどうかを示します。アドレス制限型のファイアウォールでは、ある IP アドレスからの着信トラフィックを許可する前に、その IP アドレスへの発信接続が行われている必要があります。

サーバーの紹介後、異なる IP アドレスに送信できる

最初の接続を行うことができた場合、この値は常に「はい」になります。このテストは、新しい RTMFP 接続を開くのに似ています。このテストが失敗した場合、Flash Player が紹介要求を受信または処理する方法に問題があるか、ファイアウォールが予測不能です。

元の接続のソース IP アドレスが維持される

このテストは、cone NAT があるか、IP アドレスが 1 つだけある symmetric NAT があるか、IP アドレスが複数ある symmetric NAT があるものの、今回は偶然同じアドレスが使用されたことを意味します。テストを繰り返して値が変わる場合は、複数の IP アドレスを使用する symmetric NAT があり、ときどき偶然に同じアドレスが使用されています。

元の接続のソース UDP ポート番号が維持される

このテストは、cone NAT があることを意味します。値が「いいえ」の場合、symmetric NAT があります。

RTMFP 接続テストについて

場合によっては、symmetric NAT によりピアツーピア接続が行えないことがあります。

Flash Player は、ほとんどの cone NAT 設定およびファイアウォール設定で動作します(複数の層の NAT で「hairpinning」がサポートされていない場合、いくつかの問題があります)。しかし、symmetric NAT があり、反対側で特定のファイアウォールまたは NAT がある組み合わせでは、ピアツーピア接続を確立する機能がブロックされます。一方が単一の IP アドレスを持つ symmetric NAT の場合、Flash Player は他の symmetric NAT またはポート制限型の cone NAT(またはポート制限型のファイアウォール)の内側にあるピアに接続できません。

接続の一方が複数の IP アドレスを持つ symmetric NAT の場合、他の symmetric NAT またはアドレス制限型(かつおそらくポート制限型)の cone NAT(またはアドレス制限型かポート制限型のファイアウォール)の内側にあるピアへの接続は不可能です。他のピアを追加させるために、いくら Flash Player が制限型 cone NAT または制限型ファイアウォールに「穴を開けようと」しても、相手が別の新しいアドレスまたはポート番号に移行します。そのため、作成した穴が適切でなくなります。