상황은 다음과 같습니다. 서버에서 애플리케이션을 실행하고 싶습니다. 회사의 모든 데스크톱이 여기에 연결되어야 합니다. 하지만 서버의 IP 주소가 데스크톱 앱에 하드 코딩되는 것을 원하지 않습니다. 오히려 나는 서버가 일부 브로드캐스팅 메커니즘을 통해 자신을 알릴 수 있기를 원합니다. 데스크톱 앱은 이러한 메시지를 수신하므로 서버의 IP 주소를 알게 되어 서버에 연결할 수 있습니다.
내가 어떻게 해 ? 멀티캐스트를 사용해야 합니까? 멀티캐스트 메시지는 어디까지 전달되나요? 데스크탑 앱은 어떻게 멀티캐스트 데이터를 수신할 수 있습니까?
답변1
이에 대한 가장 일반적인 방법은 일반 일반을 사용하는 것입니다.DNS. 귀하의 회사에는 자체 도메인 이름이 있을 수 있습니다. 아마도 내부적인 것일 수도 있습니다. 그 아래에 하위 도메인을 추가하거나 서버 주소를 가리키기만 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 주소 레코드 대신. 예를 들어 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(일명)를 사용합니다.mDNS("멀티캐스트 DNS")와 결합됨DNS-SD일반 서비스 검색 및 로컬 이름 확인 모두에 사용됩니다.
Microsoft는 UPnP 기반을 선호합니다.SSDP, 선호하는 경우를 제외하고WS-디스커버리대신에. 과거에는 NetBIOS를 사용했습니다. 모두 아래에 문서화되어 있습니다.기능 제공자.
(일부 프로그램에서는 "나 여기 있어요!"라는 UDP 데이터그램을 자신만의 사용자 정의 형식으로 브로드캐스팅하기로 결정합니다. 이는 제대로 작동하지 않습니다.)
일반적으로 해당 검색 프로토콜을 사용하여 특정 서비스를 조회하기 위한 OS 제공 API와 타사 라이브러리가 모두 있습니다.
무언가를 직접 구현하려는 경우 각 OS는 다음 기능도 제공합니다.멀티캐스트 그룹에 가입하다누구든지 해당 그룹에 보내는 메시지를 받을 수 있습니다.IP 멀티캐스트기본적으로 브로드캐스트 도메인 내에서 작동해야 하지만 종종라우터를 통과하도록 구성됨.