Internet est composé d'immenses ressources qui sont potentiellement
utilisables mais souvent mal exploitées. Ces ressources sont de trois types: bande-passante, espace de
stockage et capacité de traitement. C'est parce que le modèle client-serveur classique ne parvient pas à tirer
le maxiumum des ressources du réseau que le modèle P2P est né.
Principe
    Le peer-to-peer ("égal à égal", ou point à point) est un modèle d'architecture de système d'information dont
le principal objectif est d'optimiser au maximum l'utilisation d'au moins un des trois types de ressources existantes
par rapport à son équivalent en modèle client-serveur.
    Le principe est de connecter directement deux machines du réseau dès lors qu'elles on
des informations communes qui les intéressent. Autrement dit cette connexion permet une
relation d'égal à égal entre les deux postes. Il n'est donc plus nécessaire de passer par
un serveur central pour dialoguer avec une machine distante.
Les modèles existants
    Il existe deux modèles d'architecture P2P : le modèle centralisé et décentralisé.
On se propose ici d'étudier ces modèles comparativement à celui du client-serveur
qui leur est souvent opposé.
L'architecture client-serveur
    En client-serveur, tous les échanges entre clients passent forçément par le serveur.
Autrement dit, les seules ressources publiées et consommées sont celles situées sur le serveur.
    On peut citer l'exemple du service de messagerie mail (modèle client-serveur) : lors de l'envoi d'un mail,
ce dernier sera obligatoirement acheminé vers le serveur mail de l'expéditeur, puis vers celui du
destinataire pour qu'enfin ce dernier puisse réceptionner le mail à sa reconnexion au serveur.
L'architecture P2P centralisée
    En P2P centralisé, un serveur de noms centralise l'entrée en communication et la coordination des pairs.
Le reste des échanges s'effectue ensuite par connexion directe entre les noeuds concernés.
Globalement,la majorité des échanges va se faire par connexion directe.
    L'application de partage de fichiers
musicaux Napster est certainement l'exemple le plus connu réalisant ce type de modèle. Elle fonctionne de la
manière suivante : l'utilisateur, lorsqu'il se connecte, expédie dans le même temps, les fichiers MP3 qu'il possède.
Ainsi, à tout moment, les serveurs Napster savent quels sont les fichiers actuellement disponibles sur le réseau et
sur quelles machines. Ensuite, à tout moment, un utilisateur de Napster peut contacter le serveur central pour demander
une musique. Ce serveur consulte juste une base de données qui contient l'index (fichier MP3-adresses des machines le
possédant).
    Le transfert de fichiers va ensuite se faire par connexion directe avec une des machines possédant le fichier. Ici, on voit
que l'utilisation de la bande-passante et de l'espace de stockage est optimisée.
    On pourrait aussi citer l'exemple de Groove qui offre un service collaboratif d'édition de fichiers avec
un système de groupe de travail. Ici, le rôle des serveurs centraux est aussi la coordination des pairs sur
les différentes copies d'un document. Il y a aussi SETI (Search for Extra Terrestrial Information) qui
met à contribution la puissance processeur d'un ensemble de PC pour l'analyse de signaux provenant de capteurs.
L'architecture P2P décentralisée
    Le modèle décentralisé ou "pur P2P", ne comporte pas de serveur de noms.
Les noeuds doivent donc assurer la connexion des nouveaux noeuds. Cela peut se faire par différents mécanismes:
on connait au moins une pair toujours présente (mécanisme à point de rendez-vous)
broadcasting local ou multicast sur adresse déterminée
invitation d'une pair déjà connectée
autres...
    Après cette étape de connexion, le fonctionnement est exactement le même que dans le
modèle centralisé. Chaque pair joue à tour de rôle les fonctions de serveur ou de client.
En tant que serveur elles publient des ressources et répondent ou orientent les recherches des autres pairs.
En tant que client, elles consomment des ressources.
    Un des exemples le plus souvent cité est Gnutella, application de partage de fichiers.
Gnutella fonctionne sur ce modèle P2P décentralisé. La découverte fonctionne avec un mécanisme à point de rendez-vous
La transmission de requête se fait
selon un mécanisme de proche en proche, avec la notion de voisin virtuel (algorithme de vague).
Chaque pair a ainsi une vision locale du réseau.
Le problème de boucle infinie est réglé grâce à l'utilisation d'un champs TTL (Time to Live)
décrémenté à chaque passage dans un noeud.
Bilan
Rapidité d'exécution: le P2P confère une rapidité d'exécution accrue notamment grâce à l'extension des
ressources mises à disposition (exemple du SETI), et à la réduction des temps de transits (connexion directe).
Utilisation de la bande passante: Le P2P exploite mieux la bande passante. En effet, il évite la formation
de centres névralgiques de passage. De plus, il utilise des liens reliant les particuliers entre eux qui sont souvent
sous-utilisés voire pas utilisé en client-serveur. On pourrait d'ailleurs se demander si ces connexions ne pourraient pas
être trés vite encombrées, avec ce mode de fonctionnement sur des connections souvent à faible débit,
mais les chiffres montrent que les consommateurs vont de plus en plus vers les connexions à haut débit.
Tolérance aux pannes: En client-serveur, la chute des serveurs entraine irrémédiablement la panne du service.
En P2P, l'instabilité du réseau est compensée par la redondance des informations.
Coût: Le P2P réduit les côuts. La maintenance est effectuée et l'équipement est financé, par l'utilisateur.
Capacité d'extensibilité: l'extension de ressources se fait de manière dynamique. On augmente le nombre
de ressources, en augmentant le nombre d'utilisateurs.
Ethique: Nul n'est censé ignorer les déboires judiciaires de Napster...on se heurte ici aux problèmes légaux
(copyright), moraux (pornographie infantile) etc...
    Le projet JXTA est l'initiative lancée par Sun pour étudier les possibilités du modèle d'application P2P.
Depuis Avril 2001, une première mouture de leur plate-forme de développement a été placée dans le domaine de l'OpenSource.
Cette plate-forme a pour but de faciliter l'interopérabilité entre applications, d'être indépendante du hardware et
software utilisé et enfin de pouvoir être intégrée dans n'importe quel type d'équipement pouvant être relié à d'autres.
    Pour cela, elle définit uniquement un ensemble de 6 protocoles d'échange et des messages au format XML (ce format pouvant
être considéré comme universel). Elle réalise également une abstraction des canaux de communication. Ainsi, elle ne tient
compte que de la qualité de service offerte par le lien sans se préoccuper du protocole de transport réellement utilisé.
Les protocoles
    Les 6 protocoles sont:
Peer Discovery Protocol: Assure la découverte de toute ressource annoncée par la plate-forme
Peer Resolver Protocol: Assure, l'acheminement des requêtes, leur résolution et la réception des réponses
Peer Information Protocol: Assure la gestion des informations sur les ressources présentes sur le réseau
Peer Membership Protocol: Assure la gestion des droits de création/suppression, d'entrée, de sortie, d'utilisation
des ressources d'un groupe de noeuds
Pipe Binding Protocol: Attache une ressource a un lien
Peer Endpoint protocol: Assure le routage
    Ces 6 protocoles ne sont pas systématiquement disponibles sur toutes les plate-formes. Seuls sont présents ceux pouvant ou
voulant être supportés par l'équipement.
    Le seul protocole à implémenter obligatoirement est le Peer Discovery Protocol car
c'est lui qui permet de s'annoncer et de trouver les autres noeuds.
Par contre, un protocole tel que le peer endpoint protocol ne sera implémenter que par des machines capables d'assurer un certain
débit de transit donc, ayant des connexions conséquentes.
Les annonces
    Il existe également tout un ensemble d'annonces qui permettent de faire connaître l'existence d'une ressource:
Peer Advertisement: Annonce l'existence d'un noeud ainsi que les services qu'il connait
PeerGroup Advertisment: Annonce les services fournis par un groupe de noeuds
Pipe Advertisement: Annonce la qualité de service fournie par le pipe
Service Advertisment: Annonce les méthodes d'utilisation du service et les URI où trouver une implémentation du
service pour sa plate-forme
Content Advertisement: Annonce le contenu d'un message (type, taille...)
Endpoint Advertisement: Annonce la ressource accessible a l'extrémité du pipe
    Ces annonces ne sont pas limitées en nombre. On peut en définir autant que l'on veut car elles sont écrites en XML. Cependant,
celles-ci sont supposées être compréhensibles pour tous les noeuds. Ensuite, celles qui seront définies en plus ne seront pas
standards donc, ce sera à l'application de les comprendre.
    Ces annonces sont ensuite gardées en mémoire pour servir de base aux differents protocoles pour savoir à qui adresser une reqûete
ou répondre à une requête concernant une ressource. De cette manière, on assure une vision plus ou moins globale des ressources
P2P disponibles sur le réseau. De plus, cette vision est constamment réactualisée et dupliquée ce qui permet une grande resistance
aux pannes.
Les pipes
    Ce sont les canaux de communications utilisés par les noeuds pour échanger des informations.
JXTA permet d'abstraire le type de protocole de transport utilisé. La plate-forme ne tient compte que de la qualité de service
offerte par le lien physique. Pour cela, les pipes sont définis par défaut comme étant uni-directionnel et asynchrone.
Il existe deux types de pipes:
les point-to-point pipes qui correspondent à une liaison 1 vers 1
Les propagate pipes qui correspondent à une liaison 1 vers n
    Ainsi, on voit que les pipes ne sont pas représentables par des liaisons physiques dans tous les cas. Il faut plutôt les voir comme des
canaux ayant un certain débit, une certaine qualité de service et des ressources attachées à ses extrémités. Ces ressources peuvent être
attachées ou détachées dynamiquement. Ainsi, on peut imaginer un téléchargement de plusieurs fichiers par le biais d'un pipe qui une fois
le premier fichier téléchargé, le détache et attache le deuxième fichier et ainsi de suite sans casser le lien.
La sécurité
    En ce qui concerne la sécurite, JXTA se contente pour l'instant de fournir un ensemble de bibliothèques permettant d'implémenter
les différentes solutions envisageables (clé publique, clé secrèe, Kerberos...) en fonction des différents cas possibles.
    Sun s'appuie ici sur l'expérience acquise au cours du développement du langage Java pour laisser le plus de liberté possible aux programmeurs.
Ensuite, par l'observation des solutions les plus communément adoptées, de nouvelles fonctions viendront faciliter le développement pour
les programmeurs.
Ainsi, il est prévu dans la prochaine version, une forme de système de sécurité "tout en un".
Problèmes rencontrés:
Mécanismes de découverte avec le problème des NAT et Firewall. En effet, il est impossible de l'extérieur de contacter un noeud derrière l'un de ces deux systèmes
Limitation de la propagation des messages. Pour l'instant, un message est propagé selon un time-to-live ou bien dans l'intégralié du groupe concerné. Cependant, ces deux
techniques sont peu satisfaisantes car trop incertaines quant au trafic réellement généré
Contrôle et mesures sur les équipements du réseau
A venir:
Implémentation C/C++
Implémentation pour les PDA et téléphones cellulaires
Test à grande échelle
Service de nommage intégré à la plate-forme pour faciliter le dveloppement des applications P2P en mode "centralisé"
Service de sécurité "tout en un"
    Ainsi, grâce à une description universelle des ressources et a un ensemble de protocoles
d'échange n'imposant rien quant à la manière de les implémenter, Sun Microsystems a réussi à respecter ses objectifs.
Cependant, le revers de la médaille vient du fait que le développeur doit assurer une grosse part du travail. En effet,
il sait uniquement ce qu'il peut attendre de ses voisins mais peu de facilités lui sont fournies pour programmer
rapidement son application (du moins dans cette première version).
    .NET My Services est la plate-forme de développement P2P offerte par Microsoft.
Les objectifs de Microsoft sont très différents de ceux de Sun.
    En effet, Microsoft a centré sa vision autour du bien-être de l'utilisateur plutôt que sur les
possibilités de développement pour le programmeur. Ainsi, l'accent n'a pas été porté sur les possibilités
d'offrir des applications totalement nouvelles mais plutôt sur les possibilités d'intégrer de nouvelles
fonctions à des applications déjà existantes. En particulier, Microsoft veut permettre une meilleure gestion
des informations.
A l'initiative de .NET
    .NET a pour premier objectif d'accroître l'interopérabilité entre applications afin d'assurer une meilleure gestion des informations.
On voudrait, par exemple, que la réservation sur un vol à partir d'un système de réservation en ligne puisse
communiquer avec l'agenda de la personne qui réserve.
    Ainsi, on veut aussi répondre au problème de redondance des saisies ( saisie du password,
d'informations personnelles telles que l'adresse, porte-monnaie électronique) et au problème des mises
à jour trop lourdes (en changeant d'adresse e-mail, on doit mettre à jour tous les sites sur lesquels
on avait saisi l'ancienne adresse...).
    On aimerait aussi donner tout pouvoir de contrôle à l'utilisateur sur ses données, ses informations
personnelles.
Qu'est-ce que .NET My Services?
    C'est une architecture centrée utilisateur. On essaye de s'orienter sur le confort de l'utilisateur
et de lui donner le maximum de contrôle en ce qui concerne ses informations personnelles.
    .Net My services est implémenté sous forme d'un ensemble de services gérant les problèmes d'interopérabilité
et à vocations diverses (abonnement à des alertes signalant des évènements spéciaux (.NET alerts), gestion
des informations du porte-monnaie électronique (.NET Wallet) etc...).
Pour permettre cette interopérabilité, .NET utilise les standards XML (formatage des données) et
SOAP (appel de procédures à distance). Le transfert des informations est réalisé via HTTP.
Sécurité : Principe
    Le chargement des informations sur lesquelles on veut exercer un contrôle est centralisé dans la "digital
safe deposit box". L'utilisateur peut ensuite déterminer les droits d'accès qu'il accorde à des utilisateurs,
des groupes d'utilisateurs, des services ou des sociétés, sur les différents éléments de la boîte.
    L'utilisateur peut à tout moment révoquer les droits d'accès accordés (cas d'abus ou autres...).
    L'utilisateur peut donner une date d'expiration aux droits d'accès accordés.
Sécurité : .NET Passport
    .Net My services utilise une version avancée du service d'authentification de .NET Passport.
Le service .NET Passport est déjà utilisé (165 millions de .NET Passport déjà en existence). Il est présent
dans Windows XP et son utilisation est soumise à l'approbation de Microsoft.
Comment fonctionne .NET Passport?
    L'utilisateur place dans son .NET Passport des informations personnelles dont des informations de signature
et des informations concernant le porte-monnaie électronique.
Les sites qui veulent participer au service .NET Passport doivent être affiliés au réseau auprès de Microsoft (serveurs centraux).
Ils proposent ainsi des services tel que l'unique login, la gestion du porte-monnaie électronique, le contrôle parental.
L'utilisateur peut, de cette manière, saisir les informations une fois pour toute et éviter de subir des saisies répétives.
L'utilisateur peut, de même, filtrer les informations transmises.
    .NET Passport facilite la tâche de l'utilisateur (en limitant la redondance des saisies et en
personnalisant la tâche) et offre des services en ligne plus sécurisés.