2012-02-06 8 views
7

Estoy desarrollando una aplicación en red que se ejecuta en algunas computadoras diferentes en una LAN. Una de las necesidades principales es que la aplicación mantenga una lista de pares en la LAN con la que se ha comunicado en el pasado, de modo que pueda restaurar sesiones anteriores. La solución ingenua sería recordar la IP y almacenarla en una tabla, pero ¿qué sucede cuando cambia la IP de un par?¿Qué se necesita para que la resolución del nombre de host funcione en un lan?

En su lugar, pensé que almacenaría el nombre de host de los pares por lo que incluso si la IP cambia, todavía se podrá acceder a ellos a través de su nombre de host. (Sé que los nombres de host también pueden cambiar, pero eso es suficiente).

Entonces, ¿mi pregunta es qué es exactamente lo que se necesita para que la resolución del nombre de host funcione en una LAN con clientes mixtos de Windows/Mac/Linux?

+0

Si se trata de una red corporativa, puede registrar su nombre de host con el servidor DNS. Si está en una LAN privada, existen diferentes opciones para usar esta aplicación en una LAN de subred única o en una red que podría segmentarse en dominios de difusión separados. (subredes separadas) ¿Cómo se verá su red? – resmon6

+0

La aplicación se ejecutará en una única subred LAN. Pero se implementará en miles de clientes diferentes dentro de su propia LAN. Así que no puedo hacer suposiciones sobre qué enrutador están usando o qué servicios de red están disponibles. – lms

Respuesta

6

Sin el uso de una autoridad central, la única forma confiable de lograr esto es a través del uso de la resolución del nombre de configuración zer. Esto significa que sin un enrutador de multidifusión solo podrá resolver dinámicamente a los pares en la misma subred que el host de resolución. Puede usar algo como bonjour para mac, netbios o ssdp para windows o avahi para Linux, pero no puede suponer que estos estén habilitados. Es posible que esté pasando por alto algunos protocolos más populares que realizan esta función bien, pero yo personalmente lanzaría un protocolo de resolución de nombre de difusión udp rápido para su aplicación. Echar un vistazo a estos para más ideas:

Zeroconf Name resolution

Universal local network name resolution method without DNS?

http://en.wikipedia.org/wiki/Zero_configuration_networking#Name_resolution

http://en.wikipedia.org/wiki/Broadcast_address#IP_networking

yo escogería un puerto UDP específico para escuchar en (digamos 12.000) y luego, cuando esté listo para resolver los hosts, envíe un paquete udp "hola" a 255.255.255.255 en el puerto 12000 y todos los demás hosts de su red que ejecuten su aplicación deben responder con un paquete que contenga su nombre de host, posiblemente otra información.

Cuestiones relacionadas