un po' di tempo fa mi ero interessato pure io alla tecnologia p2p, provo a risponderti sperando di non dire cose sbagliate, infine aggiungo una domanda rivolta a chi è più esperto di me.
generalmente vi è un server che può essere contattato dai vari utenti del servizio di chat.
questo server "traccia" i vari utenti connessi.
una connessione può avvenire in questo modo:

-Utente1 contatta il server centrale, in questo istante si comporta come Client
-il server riceve le informazioni su questo utente (indirizzo ip etc etc) e le salva
-Utente1 chiede al server di rintracciare Utente2
-il server gli invia le informazioni relative all'Utente2, come l'indirizzo ip a cui contattarlo
-la connessione tra l'utente1 e il server può ora momentaneamente chiudersi (ogni tanto si ricollegherà con esso giusto per aggiornare le proprie informazioni e quelle dell'utente2)
-Utente1 chiede di collegarsi all'Utente2. Utente 2 si comporta ora come Server
-La comunicazione può avvenire

in linee generali il tutto avviene così
Naturalmente il server centrale serve perchè i vari utenti molto probabilmente hanno un ip dinamico che quindi li rende impossibili da rintracciare altrimenti.

Ne approfitto allora per fare una mia considerazione: Nel caso di connessioni nattate come le vecchie connessioni fastweb, in cui uno stesso ip viene assegnato ad un gruppo di abitazioni (ad esempio) e poi ogni connessione interna ha un ip "tradotto" dal nat, può funzionare tale sistema P2P? non appena un Utente vuole contattarti, con l'ip che il server gli fornisce è in grado di rintracciarti?
so che questo problema è molto frequente nelle connessioni tcp/ip