3

最初にいくつかの背景。LAN 内の各マシンに .net クライアント エージェントをインストールしています。彼らは私の中央サーバー [ウェブサイト] とも同じ LAN でやり取りしています。

私の Web サイトでは、どのマシンが互いに通信できるかを把握することが重要です。たとえば、あるサブネットのマシンは、ルーターなどを構成せずに別のサブネットのマシンと直接通信することはできません。ただし、同じサブネット内のマシンは互いに直接通信できる必要があります。

私が直面している問題は、LAN のセットアップが図 1 のような場合です。

図1

Comp1、Comp2、および Comp3 はルーターの背後にあるため、IP アドレスは 192.168.1.2 ~ 192.168.1.4 です。これらのマシンのクライアント エージェントは、同じ IP アドレスをサーバーに報告します。ただし、マシン Comp4、Comp5 も同じ IP アドレスを持っています。

したがって、私のサーバーに関する限り、同じ IP アドレスを持つマシンが 2 台あります。それだけでなく、サブネット マスクはすべてのマシンで 255.255.255.0 であるため、サーバーは Comp1 が Comp5 と直接通信できると思い込んでしまいますが、これは不可能です。

それで、どうすればこれを解決できますか?このシナリオをサポートできるように、クライアントまたはサーバーで何を変更する必要がありますか? この 2 つは、私が管理できる唯一のものです。

4

3 に答える 3

3

編集: ネットワーク ダイアグラムが単純化されすぎており、複数のルーター/サブネット レベルが存在する可能性があるようです。私の元の答えは、このシナリオを処理しません。また、クライアントアプリまたはサーバーアプリのみを変更し、ルーターとファイアウォールを改ざんしないという制限により、それはより困難になります.

EDIT2 : 「arp -a」を使用すると、ルーターの MAC アドレスを抽出できます。クライアント アプリがこれを行うことができれば、パズルは解決されます。

クライアント アプリは、ローカル マシンのアドレスを認識し、それをサーバー アプリに渡します。

サーバー アプリは、接続が入ったときにリモート アドレスを認識します。これは、マシン アドレスまたはルーター アドレスになります。

これらの 2 つの値から、求める内容を導き出すことができます。

例えば:

Server app receives connection from 10.10.10.2 with client supplying 192.168.1.2

Server app receives connection from 10.10.10.3 with client supplying 192.168.1.3

「リモートアドレス」はサブネットを区別します。

したがって、理解する必要があるのは、クライアント接続のリモート アドレスを抽出する方法だけです。サーバー アプリに一般的な Web テクノロジを使用している場合、これは非常に簡単です。

于 2010-04-22T10:00:58.383 に答える
1

1 つのアプローチは、ブロードキャストメッセージを使用して、個々のクライアント マシンが表示できる相手を決定することです。各クライアントに特定の UDP ポートをリッスンさせ、各クライアントがその存在をローカル ブロードキャスト ドメインにブロードキャストします。クライアントがこのようにお互いを見ることができる場合、おそらくお互いに TCP 接続を確立することもできます。

サーバーがどのクライアントが互いに通信できるかを知る必要がある場合は、クライアントにサーバーに通知させます。

于 2010-04-22T09:58:09.407 に答える
0

ネットワーク図が複雑すぎると、必要なものを見つけるのが非常に困難になると思います。また、Comp1 が Comp6 への直接接続を確立できることも考慮する必要があります。

私が提案できる解決策は、プロービングです。クライアントはサーバーから他のすべてのクライアントのリストを受け取り、それぞれに接続を確立しようとします。ネットワーク内の任意の数のルーター/ファイアウォール/NAT を想定して、どのクライアントが実際にアクセスできるかを知る唯一の方法だと思います。もちろん、多数のコンピューターに対してはあまりスケーリングしません。

于 2010-04-27T00:05:43.213 に答える