6


3

Live MessengerやGoogle Talk用のデスクトップクライアントなどのインスタントメッセージングアプリケーションを使用している場合、コンピュータ間でファイルを転送できます。 よくわかりませんが、コンピュータ間で転送されるデータがMicrosoftやGoogleのIMサーバーを経由するのではなく、IMソフトウェアを搭載した2台のコンピュータが互いに直接通信することは確実です。 私は、クライアント間のこの直接接続がどのように確立されているのか、そしてどのようにして私が自分自身に似たようなものを実装するのかと思います。

私はパーソナルネットワークの使用経験がありますが、サーバーが常に待機しており(ポートがファイアウォールによってブロックされていない)、データが必要なときはいつでもクライアントがサーバーに要求を出すクライアントサーバー関係を理解し​​ているだけです。

5 Answer


6


「ピンホール」と呼ばれる多くのクライアントによって使用される方法があります。

私はあなたにUDPパケットを送ります、それは私のファイヤーウォールに穴を開けます(私のファイヤウォールによる応答と思われるUDPパケットがあなたによって送られ、私によって受け取られることを可能にします)。 そのパケットはファイアウォールによって破棄されます。

あなたは私にUDPパケットを送り、あなたのファイアウォールに穴を開けます。 そのパケットは私に届くはずです、その時点で私はあなたに届くために別のものを送ることができ、私たちは私たちのファイアウォールを通してUDPを通して通信することができます。


5


私はhttps://secure.logmein.com/products/hamachi / list.asp [Hamachi]というプログラムを使用しました。これは、ピアツーピアvpn(仮想ネットワーク間)のようなものです。 それから私はそのままクライアントサーバーアプリケーションを書きました。 NATルーターの処理に必要な煩わしさがなくても、インターネットを介して接続する機能を手に入れることができました。

あなたがそれを「正しく」行う必要があるならば、一般的な方法の一つは udp hole punchingです。 Webリクエストを送信すると、ファイアウォールはそれに応じてデータを返すことを認識しています。 トリックは、クライアントAとクライアントBの両方がインターネット上のサーバーに連絡することです。 サーバーは、クライアントAに対して行われた要求の詳細をクライアントBに渡し、またその逆も行います。 最初の接続が確立されると、メインサーバーがなくなっても通信を継続できます。


0


私がこれを実行していたならば、私はいくつかの選択肢を見たいと思います。

  1. ファイアウォールでネットワーク内のPCに特定のポートを転送させる。 これにより、外界からサーバーに接続することができます。

  2. ファイアウォールの内側にあるクライアントを、ファイアウォールの外側にある目に見えるサーバーに接続させます。

要するに、会話中の少なくとも一方のパーティが他のパーティから見えるようにする必要がある(サーバ)必要があります。 どのように接続しても、クライアントとサーバーは問題なく前後に通信できます。


0


両方のクライアントがピンホールされておらず、VPNソフトウェアが使用されていないファイアウォールの内側にある場合、それらはサードパーティのサーバーを介して通信しています。 期間。


-2


ほとんどのトロイの木馬がすることをしなさい:

_ 逆接続 _

編集:

_ ファイアウォールの内側に2台のマシンがある場合、何らかの第3の「プロキシ」が必要になります _