我的伺服器如何向網路中的每個人宣布其存在

我的伺服器如何向網路中的每個人宣布其存在

情況如下。我想讓一個應用程式在伺服器上運行。公司中的所有桌面都必須連接到它。但我不希望伺服器的 IP 位址被硬編碼到桌面應用程式中。相反,我希望伺服器能夠透過某些廣播機制來宣布自己。桌面應用程式將偵聽此類訊息,從而了解伺服器的 IP 位址,然後可以連接到它

我該怎麼做 ?我需要使用多播嗎?多播訊息的傳輸距離有多遠?桌面應用如何監聽組播資料?

答案1

最常見的方法是使用常規的普通域名系統。您的公司可能有自己的網域;可能是內部的;只需在其下方新增一個子網域 -myapp.internal.example.commyapp.corp類似的內容 - 並指向您的伺服器位址。

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

(畢竟這是一個伺服器,其 IP 位址不太可能每週更改。當它確實發生變化時,您需要更新的只是 DNS 中的子網域。

您可以使其更高級並使用SRV記錄而不是直接的 A/AAAA 位址記錄。例如,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 優先權然後按權重對傳回的記錄進行排序,但它可能會帶來一些優勢,例如能夠添加較慢的「備份」伺服器。


如果由於某種原因這是不可接受的,您可以嘗試現有的基於多播的方法之一服務發現協議。 (其中一些將名稱解析和服務發現合而為一;另一些則將其分開。)

  • Apple 和各種 Linux 發行版使用 Bonjour/Avahi aka組播DNS(“多播 DNS”)結合DNS-SD用於一般服務發現和本地名稱解析;

  • 微軟更喜歡基於 UPnP 的SSDP,除非它更喜歡WS-發現反而。過去它使用NetBIOS。全部記錄在功能提供者

  • (有些程式決定僅以自己的自訂格式廣播 UDP 資料報,表示「我在這裡!」。這效果不佳。)

通常有作業系統提供的 API 和第三方函式庫來使用對應的發現協定來尋找特定服務。

如果您要自己實現一些東西,每個作業系統還提供了以下功能:加入多播組並接收任何人發送到該群組的訊息。IP組播預設應該在廣播域內工作,但通常需要設定為透過路由器

相關內容