# Pair-à-pair

Le pair-à-pair ou système pair à pair (en anglais peer-to-peer, souvent abrégé « P2P ») est un modèle d'échange en réseau où chaque entité est à la fois client et serveur, contrairement au modèle client-serveur. Les termes « pair », « nœud » et « utilisateur » sont généralement utilisés pour désigner les entités composant un tel système. Un système pair à pair peut être partiellement centralisé (une partie de l'échange passe par un serveur central intermédiaire) ou totalement décentralisé (les connexions se font entre participants sans infrastructure particulière). Il peut servir entre autres au partage de fichier, au calcul distribué ou à la communication.

## Principe général

La particularité des architectures pair-à-pair réside dans le fait que les échanges peuvent se faire directement entre deux ordinateurs connectés au système, sans transiter par un serveur central. Il permet ainsi à tous les ordinateurs de jouer directement le rôle de client et de serveur (voir client-serveur). On appelle souvent nœud les postes connectés par un protocole réseau pair à pair. Un réseau pair à pair est alors l'interconnexion de nœuds créés à un moment donné selon le protocole pair-à-pair choisi, tel Internet ou le Bluetooth.
Les systèmes pair à pair permettent à plusieurs ordinateurs de communiquer via un réseau, en y partageant simplement des objets – des fichiers le plus souvent, mais également des flux multimédias continus (streaming), le calcul réparti, un service comme la téléphonie sur IP. L'arrivée et le départ des nœuds sont dynamiques : les nœuds ne sont pas définis une fois pour toutes au démarrage du système.
L'utilisation d'un système pair à pair nécessite pour chaque nœud l'utilisation d'un logiciel particulier. Ce logiciel, qui remplit alors à la fois les fonctions de client et de serveur, est parfois appelé servent (de la contraction de « serveur » et de « client », due à Gnutella), ou plus communément, mais de façon réductrice, « client ». C'est là l'origine du terme pair (de l'anglais peer) que l'on trouve dans pair-à-pair : les communications et les échanges se font entre des nœuds qui ont la même responsabilité dans le système.
En particulier, certains systèmes pair à pair rendent les objets d'autant plus accessibles qu'ils sont populaires, et donc répliqués sur un grand nombre de nœuds. Cela permet alors, pour ces objets populaires (par exemple un fichier partagé un grand nombre de fois), de diminuer la charge en nombre de requêtes de recherches reçues par les nœuds du système, ce qui facilite l'augmentation du nombre de nœuds participants et donc d'objets accessibles dans le réseau. C'est ce qu'on appelle le passage à l'échelle. Le modèle pair à pair va bien plus loin que les applications de partage de fichiers : il permet de décentraliser des services et de mettre à disposition des ressources dans un réseau, nommées objets. Tout nœud d'un réseau pair à pair peut alors proposer des objets et en obtenir via ce réseau.
Les systèmes pair à pair permettent donc de faciliter le partage d'informations. L'absence d'infrastructure stable dans ces systèmes rend plus difficile la censure ou les attaques légales ou pirates. En effet, un système pair à pair est composé d'un réseau dynamique de nœuds participants, c'est-à-dire qu'ils arrivent et repartent tout en permettant au réseau de rester fonctionnel. Il faudrait donc cibler en même temps une part importante de ces nœuds pour empêcher les autres nœuds participants de maintenir l'interconnexion entre les nœuds. La part de nœuds à cibler dépend du protocole utilisé. Ces atouts font des systèmes pair à pair des outils de choix pour décentraliser des services qui doivent être dynamiques, assurer la disponibilité des ressources tout en permettant de faibles coûts d'entretien. Toutefois, ces systèmes sont plus complexes à concevoir que les systèmes client-serveur.
Par ailleurs, des usages de systèmes pair à pair font apparaître que certains nœuds sont bien plus utilisés que les autres, soit parce qu'ils pourvoient une part importante des ressources partagées, soit parce qu'ils participent à une part importante des requêtes d'échanges de données. Leur déconnexion rendrait donc le système pair à pair moins efficace.
Des propositions utilisant le modèle pair à pair ont été faites pour ne plus utiliser de serveurs, entre autres pour :
* le multijoueurs local sur les consoles Nintendo 3DS ;
* les DNS (Distributed DNS) ;
* la mise à disposition de logiciels (distributions Linux comme la Mandriva, le système de mises à jour Microsoft Avalanche, World of Warcraft, etc.) ;
* diffuser des contenus multimédias (streaming) ;
* les logiciels de messagerie en ligne (Tox) ;
* la téléphonie (les premières versions de Skype).
L'application la plus connue actuellement reste cependant le partage de fichiers par le biais de protocoles comme Bittorent, eDonkey, FastTrack (KaZaA), etc.
Toutefois, les systèmes pair à pair décentralisés ont plus de difficultés que les systèmes client-serveur pour diffuser l'information et coordonner l'interconnexion des nœuds, donc assurer des faibles délais aux requêtes. C'est pourquoi sont apparus des systèmes pair à pair qui imposent une structure entre les nœuds connectés, afin de garantir des délais de communication faibles : il s'agit des systèmes décentralisés structurés. Ces systèmes s'inspirent de structures de graphes pour interconnecter les nœuds. Ils ont ainsi pu se passer de serveurs pour mieux répartir la charge entre les nœuds et optimiser ainsi :
* le trafic de contrôle reçu et envoyé par chaque nœud, ce qui revient à limiter le nombre de voisins auquel est connecté chaque nœud ;
* le nombre de requêtes transmises à un nœud ;
* la répartition de responsabilité pour l'accès aux objets partagés dans le réseau.
Enfin, ces systèmes permettent souvent d'utiliser un routage proche de celui du graphe dont ils s'inspirent, diminuant ainsi le nombre de messages de requêtes transitant dans le réseau.
Le pair-à-pair est distinct de la notion de liaison point à point (Point-to-Point en anglais) et du protocole point à point (PPP).

## Applications

Le pair-à-pair ne s'est pas fait connaître en tant que principe, mais par les applications qui ont pu émerger selon ce nouveau modèle de réseau.

### Partage de fichiers

L'application la plus répandue du pair-à-pair est le partage de fichiers. L'avènement des connexions à Internet à haut débit (ADSL notamment) sans limites de temps a contribué à cet essor. Le principe réparti de ces systèmes permet de tirer parti de l'asymétrie des connexions, et donc de télécharger à débit important un fichier à partir de plusieurs sources à débit limité.
Chaque internaute est un pair du réseau et les ressources sont des fichiers. Chacun peut donc partager ses fichiers et télécharger les fichiers des autres. Ces systèmes s'avèrent très efficaces, y compris quand il s'agit d'échanger de gros volumes de données.
Parmi les applications les plus utilisées, on peut distinguer BitTorrent, µTorrent et eMule...
Les protocoles P2P peuvent aussi être utilisés pour le partage de mises à jour de logiciels (distribuées sous forme de fichiers de mises à jour), par exemple le service de mise à jour de Windows 10 pouvant récupérer et distribuer une mise à jour via le réseau local et via internet permettant de limiter le débit de données nécessaire à la distribution des mises à jour depuis les serveurs Microsoft. Le client Steam dispose d'une fonctionnalité similaire, permettant de récupérer une mise à jour depuis un autre client connecté sur le réseau local, limitant le volume de données échangées sur la connexion internet.

### Synchronisation des données

Dans le cadre des grands systèmes informatisés, la synchronisation entre les différents serveurs peut-être problématique le flux d'information pouvant être trop important pour pouvoir être géré par un serveur unique. Certains systèmes procèdent à une synchronisation de proche en proche entre les différentes nodes, par exemple le logiciel "Location Aware Delivery", utilisé en interne par Meta (ex Facebook), permettant la synchronisation des fichiers de configuration serveurs directement d'un serveur à un autre, sans devoir être téléchargés depuis un serveur central.

### Calcul distribué

Le P2P ne doit pas être confondu avec le calcul distribué : Un réseau de calcul distribué n'a pas nécessairement recours à un protocole P2P.
Le calcul distribuée est destiné au grand public ou à la recherche: il s'agit de la possibilité pour les internautes de mettre à disposition une partie de leur puissance de calcul. Par définition, on pourra parler de réseau de calcul distribué P2P si et seulement si, dans le cadre du calcul effectué, les clients ont la possibilité de communiquer directement entre eux (par exemple pour le partage d'un résultat ou la soumission d'un nouveau calcul), sans passer par un serveur dédié. Ce mode de fonctionnement est théorique, il n'existe pas d'application grand publique connue de réseau de calcul distribué usant d'une topologie P2P.

#### Exemple de confusion : Le projet BOINC

Les réseaux de calcul distribués les plus connus comme SETI@home (recherche extra-terrestre), Folding@Home (repliement des protéines) du projet BOINC font usage de la contribution des machines des internautes, limitant les coûts pour le laboratoire. Toutefois les clients ne communiquent jamais entre eux, leur contribution consistant à recevoir un morceau de calcul à effectuer depuis un serveur central appartenant au projet, pour renvoyer le résultat du calcul à ce serveur. Le serveur se chargera d'analyser le résultat du calcul, de planifier, puis de renvoyer un nouveau calcul au client. Il s'agit d'une relation purement client–serveur, cela ne relève donc pas du P2P.

### Blockchain

Dans le cadre du minage de cryptomonnaie, un réseau de machines va se voir attribuer un défi afin de valider la création d'un nouveau bloc de la blockchain. Par exemple dans le cadre de la preuve de travail, il s'agira de résoudre un calcul complexe dont la présentation du résultat permettra aux pairs de prouver une dépense d'énergie et se voir autoriser la création d'un nouveau bloc. Il n'y a pas de serveur dédié à l'émission ni à la réception du défi, les échanges ont tous lieu entre pairs.

### Autres applications

Le concept de pair à pair est également décliné dans d'autres logiciels tels que TeamViewer, Jami. Depuis son rachat par Microsoft, le logiciel de téléphonie Skype ne l'utilise plus.

## Architectures logicielles

Les serveurs pair à pair fonctionnent dans la quasi-totalité des cas en mode synchrone : le transfert d'information est limité aux éléments connectés en même temps au réseau.
Ils peuvent utiliser le protocole TCP comme couche de transport des données (il fonctionne en duplex, la réception des données est donc confirmée et leur intégrité est assurée).
En revanche, certaines utilisations comme le continu (streaming) nécessitent l'emploi d'un protocole plus léger et plus rapide, comme UDP, bien que moins fiable, quitte à assurer elles-mêmes l'intégrité des données transmises. UDP est aussi le protocole le plus utilisé pour transmettre des messages entre serveurs dans les systèmes en partie centralisés.
Les systèmes pair à pair se répartissent en plusieurs grandes catégories, selon leur organisation.

### Architecture centralisée

Dans cette architecture, un client (un logiciel utilisé par les membres) se connecte à un serveur qui gère les partages, la recherche, l'insertion d'informations, bien que celles-ci transitent directement d'un utilisateur à l'autre.
De telles architectures ne sont pas totalement pair à pair, car un serveur central intervient dans le processus, mais les transferts de fichiers sont effectivement répartis, la décentralisation n'est donc que partielle. C'est la solution la plus fragile, puisque la centralisation de serveurs est indispensable au réseau. Ainsi, si ce point central disparaît, tout le réseau s'effondre. Cette disparition peut arriver à la suite d'une action en justice, comme ce fut le cas avec Napster et Audiogalaxy, d'une surcharge de requêtes accidentelle ou à la suite d'une attaque informatique.

### Architecture décentralisée

Une telle architecture permet de résister à de telles attaques, puisque le logiciel client ne se connecte pas à un unique serveur, mais à plusieurs. Le système est ainsi plus robuste, mais la recherche d'informations est plus difficile. Elle peut s'effectuer dans des systèmes décentralisés non structurés comme Gnutella, où la recherche nécessite un nombre de messages élevé, proportionnel au nombre d'utilisateurs du réseau (et exponentiel suivant la profondeur de recherche). Dans les systèmes décentralisés structurés, une organisation de connexion est maintenue entre les nœuds. La plupart sont basées sur les tables de hachage distribuées, permettant de réaliser des recherches en un nombre de messages croissant de façon logarithmique avec le nombre d'utilisateurs du réseau, comme CAN, Chord, Freenet, GNUnet, I2P, Tapestry, Pastry et Symphony.
Une autre solution a été envisagée, consistant en l'utilisation de « super-nœuds ». Ces éléments du réseau sont idéalement choisis en fonction de leur puissance de calcul et de leur bande passante, afin de réaliser des fonctions utiles au système, comme l'indexation des informations et le rôle d'intermédiaire dans les requêtes. Cette solution, rendant le système un peu moins robuste (les cibles à « attaquer » dans le réseau pour que le système devienne inopérant sont moins nombreuses que dans un système de type Gnutella, par exemple), est employée dans les systèmes FastTrack, comme KaZaA. Les nœuds du réseau peuvent alors devenir super-nœuds et vice-versa, selon les besoins du système ou de leur propre choix.
De la même façon, le système eDonkey2000 utilise des serveurs fixes, plus vulnérables, car moins nombreux et moins souple que les super-nœuds FastTrack.

### Protocoles réseaux

Les connexions se font par TCP/IP, le plus utilisé sur internet, qui intègre un contrôle de réception des données, ou par UDP lorsque l'application choisit de contrôler elle-même la bonne réception des données.
Plusieurs systèmes pair à pair sont proposés sous forme de réseau sous-jacents. Les applications de l'utilisateur final peuvent alors fonctionner à l'aide de tels réseaux. Parmi eux, on trouve Mnet, Chord, Tapestry, Freenet, I2P (utilisé par iMule), Tor ou Koorde (en).

## Sécurité

La plupart des questions de sécurité dans les réseaux P2P sont dues au partage de fichier. Les utilisateurs recherchent :
* l'anonymat (afin de protéger sa vie privée ou d'éviter d'éventuelles poursuites judiciaires) ;
* le brouillage du protocole (afin d'éviter les filtrages du fournisseur d'accès internet) ;
* le chiffrement (« on peut savoir qui je suis, mais pas ce que je télécharge »).
Afin d'assurer l'anonymat des utilisateurs, un ou plusieurs de ces concepts sont mis en pratique dans des applications pair à pair :

### Routage aléatoire

Les requêtes passent par plusieurs nœuds afin de rendre leur traçage difficile. Ces nœuds faisant transiter les informations sont d'autres utilisateurs du réseau, différents fragments d'un même fichier passent donc par différentes machines, et y sont parfois recopiés, selon le protocole (mécanisme de cache), avant de parvenir à l'ordinateur final ayant demandé le téléchargement.
Ce mécanisme de cache est souvent utilisé conjointement avec le chiffrement des données de façon que les intermédiaires ne puissent pas voir ce qui transite.
Par exemple ce procédé est mis en œuvre dans Freenet, I2P, Tor, StealthNet.

### Réseaux de confiance : « Ami à ami »

Par exemple ce procédé est mis en œuvre dans RetroShare, GNUnet, OneSwarm, Freenet, et le logiciel abandonné : WASTE.

### Chiffrement des échanges

Par exemple ce procédé est mis en œuvre dans Cjdns, Freenet, I2P, RetroShare et ces logiciels abandonnés : Ants, stealthNet.

### Anonymat

Associant le chiffrement des échanges avec le routage aléatoire, certains logiciels visent l'anonymat des activités faites dans leur réseau. Certains de ces logiciels proposent parfois la technologie « ami à ami ».

## Évolution
### Décentralisation

On peut constater, dans l'évolution des technologies pair à pair une tendance à toujours plus de décentralisation. Illustration avec les logiciels de partage de fichiers connus :
| Technologie | Ressources | Recherche de ressources | Recherche de pairs | Multi-source |
| Architecture client-serveur | centralisé | centralisé | centralisé | non |
| Napster (1999) | décentralisé | centralisé | centralisé | non |
| Direct Connect (1999) | décentralisé | décentralisé | centralisé | non |
| eDonkey (2003) | décentralisé | semi-centralisé | semi-centralisé | oui |
| Kademlia (2002) | décentralisé | décentralisé | décentralisé | oui |

### Instantanéité d'accès à la ressource

Un des avantages de l'accès client-serveur est l'instantanéité avec laquelle on obtient la ressource. C'est pourquoi le téléchargement par http, ftp ou via les newsgroups sont encore utilisés bien qu'étant des systèmes typiquement client-serveur.
L'usage des logiciels de transfert de fichiers, de l'époque de Napster à celle de BitTorrent, est d'attendre l'arrivée du fichier de plusieurs heures à plusieurs jours. Plusieurs initiatives tentent de combler cette lacune. C'est par exemple le cas de Freenet, mais aussi de Wuala qui veut rendre l'accès aux fichiers stockés en réseau aussi rapide que l'accès à un fichier local.

### Optimisation par proximité géographique

Proactive network provider participation for P2P, ou P4P, est un groupe de travail qui vise au développement de technologies permettant d'optimiser les échanges pair à pair. Ils partent du principe que des pairs proches géographiquement sont plus à même d'échanger des données.
Remarque : Le P3P, malgré son nom, n'a rien à voir avec le P2P et n'en est pas une évolution. Il s'agit de la Platform for Privacy Preferences, un projet du W3C qui vise à améliorer la sécurité des échanges sur le Web.

### Évolution de la recherche scientifique

Le pair-à-pair et, de façon plus générale, les architectures distribuées sont le sujet de nombreuses recherches universitaires en informatique.

## Implications sociales
### Incitation au partage et à la coopération

La coopération au sein d'une communauté est la clé du succès des systèmes de P2P. Ces systèmes atteignent en effet leur plein potentiel lorsqu'un grand nombre de nœuds proposent des ressources. Les réseaux P2P contiennent cependant un grand nombre d'utilisateurs qui se servent des ressources partagées sans en partager en retour. Cette manière de pratiquer le P2P peut avoir un impact profond sur le réseau et dans certains cas, causer l'effondrement de la communauté. Depuis, plusieurs mécanismes d'incitation ont été mis en place afin d'encourager les utilisateurs à partager autant qu'ils consomment.

### Considérations économiques

La facilité d'utilisation du P2P fait de cette technologie le vecteur principal du streaming vidéo illégal, utilisé également pour la radiodiffusion d'évènements sportifs en direct. Au Royaume-Uni, la Premier League exprime à plusieurs reprises ses préoccupations concernant le streaming illégal d’événements sportifs. Aussi, en 2014, le pays arrête l'une des têtes d'un réseau de sites de streaming sportif illégal en P2P qui aurait coûté 10 millions de livres à la télévision britannique.

## Propriété intellectuelle et partage illégal

Bien que les réseaux P2P puissent être utilisés à des fins légitimes, ils sont fréquemment impliqués dans des affaires de partages illégaux de matériels protégés. Le P2P implique le transfert de données d'un utilisateur à un autre sans utiliser de serveur intermédiaire. Les sociétés de développement d'applications P2P ont été impliquées dans des affaires juridiques, principalement aux États-Unis, sur des questions de droits d'auteur.
Les deux principaux cas sont Grokster contre RIAA et MGM Studios Inc. contre Grokster. Dans les deux affaires, la technologie de partage de fichiers est jugée légale tant que les développeurs gardent la capacité d'empêcher le partage de contenu sous copyright. Pour établir la responsabilité pénale pour la violation du droit d'auteur sur les systèmes P2P, le gouvernement doit prouver que la défenderesse a violé le droit d'auteur à des fins personnelles ou financières.
Il existe des exceptions légales permettant le téléchargement de documents sans l'autorisation de leurs auteurs. Ce sont généralement des rapports d'actualité ou des travaux de recherches et des travaux scientifiques.
Des controverses se sont développées quant à la légitimité de l'utilisation du P2P au regard de la sécurité nationale et publique. Quand un fichier est téléchargé via un réseau P2P, il est impossible de savoir qui a créé le fichier et quels utilisateurs sont connectés au réseau à un moment donné. La fiabilité des sources est une menace pour la sécurité des systèmes P2P.

## Terminologie

Pour traduire « peer-to-peer » en français, « poste-à-poste » était la recommandation officielle faite en France par la Commission générale de terminologie et de néologie. Elle reste recommandée au Québec, par l'Office québécois de la langue française (OQLF), comme synonyme de l'expression « pair-à-pair ».
D'autre part, l'OQLF recommande les traits d'union pour « poste-à-poste » et « pair-à-pair » lorsqu'ils sont utilisés comme substantifs, mais pas lorsqu'ils ont une valeur adjectivale ; l'organisme rappelle également que ces expressions sont invariables.
En outre, le vocabulaire lié à cette notion s'est nécessairement étendu au-delà de concepts informatiques préexistants :
* le terme de système pair à pair désigne un ensemble constitué d'utilisateurs (en nombre pas forcément défini ni fixe, mais plutôt de manière générale) du protocole qui leur permet de communiquer (Gnutella, BitTorrent, CAN, etc.) et du fonctionnement du protocole entre ces machines ;
* le terme de réseau pair à pair désigne les machines et leur interconnexion à un moment donné, avec un nombre défini de machines / utilisateurs ;
* le terme de nœud permet de désigner le logiciel présent sur une machine, donc souvent un utilisateur (mais éventuellement plusieurs) ;
* le terme de lien désigne une connexion (souvent TCP) entre deux nœuds ;
* le terme d'objet désigne ce qui est partagé dans un système pair à pair.