Cómo diseñar una aplicación P2P

8

[Se movió aquí en la sugerencia de usuarios de SO (10k SO +) ]

Me gustaría desarrollar una aplicación de igual a igual. Si bien tengo mucha experiencia en aplicaciones de LOB, soy nuevo en la arena P2P.

Tengo una idea aproximada de cómo deberían funcionar las cosas, pero necesito algunos detalles más para completar mi entendimiento.

Lo que sé (creo) que necesito hacer:

  • Una proporción significativa de clientes necesita habilitar las conexiones entrantes (ala uPnP / reglas de NAT)
  • Los nodos deben compartir otros nodos conocidos para proporcionar resistencia si cualquier nodo en particular se cae
  • Se requiere algún tipo de sincronización / búsqueda de ruta para enviar datos entre clientes arbitrarios
  • Posiblemente, algún recurso de rastreo para diferenciar entre clientes "tontos" y "súper nodos" más potentes para manejar la sincronización / compartición de listas de nodos y tal vez retransmitir mensajes.
  • Los clientes sin soporte de entrada deben mantener abierta una conexión de salida a través de la cual pueden recibir información de los nodos para conectarse

En resumen, espero ofrecer (al principio) un servicio de chat / mensajería que no dependa de una conexión a ningún servidor central en particular. Aunque me imagino que tendré que proporcionar una serie de "supernodos" centralizados para comenzar (o después de actualizaciones importantes), estos deberían ser opcionales una vez que se haya establecido una red P2P funcional.

Puedo ver una gran cantidad de problemas y no sé cómo abordarlos. Principalmente cómo ...

  • Autentique a los usuarios en otros nodos sin una autoridad central para verificar
  • Coordine qué nodos conocen qué otros nodos (número mínimo-máximo / por latencia / ???)
  • Permitir que un usuario determinado determine si otro usuario (o nodo) está en línea
  • Trate con una situación en la que 2 grupos de nodos están físicamente desconectados (con espacio de aire) y cómo volver a sincronizar en la reconexión de los grupos
  • Etc, etc.

Sé que esta es una pregunta bastante abierta, por lo que mientras se aprecian los patrones de diseño de alto nivel, lo que realmente busco es una guía decente sobre cómo otros han manejado estos problemas (y los que no tengo). t considerado aún).

    
pregunta Basic 14.08.2013 - 01:13

1 respuesta

5
  1. Diseñar un protocolo y crear una aplicación en él es un proyecto enorme. Aproveche al máximo los protocolos existentes.
  2. Los protocolos más relevantes (más allá de skype, que es un mensaje de igual a igual, pero su protocolo es secreto) son aquellos que proporcionan recursos a través de una red de igual a igual, lo que significa especialmente la parte de TOR que proporciona el dominio .onion y freenet .
  3. La mayoría de las cosas que enumera en "necesidad de hacer" las maneja freenet y muchas de ellas también en TOR.
  4. La identidad de los usuarios tiene que ser criptográfica. Asociar identidades de palabras reales con las claves criptográficas requiere alguna forma de web-of-trust como en PGP / GPG .
  5. La razón importante para usar la mensajería de igual a igual es la privacidad. Mensajería fuera del registro es básicamente obligatoria (especifica cómo debe funcionar la autenticación).
  6. La presencia también debe estar fuera del registro, básicamente un tipo especial de mensaje.
  7. Las desconexiones no son un problema especial más allá de la tolerancia general a fallas. Para cada lado parece que los otros nodos fallan y se unen nuevamente.
  8. Es posible que desee utilizar el protocolo como señal para algunos protocolos de transmisión, probablemente sRTP . Ese protocolo maneja el cruce de NAT, por lo que puede clonar el mecanismo para el protocolo p2p en sí mismo.
respondido por el Jan Hudec 14.08.2013 - 13:21

Lea otras preguntas en las etiquetas