Peer-to-peer, abbreviato anche come P2P, (dall'inglese: rete paritaria/paritetica), nell'ambito delle telecomunicazioni, indica un modello di architettura di una rete informatica a livello logico in cui i nodi non sono staticamente suddivisi tra client e server, ma sono anche disposti sotto forma di nodi equivalenti o paritari (in inglese: peer), vale a dire che possono fungere al contempo sia da client che da server nei confronti degli altri nodi terminali della rete (chiamati host).

In una rete peer-to-peer pura e strettamente intesa, tutti i computer hanno gli stessi diritti e possono essere quindi sia client che server di altri computer. Nelle moderne reti P2P, tuttavia, i computer che partecipano alla rete sono organizzati suddividendosi in gruppi diversi a seconda degli specifici compiti di cui si occupano. Mediante questa configurazione, qualsiasi nodo è in grado di avviare o completare una transazione. I nodi equivalenti possono differire nella configurazione locale, velocità di elaborazione, ampiezza di banda e quantità di dati memorizzati. Esempio tipico di P2P è la rete per la condivisione di file (file sharing).

Nella quasi totalità delle moderne architetture peer-to-peer, che di solito sono già implementate come rete overlay su Internet, esiste una sottorete centrale che in genere è costituita dai migliori computer della rete più grande, e che è responsabile dell'organizzazione degli altri computer e della funzionalità di ricerca.

Con la funzione di ricerca (lookup), i Peer della rete possono identificare gli altri peer che sono responsabili di uno specifico ID oggetto. In questo caso, la responsabilità di ogni singolo oggetto è assegnata in modo permanente ad almeno un peer, motivo per cui si parla di overlay strutturato. Con l'operazione di ricerca, i peer possono cercare nella rete gli oggetti che soddisfano determinati criteri (ad esempio, il nome di un o di un amico). Qualora, invece, non vi sia una struttura di assegnazione degli oggetti ai nodi nel sistema P2P, si parla di “overlay non strutturato”. Non appena i peer che detengono gli oggetti ricercati sono stati identificati nel sistema P2P, il file viene trasferito direttamente da questi ultimi (nelle reti di file-sharing), cioè da peer a peer. Esistono diverse strategie di distribuzione che suddividono il file da scaricare in più parti che sono ricomposte nel nodo finale richiedente e che stabiliscono quali parti del file devono essere scaricate da quale peer, ad esempio BitTorrent.

L'opposto del modello peer-to-peer è il modello client-server. Esso prevede che un server offra un servizio a un client utilizzatore. Nelle reti peer-to-peer, questa distribuzione dei ruoli viene annullata. Ogni partecipante è un peer perché può sia utilizzare un servizio che offrirlo a sua volta.

Descrizione Caratteristiche generali Le caratteristiche tipiche, ma non necessariamente, dei sistemi peer-to-peer sono: i peer presentano un elevato grado di eterogeneità in termini di larghezza di banda, potenza di calcolo, tempo di connessione online, latenza, ecc. la disponibilità e la qualità della connessione dei peer non possono essere garantite; i peer offrono servizi e risorse e utilizzano i servizi di altri peer (modello client-server); i servizi e le risorse possono essere scambiati tra tutti i peer partecipanti; i peer formano una rete overlay e quindi forniscono ulteriori funzioni di ricerca; i peer hanno una notevole autonomia (sulla fornitura di risorse); il sistema P2P si auto-organizza; Tutti gli altri sistemi rimangono costantemente intatti e non scalano.

Funzionamento Al giorno d'oggi esistono tre principali tipi di architetture P2P: Il P2P Puro = non ha server centrale e tutti i Peer hanno lo stesso ruolo. Ogni nodo si occupa di individuare i Peer, le risorse e la condivisione di queste. Il P2P con Discovery Server = possiede un server centrale chiamato, appunto, Discovery, il quale utente (ovvero il Peer che in questo caso funge da client) comunica la propria esistenza al momento dell'avvio e riceve in risposta una lista con gli altri nomi della rete. Con essa l'utente può interrogare qualunque partecipante per conoscerne i contenuti. Quindi, quando l'utente necessita di un contenuto, prima contatta il server individualmente, poi inoltra la richiesta. Il P2P con Discovery e Lookup Server = in questa architettura l'utente non solo si registra presso il Discovery Server, ma spedisce anche una lista dei propri contenuti ad intervalli regolari. Così, quando la richiesta successiva viene mandata, il server fornisce una lista dei partecipanti alla rete insieme ai relativi contenuti, tagliando richieste infruttuose e ottimizzando i tempi.

Come fanno i nodi a vedersi? Per quanto riguarda un'architettura di tipo P2P Puro, non essendoci un server centrale in grado di far connettere tra di loro i diversi nodi, viene solitamente integrata una Overlay network virtuale (ovvero una "rete sovrapposta" virtuale), con la quale i nodi formano una sottorete rispetto alla rete fisica principale. L'Overlay è utilizzata principalmente per indicizzare e mappare i nodi, in modo da conoscere la topologia della rete.

A seconda di come i nodi sono collegati tra loro e dalla loro distribuzione, è possibile dividere le reti P2P in "strutturate" e "non strutturate".

Una rete strutturata è caratterizzata da una topologia specifica, che assicura che ogni nodo possa efficientemente cercare e trovare una risorsa o nodo anche se dovesse essere particolarmente rara. Per facilitare questo compito, ogni rete strutturata integra una tavola Hash distribuita, all'interno della quale a ogni risorsa corrisponde un codice identificativo univoco. Vengono sfruttate varie tecniche per raggiungere questo scopo: DHT (Tabella di hash distribuita); DOLR (Decentralized object location and routing), che consente di pubblicare generiche risorse; Multicast, che mette a disposizione canali per scambiarsi le informazioni. Comunque, per far sì che il flusso del traffico non incontri ostacoli di sorta, è necessario che ogni nodo conservi un elenco dei nodi "vicini", rispettando criteri molto precisi. Questo può costituire un grosso limite in termini di efficienza, nel caso in cui il network sia caratterizzato da nodi che entrano o escono dalla rete molto frequentemente.

Invece, una rete non strutturata è caratterizzata da un'apparente disorganizzazione ed è formata da nodi che creano collegamenti casuali con altri nodi della rete. Si tratta, dunque, di reti di facile "formazione", che non richiedono il rispetto di parametri particolarmente stringenti. Allo stesso tempo, però, la mancanza di una struttura e un'organizzazione interna, rende particolarmente complesso (e lungo) il compito di cercare file o risorse nel network: la richiesta, infatti, dovrà essere inviata a tutti i nodi che condividono il file. Ciò, ovviamente, genera un gran volume di traffico, senza la certezza di riuscire a individuare la risorse cercata.

JXTA

JXTA (abbreviazione di "juxstapose") fu una iniziativa di Sun Microsystems. Essa si pone come obiettivo quello di fornire una piattaforma di supporto allo sviluppo di applicazioni Peer-to-Peer, progettata per essere assolutamente indipendente dalla piattaforma. JXTA è un insieme di protocolli, indipendenti da ogni linguaggio di programmazione, che permettono ad ogni dispositivo su una rete (PC, PDA, Server) di comunicare e di collaborare alla pari. Esistono implementazioni di JXTA disponibili per quasi tutti gli ambienti di sviluppo (Java, C, C++, Perl, ecc.).

Caratteristiche di JXTA Interoperabilità: La tecnologia JXTA è stata progettata per permettere ai peer di scoprire dei servizi, di scoprire altri peer e di comunicare con loro. Indipendenza dalla Piattaforma: La tecnologia JXTA è stata progettata per essere indipendente da ogni linguaggio di programmazione o protocollo di trasporto.

I protocolli JXTA standardizzano il modo in cui i Peers: Scoprono altri Peers. Si organizzano in peer groups. Annunciano e scoprono servizi di rete. Comunicano tra di loro. Controllano ogni altro.

Architettura JXTA: Platform Layer: questo livello incapsula le primitive minime che sono necessarie ad una rete P2P. Services Layer: servizi di rete come motori di ricerca, file sharing ecc. Application Layer: applicazioni vere e proprie come instant messaging, sistemi di e-mail P2P ecc. Peer: un peer è ogni dispositivo di rete che implementa uno o più protocolli JXTA. Ogni peer opera in maniera indipendente dagli altri ed è univocamente identificato da un peerID. PeerGroups: un peergroup è un insieme di peer che hanno degli interessi comuni. I peers si auto-organizzano in peer-groups. Ogni peer-groups è univocamente identificato da un peer-groupsID. Uso di XML per descrivere le risorse di rete tramite gli Advertisements. Uso delle Pipe per la comunicazione fra peer scavalcando così il DNS. Uno schema uniforme di indirizzamento tramite i peer IDs.

JXTA definisce inoltre una serie di Peer group service: Discovery Service: è usato per la scoperta di risorse (peer, peergroup, pipe, ecc.). Membership Service: è usato per accettare o respingere una nuova applicazione per un peer group. Access Service: è utilizzato per convalidare le richieste fatte da un peer ad un altro peer.

Vantaggi e svantaggi Vantaggi e svantaggi sono relativi al tipo di ambiente in cui si decide di installare questo tipo di rete, ma sicuramente si deve tenere presente che: Non si deve acquistare un server con potenzialità elevate e quindi non se ne deve sostenere il costo, ma ogni computer deve avere i requisiti per sostenere l'utente in locale e in rete, ma anche gli altri utenti che desiderano accedere alle risorse di questo in remoto; Ogni utente condivide localmente le proprie risorse ed è amministratore del proprio client-server. Questo da un lato può essere positivo per una questione di "indipendenza", ma dall'altro richiede delle competenze ad ogni utente, soprattutto per quel che concerne la protezione; La velocità media di trasmissione dei dati è molto più elevata di una classica rete con sistema Server / Client, dal momento che l'informazione richiesta da un Client può essere reperita da numerosi Client connessi in modo paritario (ossia "peer"), anziché da un unico server (questo tipo di condivisione diventa tanto più efficace tanti più sono i Client connessi, in antitesi con la rete tradizionale Server/Client, dove un elevato numero di Client connessi riduce la velocità di trasmissione dati per utente); La sicurezza degli accessi ai client viene gestita localmente su ogni macchina e non centralizzata, questo significa che una rete basata su utenti deve avere lo stesso archivio reimpostato in ogni client. Un'architettura di rete di questo genere è caratterizzata da un'elevata scalabilità e capacità di "autorigenerazione". Nel caso in cui un nodo smetta di funzionare – o, semplicemente, si disconnette dal network – la rete continuerà a funzionare senza grossi problemi: lo scambio di dati o la ricerca di risorse proseguirà lungo strade alternative rispetto a quella che transitava attraverso il nodo non più disponibile. Si aggira, in questo modo, il collo di bottiglia che, in alcuni casi, è rappresentato dall'affidarsi al funzionamento di un unico server.

Applicazioni

Il termine può essere tecnicamente applicato a qualsiasi tipo di tecnologia di rete e di applicazioni che utilizzano questo modello, come per esempio il protocollo Nntp utilizzato per il trasferimento delle notizie Usenet, ARPANET, applets java, live chat decentralizzate o le BBS di Fido Net. Il termine frequentemente viene riferito alle reti di file sharing (condivisione file, per questo definita Peer to peer filesharing o P2P-Filesharing) come Gnutella, FastTrack, e l'ormai defunto Napster che forniscono, o per quanto riguarda Napster forniva, il libero scambio (e qualche volta anonimo) di file tra i computer connessi a Internet.