/ / Introducción a la creación de redes / programación tipo p2p - c ++, networking, p2p

Comenzando con el tipo de red / programación p2p - c ++, networking, p2p

Estoy aprendiendo C ++ (como en, estoy instalando VisualStudio ahora, y estoy sosteniendo el libro de Horton en mi mano), y mi razón para hacerlo es que quiero escribir un programa cliente / servidor tipo p2p que permita a los usuarios transmitir video desde un dispositivo sin necesidad de reenvío de puertos (y ahorre mucho tiempo en llamadas de soporte técnico).

Quiero que el usuario registre el dispositivo con elservidor doméstico a través del menú del dispositivo (los ingenieros se encargarán de eso) y luego en una PC, inicie sesión en un cliente y agregue el dispositivo a una proverbial "lista de amigos" de dispositivos usando la contraseña que usaron en la máquina. Luego, en cualquier momento, podrían abrir el dispositivo y controlarlo a través de la web sin necesidad de reenvío de puertos.

Algo así como funciona Skype, supongo. Los usuarios pueden transmitir audio / video entre ellos sin conocer la dirección IP de cada uno ni reenviar ningún puerto.

¿Alguien puede darme una visión general de cómoeso funcionará, y las consideraciones de red que tendré que tener en cuenta al programar el servidor principal y el cliente. Ni siquiera sé por dónde empezar ... No necesito ayuda con la programación, solo cómo se verá la infraestructura de comunicación. ¿Cómo descubre un cliente un dispositivo en una red p2p y luego se comunica con él, sin conocer de antemano la dirección IP, o sin tener ningún puerto para la información o comandos que ingresan a la red remota para ser enrutados al dispositivo?

He estado leyendo sobre las redes p2p, y entiendo la idea básica de la arquitectura p2p, pero no la teoría y el método real de comunicación a través de p2p.

Respuestas

0 para la respuesta № 1

¿Cómo descubre un cliente un dispositivo en un p2p?red y luego comunicarse con ella, sin saber la dirección IP de antemano, o sin tener ningún puerto para la información o comandos que ingresan a la red remota para ser enrutados al dispositivo?

No puede crear una conexión IP p2p enInternet sin saber de antemano la dirección IP o sin tener algún servidor conocido para conectarse para preguntar. Es decir. un lado debe registrar de manera proactiva su propia dirección de servidor y número de puerto con algún tipo de servidor que el otro lado consulta.


0 para la respuesta № 2

Si sus dispositivos están limitados a trabajar dentro de una sola red, puede usar redes de configuración cero para evitar la comunicación a través del servidor. DNS de multidifusión podría ser una buena opción para descubrir todos los dispositivos o servicios dentro de la red.

Si desea que los dispositivos funcionen a través de InternetHarás tu vida más difícil. Supongamos que su red va a ser pequeña y, por lo tanto, desea que cada dispositivo se conozca entre sí, para que pueda transmitir video de cada uno a cada uno. Puede pensar en un componente centralizado que realice un seguimiento de todos los dispositivos y esté dispuesto a comparta esta información con otros. Puede ser un simple servidor http, al que puede consultar las direcciones de todos los demás dispositivos. Cada consulta registrará automáticamente un dispositivo de consulta y todos los demás dispositivos podrán descubrirlo una vez que soliciten el servidor.

Esto es básicamente cómo funciona el rastreador de BitTorrent. Sin embargo, con una limitación: solo los pares que permiten conexiones entrantes se mantienen en la lista. Tiene sentido, ya que el conocimiento sobre un par detrás de un NAT es bastante inútil, ya que de todos modos no se puede alcanzar. Solo puede esperar que consulte al rastreador y lo descubra.

Ahora, si dos pares están detrás del NAT, no estáncapaces de llegar el uno al otro. Al menos en los casos en que el protocolo P2P no es demasiado sofisticado. BitTorrent no permitiría esto, mientras que Skype sí. Se podría resolver transmitiendo datos a través de uno de los dispositivos con IP pública o mediante algún servidor dedicado (este último probablemente sea peor porque es menos escalable).

Me detendré ahora ... Hay muchos problemas con el diseño de dicho protocolo a través de Internet y depende de qué exactamente necesitas. Entonces, ¿lo necesita para funcionar a través de Internet o solo dentro de la red local? Me complace discutirlo más profundamente si proporciona más detalles.