2

デバイスに組み込まれたサーバーと通信する必要がある TCP クライアント プログラムがあります。単一のクライアント プログラムを介して制御する必要があるデバイスが何千台もある場合があります。これらのデバイス (つまり tcp サーバー) の数が多いため、異なるルーターの背後に配置する必要があります。

シーンは次のようになります

クライアント-----「ルーター1」----サーバー1、サーバー2、サーバー3...server_255

   ----- "router2" ---server1, server 2...server_255

ここに画像の説明を入力

クライアント プログラムとサーバー プログラムは異なるネットワークにあるため、クライアントとサーバー間の通信を確立する最も簡単な方法はどれですか?

単純なクライアント サーバー プログラミングのように見えますが、問題は NAT にあり、ネットワーク変換はここにあります。サーバーは別のプライベート ネットワークの背後にあるため、ここで NAT の問題を解決することを楽しみにしています。(例: ポート転送のようですが、よくわかりません)

注: 私のクライアントとデバイスはまだネットワーク内にあるため、セキュリティは主な関心事ではありません。

よろしくお願いします。

4

3 に答える 3

3

最も単純な設計は、専用のデーモン プロセス (通常はcontrollerと呼ばれる) を用意し、ウェルノウン ポートをリッスンし、代わりにすべてのデバイスがクライアントとして動作し、それに接続することです。コントローラーは、デバイスの起動と停止を監視し、その位置と状態を追跡します。

現在「クライアント」と呼んでいるものは、単なるユーザー インターフェイス部分になります。コントローラーにクエリを実行して結果を表示し、コントローラーにコマンドを発行して、それらをデバイスに中継します。

于 2013-01-15T17:57:55.817 に答える
2

図は、各 NAT ベースのルーターの背後にある複数のエンドポイントを示しています。ポート転送アプローチを使用している場合は、さまざまなルーターのエンドポイントごとに異なるポート番号を登録する必要があります。追跡と構成は面倒ですが、中央管理サーバーが各エンドポイントに即座にアクセスできるようになります.

エンドポイントでソフトウェアを制御している場合は、中央サーバーにポーリングして指示を得ることができます。要求はプライベート側から発信されるため、ルーターでの構成は必要ありません。サーバーからの典型的なメッセージが「OK」のようなものであると仮定すると、トラフィックの量は些細なものになります。欠点は、中央サーバーによる命令の配信が瞬時に行われないことです。クライアントは、次のポーリング間隔まで、メッセージが利用可能であることを認識しません。

両極端の中間のどこかに、追加コストがかかる分散管理アプローチがあります。各 NAT ルーターの背後に既にサーバーがある場合は、各エンドポイントに指示を中継させることができます。中央管理サーバーは、各 NAT ファイアウォールの背後にある少数のローカル管理サーバーを制御でき、これらの各サーバーは同じ LAN 内のエンドポイントに直接アクセスできます。

于 2013-01-24T01:01:27.493 に答える
2

すべての「サーバー」(つまりデバイス) が「クライアント」(つまり中央サーバー) への接続を維持するようにします。あなたが説明したように、逆に行くと、ルーターが途中で機能しません。

フルタイムの接続が必要ない場合は、接続スケジュールを確立するか、ブロードキャスト/マルチキャスト メッセージを使用してクライアントに接続するように指示する必要があります。ブロードキャスト/マルチキャストでは、メッセージが確実に送信されるようにルーターの構成を変更する必要があることに注意してください。

ここで、ルーターとは、NAT を含むものを意味すると想定しています。ここで問題になるのは NAT です。

于 2013-01-15T17:12:04.360 に答える