サーバーがネットワーク内の全員にその存在を知らせるにはどうすればいいですか?

サーバーがネットワーク内の全員にその存在を知らせるにはどうすればいいですか?

状況は次のようになります。サーバー上でアプリケーションを実行したいと考えています。社内のすべてのデスクトップがそれに接続する必要があります。ただし、サーバーの IP アドレスをデスクトップ アプリにハードコードすることは望んでいません。むしろ、サーバーが何らかのブロードキャスト メカニズムによって自分自身をアナウンスできるようにしたいと考えています。デスクトップ アプリはそのようなメッセージをリッスンし、サーバーの IP アドレスを認識して、サーバーに接続できるようになります。

どうすればできますか? マルチキャストを使用する必要がありますか? マルチキャスト メッセージはどこまで届きますか? デスクトップ アプリはどのようにしてマルチキャスト データをリッスンできますか?

答え1

最も一般的な方法は、通常の通常のドメイン名おそらくあなたの会社には独自のドメイン名(おそらく社内用)があります。その下にサブドメイン(myapp.internal.example.comまたはmyapp.corpそれに類するもの)を追加して、サーバーのアドレスを指定します。

myapp.<domain>.         A       10.0.0.5
myapp.<domain>.         AAAA    2001:db8::123:4

(結局のところ、それはサーバただし、IP アドレスが毎週変更される可能性は低いです。変更された場合は、DNS のサブドメインを更新するだけで済みます。

さらに高度な使い方もできますSRV レコード直接の A/AAAA アドレス レコードの代わりに、SRV レコードを使用します。たとえば、XMPP チャット プロトコルは、ドメインのサーバーを検索するために SRV レコードを使用します。サーバーは、優先順位の異なる複数のサーバーである場合があります。

chat1.<domain>.         A       10.0.0.4
chat2.<domain>.         A       10.0.0.7

                                ; priority, weight, port, hostname
_xmpp._tcp.<domain>.    SRV      0 0 5222 chat1.<domain>.
_xmpp._tcp.<domain>.    SRV     10 0 5222 chat1.<domain>.

これは、返されたレコードを SRV 優先度で並べ替え、次に重みで並べ替えるロジックが必要になるため、アプリにとってはより複雑になりますが、低速の「バックアップ」サーバーを追加できるなどの利点が得られる可能性があります。


何らかの理由でそれが受け入れられない場合は、既存のマルチキャストベースのサービス検出プロトコル(名前解決とサービス検出を 1 つにまとめたものもあれば、別々にしているものもあります。)

  • AppleやさまざまなLinuxディストリビューションはBonjour/Avahi(別名メートルDNS(「マルチキャストDNS」)と組み合わせるとDNS-SD一般的なサービス検出とローカル名前解決の両方に使用します。

  • マイクロソフトはUPnPベースの情報技術ただし、WS ディスカバリ代わりに、以前はNetBIOSを使用していました。すべては以下に記載されています。関数プロバイダー

  • (一部のプログラムは、独自のカスタム形式で「私はここにいます!」と伝える UDP データグラムをブロードキャストすることを決定します。これはうまく機能しません。)

通常、対応する検出プロトコルを使用して特定のサービスを検索するための OS 提供の API とサードパーティのライブラリの両方が存在します。

自分で実装する場合は、各OSで次のような機能も提供されています。マルチキャストグループに参加するそして、そのグループに送信されたメッセージを受信できるようになります。IP マルチキャストブロードキャストドメイン内ではデフォルトで動作するはずですが、ルーターを通過するように設定されている

関連情報