Come progettare un'applicazione P2P

8

[Spostati qui al suggerimento di utenti SO (10k SO +) ]

Mi piacerebbe sviluppare un'applicazione peer-to-peer. Mentre ho molta esperienza nelle app LOB, sono nuovo nell'arena P2P.

Ho una vaga idea di come dovrebbero funzionare le cose, ma ho bisogno di altri dettagli per completare la mia comprensione.

Quello che so (credo) devo fare:

  • Una parte significativa dei client deve abilitare le connessioni in entrata (regole di uPnP / NAT)
  • I nodi dovrebbero condividere altri nodi conosciuti per fornire resilienza se uno specifico nodo scende
  • È richiesta una qualche forma di sincronizzazione / ricerca del percorso per l'invio di dati tra client arbitrari
  • Forse qualche sniffing di risorse per distinguere tra client "stupidi" e "super nodi" più potenti per gestire la sincronizzazione / condivisione degli elenchi di nodi e magari i messaggi di inoltro
  • I client senza supporto in entrata dovrebbero tenere aperta una connessione in uscita attraverso la quale possono ricevere informazioni sui nodi per connettersi a

In breve, spero di offrire (in un primo momento) un servizio di chat / messaggistica che non si basa su una connessione a un particolare server centrale. Mentre immagino che avrò bisogno di fornire un numero di "supernodi" centralizzati per iniziare (o dopo aggiornamenti significativi), questi dovrebbero essere opzionali una volta stabilita una rete P2P funzionale.

Riesco a vedere un gran numero di problemi e non so come affrontarli. Principalmente come ...

  • Autentica gli utenti ad altri nodi senza un'autorità centrale per verificare
  • Coordina quali nodi conoscono quali altri nodi (numero min-max / per latenza / ???)
  • Permetti a un determinato utente di determinare se un altro utente (o nodo) è online
  • Gestire una situazione in cui 2 gruppi di nodi sono fisicamente disconnessi (airgapped) e come eseguire la risincronizzazione alla riconnessione dei gruppi
  • Ecc ecc

So che questa è una domanda abbastanza aperta, quindi, mentre i modelli di design di alto livello sarebbero apprezzati, quello che cerco davvero è una guida decente su come gli altri hanno gestito questi problemi (e quelli che ho " t considerato ancora).

    
posta Basic 14.08.2013 - 01:13
fonte

1 risposta

5
  1. Progettare un protocollo e creare un'applicazione su di esso è un progetto enorme. Prendi il più possibile dai protocolli esistenti.
  2. I protocolli più rilevanti (oltre a skype, che è un sistema peer-to-peer, ma il protocollo è segreto) sono quelli che forniscono risorse sulla rete peer-to-peer che significa in particolare la parte di TOR fornendo il dominio .onion e freenet .
  3. La maggior parte delle cose che hai elencato in "need to do" sono gestite da freenet e molte anche in TOR.
  4. L'identità degli utenti deve essere crittografica. L'associazione delle identità di parole reali con le chiavi crittografiche richiede una qualche forma di web-of-trust come in PGP / GPG
  5. Un motivo importante per l'utilizzo della messaggistica peer-to-peer è la privacy. La messaggistica off-the-record è fondamentalmente obbligatoria (specifica come deve funzionare l'autenticazione).
  6. Anche la presenza deve essere off-the-record, fondamentalmente un tipo speciale di messaggio.
  7. Le disconnessioni non sono un problema speciale oltre alla tolleranza di errore generale. Per ogni lato sembra che gli altri nodi falliscano e si uniscano di nuovo.
  8. Potresti voler utilizzare il protocollo come segnalazione per alcuni protocolli di streaming, probabilmente sRTP . Quel protocollo gestisce NAT traversal, quindi puoi clonare il meccanismo per il protocollo p2p stesso.
risposta data 14.08.2013 - 13:21
fonte

Leggi altre domande sui tag