networking - protocol - Dos computadoras que se encuentran por Internet
protocols network (9)
La mejor forma actual de lograr una red multinodos sin coordinación centralizada es a través del uso de tablas distribuidas de hash . Ese enlace explica un poco y enlaces a varias implementaciones que puede aprovechar.
Dicho esto, todavía necesita que cada máquina se coordine con al menos algunos compañeros. Es solo que no lo necesita para coordinar con un servidor central. Una solución que utilice un servidor central que conozca ambas (todas) las máquinas participantes también funcionará, pero impone restricciones adicionales sobre el anonimato y la escalabilidad, solo recuerde lo que le sucedió a Napster.
Dadas dos computadoras conectadas a Internet que no saben nada el uno del otro de antemano, ¿es posible que una computadora pueda transmitir un mensaje para que la segunda computadora pueda recibirlo y responder?
Sé que UDP transmite exsits, pero creo que generalmente los filtra el ISP antes de que llegue a la verdadera Internet. ¿Es esto cierto?
Necesita un tercero intermedio que ambos conozcan, que pueda distribuir mensajes dirigidos hacia él de forma similar a una transmisión.
No, no puedes transmitir así por internet. Necesitas saber a qué dirección quieres que vayan tus paquetes.
UDP es un callejón sin salida, es solo un protocolo donde el orden en que se reciben los paquetes es menos importante y hay problemas de enrutamiento a través de WANS. Dijo que desea conectar dos computadoras en "Internet", presumiblemente con los puntos finales moviéndose, etc. La única forma es usar un servidor central como registro / directorio. Si cada punto final también es un servicio web o algo así, y registra su dirección IP actual y su nombre periódicamente, el otro punto final puede buscar la dirección IP de la otra utilizando este servicio. (¿podría alojar su propio servidor DNS y codificar su punto final para registrarse en este DNS?)
Uno de los problemas es que, incluso si tiene la dirección IP, ¿cuál es uno o más nodos detrás de un cortafuegos o enrutador NAT? Necesitará alojar un servidor para el tráfico proxy. El mejor ejemplo es SKYPE: mira cómo funciona, está documentado, es muy interesante.
La respuesta simplista podría ser saltar hacia atrás en un servicio existente como messanger, skype, bit torrent, etc.
Simon
Una posible solución para usted es usar un servicio DNS dinámico .
Su aplicación necesitaría saber de antemano qué nombre de host usará el otro host, pero este servicio al menos evitaría el hecho de que usted no sabe exactamente en qué dirección IP está conectada la otra computadora.
Tenga en cuenta que esto no resolverá el posible problema de los firewalls entre los dos hosts que bloquean sus paquetes. La única forma práctica de hacerlo es que ambos hosts abran una conexión de salida a un host central que luego puede retransmitir datos entre ellos.
Una solución para este problema (donde ninguno de sus pares conoce la dirección final del otro) podría depender de los protocolos de mensajería instantánea.
En particular, el protocolo XMPP es extensible, abierto y utilizado por muchos proveedores, como Google Talk. Existen bibliotecas para la mayoría de los lenguajes y tiene el plus de poder trabajar (lentamente y pasando por un servidor de terceros) incluso si ambos hosts están detrás de un NAT-box.
Si la comunicación debe usar otro canal, puede usar XMPP para intercambiar la dirección IP y luego continuar con la ruta de socket estándar (pero si encripta sus mensajes, no debería haber ningún problema incluso al pasar por un servidor de terceros; para ser ciertos, todos los paquetes van a través de enrutadores de terceros que no sean de confianza por lo que debe encriptar de todos modos si tiene datos confidenciales ...).
Espero que esto ayude.
La multidifusión también es una posible solución. Sin duda es factible en una red corporativa
Si las computadoras están ejecutando Windows, consideraría usar PNRP .
Mire el algoritmo de cuerda o pastelería. Es una red de superposición (basada en DHT) que tiene un mecanismo de descubrimiento involucrado. Es un algoritmo de enrutamiento P2P (Peer 2 Peer).