2009-03-02 5 views
1

私が取り組んでいるプロジェクトでは、Bittorrentとは異なり、P2Pを使ってピア間でデータを転送しています。このコンポーネントは各インタフェースでランダムスキャンを実行して、ネットワーク上のどのデバイスを確認します。これまでは、プログラムのリスニングポートに接続しようと試みて接続に成功したかどうかをチェックするSocket接続として実装されていました。私はこれを取り除き、各インターフェースで放送する方が速いかどうか疑問に思っています。これはより速く/より信頼できるでしょうか?次のようにブロードキャストは、特定のポートのランダムなSYN/ACKスキャンより高​​速ですか?

接続のための現在のコードは次のとおり

​​

「ランダム」成分は各インターフェースのサブネットのための単純な

Random r = new Random(); 

あります。

ブロードキャスト(Wireshark、DHCPなど)の私の経験から、ブロードキャストはトラックローディングが高速になり、ヒープリソースが少なくなるという印象を受けています。私が尋ねる理由は、それを書いた人がスマートな人で、なぜ彼は放送を使わなかったのだろうかと思っています。

これは価値があるのですか?

答えて

3

放送は、特定の機器によってフィルタリングされやすいです。それは過去の1つのネットワークセグメントでは信頼できません。あなたがやっていることがLAN(または単一のネットワークセグメント)に限定されているならば、放送は実際にははるかに高速でなければなりません。

言われているように、ランダム探索は決して効率的でも最適でもありません。おそらく、ノードを見落としたり、スキャンに問題が予想よりも長くかかるなどしたりします。サブネットマスクにアクセスできるので、セグメント上の潜在的に有効なノードのリストを簡単に計算できるはずです。 1つのネットワークセグメント(またはそれらの集合)内に閉じ込められている場合、ブロードキャストは方法です。

有効なWANノード(つまり1つのセグメントだけではない)のリストを検索している場合、不要なトラフィックが多数送信される可能性があります。私のアドバイスでは、単に各ノードが他のノードのキャッシュをお互いに送信できるようにしてから、ネットワークにブートストラップするために単一のノードのアドレスをユーザ入力として要求することがあります。

0

私はあなたが正しいと思っていますが、研究を始めるべきではないかと疑っています。あなたは理論をテストするための膨大な努力を話しているわけではないので、それを試して見てみませんか?

- MarkusQ

+0

ありがとうございます。私の躊躇は、アプリケーションを書いた人がかなり良いプログラマであったことによるが、これはネットワーキングの知識が不足しているように思えた。私は何かが見落とされていたかどうか確信していた。私はいくつかの研究をする必要があります。ありがとう:) –

関連する問題