Gnutella/fr: Difference between revisions

From Shareaza Wiki
Jump to navigation Jump to search
 
(14 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{Languages|Gnutella}}
{{Languages|Gnutella}}
 
{{UpdatedPage| 29 mars 2014|2.7.x.0}}
{{StableFr}}
<u>'''Présentation'''</u>
<u>'''Présentation'''</u>


Line 26: Line 27:


== Conception ==
== Conception ==
===La connexion===
Pour comprendre comment Gnutella fonctionne, imaginez un large cercle d'utilisateur ''(appelé Nœuds)'', qui ont un logiciel client Gnutella quel-qu'il soit.
Pour comprendre comment Gnutella fonctionne, imaginez un large cercle d'utilisateur ''(appelé Nœuds)'', qui ont un logiciel client Gnutella quel-qu'il soit.
A la connexion initiale, le logiciel client doit amorcer la connexion à un autre nœud. Différentes méthodes sont utilisées pour cela...
 
A la connexion initiale, le logiciel client doit amorcer la connexion à un autre nœud. Pour cela Différentes méthodes sont utilisées: <br />
*Le client Gnutella possède une liste intégrée d'adresse IP de nœuds (appelé voisin ou hôtes) aux quelles, il est potentiellement capable de se connecter.
*Le client Gnutella possède une liste intégrée d'adresse IP de nœuds (appelé voisin ou hôtes) aux quelles, il est potentiellement capable de se connecter.
*La mise à jour des web caches de nœuds (appelé [[GWC/fr|Gnutella Web Cache]] (GWC))
*La mise à jour des web caches de nœuds (appelé [[GWC/fr|Gnutella Web Cache]] (GWC))
Line 33: Line 38:


Une fois connecté, le client demande une liste fonctionnelle d'adresse. Il tente alors de se connecter aux nœuds de la liste reçue, aussi bien qu'aux nœuds dont il reçoit l'adresse depuis d'autres clients, jusqu'à ce qu'il atteigne un certain quota. Il se connecte toujours à plusieurs nœuds, mettant en caches les adresses de connexion possible qu'il n'a pas essayé et en supprimant les adresses avec qui, il n'a pas pu établir de connexion.
Une fois connecté, le client demande une liste fonctionnelle d'adresse. Il tente alors de se connecter aux nœuds de la liste reçue, aussi bien qu'aux nœuds dont il reçoit l'adresse depuis d'autres clients, jusqu'à ce qu'il atteigne un certain quota. Il se connecte toujours à plusieurs nœuds, mettant en caches les adresses de connexion possible qu'il n'a pas essayé et en supprimant les adresses avec qui, il n'a pas pu établir de connexion.
===Les recherches===


Quand un utilisateur effectue une recherche, le client Gnutella envoi une requête à chacun des nœuds activement connectés. Dans la version 0.4 du protocole, le nombre de nœuds activement connectés pour un client était vraiment ''petit'' (autour de 5 pour 1), si chaque nœud retransmet la requête à chacun des nœuds auxquels il est activement connecté et qu'à leurs tours il retransmettent la requête et ainsi de suite... Ce jusqu'à ce que la requête atteigne un nombre de "bonds" pré-déterminé par le client qui l'a envoyée (maximum 7).
Quand un utilisateur effectue une recherche, le client Gnutella envoi une requête à chacun des nœuds activement connectés. <br />
Dans la version 0.4 du protocole, le nombre de nœuds activement connectés pour un client était vraiment ''petit'' (autour de 5 pour 1), ainsi chaque nœud retransmet la requête à chacun des nœuds auxquels il est activement connecté et à leurs tours il retransmettent la requête, ainsi de suite... Ce jusqu'à ce que la requête atteigne un nombre de "bonds" pré-déterminé (maximum 7) par le client qui l'a envoyée .


La version 0.6, Gnutella est un réseau composite formé de nœuds "feuilles" et d'ultra nœuds (appelé UltraPairs (UltraPeers en anglais)). Les feuilles sont connectées à un petit nombre d'UltraPairs (typiquement 3) tandis qu'un UltraPair peut être connecté à plus de 32 autres UltraPairs.
La version 0.6, Gnutella est un réseau composite formé de nœuds "feuilles" et d'ultra nœuds (appelé UltraPairs (UltraPeers en anglais)). Les feuilles sont connectées à un petit nombre d'UltraPairs (typiquement 3) tandis qu'un UltraPair peut être connecté à plus de 32 autres UltraPairs.


Feuilles et ultrapairs utilise un Protocole de Routage de Requêtes (Query Routing Protocol ou '''QRP''') pour échanger des Tables de Routage de Requêtes (Query Routing Table ou '''QRT''') constituées de mots clés [http://fr.wikipedia.org/wiki/Fonction_de_hachage ''hachés'']. Une feuille envoi sa QRT à chacun des ultrapairs à qui il est connecté, puis les UltraPairs combinent les QRT reçues de leurs feuilles, plus leurs QRT (s'ils partagent des fichiers) et les échangent avec leurs voisins.
Feuilles et ultrapairs utilise un Protocole de Routage de Requêtes (Query Routing Protocol ou '''QRP''') pour échanger des Tables de Routage de Requêtes ('''QRT''') constituées de mots clés [http://fr.wikipedia.org/wiki/Fonction_de_hachage ''hachés'']. Une feuille envoi sa QRT à chacun des ultrapairs auquels il est connecté, puis les UltraPairs combinent les QRT reçues de leurs feuilles, plus leurs QRT (s'ils partagent des fichiers) et les échangent avec leurs voisins.


Ainsi un client interrogeant un ultrapeer peut rechercher sur 30 autres clients avec une seule requête. Si la requête est retransmise aux 30 autres ultrapeers auquel il est connecté, sa recherche atteint le contenu de 900 clients... Autre point non négligeable, les clients ne reçoivent plus de requêtes de recherche, on dit qu'ils sont protégés par leur ultrapair. Cela permet en outre aux utilisateurs connectés à Internet en bas débit de pouvoir utiliser Gnutella sans diminuer leurs performances.
Ainsi un client interrogeant un ultrapeer peut rechercher sur 30 autres clients avec une seule requête. Si la requête est retransmise aux 30 autres ultrapeers auquel il est connecté, sa recherche atteint le contenu de 900 clients... Autre point non négligeable, les clients ne reçoivent plus de requêtes de recherche, on dit qu'ils sont protégés par leur ultrapair. Cela permet en outre aux utilisateurs connectés à Internet en bas débit de pouvoir utiliser Gnutella sans diminuer leurs performances.


Si une recherche retourne des résultats, le nœud qui possède le fichier contacte le nœud initiateur de la recherche. Dans le protocole classique de Gnutella, les messages de réponse suivent le même parcours que que la requête de recherche, car la requête ne contient pas de données permettant d'identifier l'hôte initiateur de la recherche. Ce schéma, fut révisé plus tard... Car maintenant, la requête contient l'adresse IP et le numéro de port de l'hôte, ainsi les résultats de recherches sont directement délivré à l'hôte initiateur de la recherche via l'[http://fr.wikipedia.org/wiki/User_Datagram_Protocol UDP] par l'ultrapair du nœud. Cela permet de diminuer la somme de trafic acheminé par le réseau Gnutella. [[Image:Gnutella requete.jpg|thumb|right|200x150px|Chemin effectué par une requête (en vert) de recherche et sa réponse (en rouge).]]
Si une recherche retourne des résultats, le nœud qui possède le fichier contacte le nœud initiateur de la recherche. Dans le protocole classique de Gnutella, les messages de réponse suivent le même parcours que que la requête de recherche, car la requête ne contient pas de données permettant d'identifier l'hôte initiateur de la recherche. Ce schéma, fut révisé plus tard... Car maintenant, la requête contient l'adresse IP et le numéro de port de l'hôte, ainsi les résultats de recherches sont directement délivré à l'hôte initiateur de la recherche via l'[http://fr.wikipedia.org/wiki/User_Datagram_Protocol UDP] par l'ultrapair du nœud. Cela permet de diminuer la somme de trafic acheminé par le réseau Gnutella.  
 
[[Image:Gnutella requete.jpg|thumb|right|200x150px|Chemin effectué par une requête (en vert) de recherche et sa réponse (en rouge).]]
 
Si un utilisateur décide de télécharger un fichier, son client Gnutella et le client dépositaire du fichier négocient un [http://fr.wikipedia.org/wiki/Transfert_de_fichier transfert de fichier].
Si le nœud qui possède le fichier n'est pas derrière un [http://fr.wikipedia.org/wiki/Pare-feu_(informatique) pare-feu], le deux clients peuvent se connecter directement et procéder à l'échange de fichier. Si par contre le dépositaire (la source) du fichier est derrière un pare-feu, celui-ci ne peut pas recevoir les connexions entrantes. Le client qui recherche le fichier est obligé d'envoyer une "requête poussée" à l'ultrapair pour demander à l'hôte distant d'initier la connexion à sa place.
 
Auparavant, cette "requête poussée" suivait le parcours inverse qu'avait parcouru la requête. Cela était un parcours incertain, car de nombreux hôtes par lesquels la requêtes était passé se déconnectaient et brisaient la connexion, et les paquets acheminés sont toujours soumis à un contrôle de flux.


Si un utilisateur décide de télécharger un fichier, son client Gnutella et le client dépositaire du fichier négocient un [http://fr.wikipedia.org/wiki/Transfert_de_fichier transfert de fichier]. Si le nœud qui possède le fichier n'est pas derrière un [http://fr.wikipedia.org/wiki/Pare-feu_(informatique) pare-feu], le deux clients peuvent se connecter directement et procéder à l'échange de fichier. Si par contre le dépositaire (la source) du fichier est derrière un pare-feu, celui-ci ne peut pas recevoir les connexions entrantes. Le client qui recherche le fichier est obligé d'envoyer une "requête poussée" à l'ultrapair pour demander à l'hôte distant d'initier la connexion à sa place.
Par conséquent ce que l'on appelle des "[http://fr.wikipedia.org/wiki/Proxy proxys] poussés" a été introduits. Ce sont généralement les ultrapeers d'un nœud feuille et ils sont annoncés dans les résultats de recherche. Le client se connecte à l'un de ces "proxys poussés" à l'aide d'une requête HTTP et le proxy envoie une "demande poussé" à la source du fichier pour le compte du client demandeur. Normalement, il est également possible d'envoyer une requête poussée via l'UDP au proxy poussé ce qui est plus efficace que d'utiliser le protocole [http://fr.wikipedia.org/wiki/Transmission_Control_Protocol TCP].  


Auparavant, cette "requête poussée" suivait le parcours inverse qu'avait parcouru la requête. Cela était un parcours incertain, car de nombreux hôtes par lesquels la requêtes était passé se déconnectaient et brisaient la connexion, et les paquets acheminés sont toujours soumis à un contrôle de flux. Par conséquent ce que l'on appelle des "[http://fr.wikipedia.org/wiki/Proxy proxys] poussés" a été introduits. Ce sont généralement les ultrapeers d'un nœud feuille et ils sont annoncés dans les résultats de recherche. Le client se connecte à l'un de ces "proxys poussés" à l'aide d'une requête HTTP et le proxy envoie une "demande poussé" à la source du fichier pour le compte du client demandeur. Normalement, il est également possible d'envoyer une requête poussée via l'UDP au proxy poussé ce qui est plus efficace que d'utiliser le protocole [http://fr.wikipedia.org/wiki/Transmission_Control_Protocol TCP]. Les proxys poussés ont deux avantages&nbsp;:
Les proxys poussés ont deux avantages&nbsp;:
*Les connexions UltraPairs - feuilles sont plus stables, les parcours que font les requêtes poussées sont beaucoup plus fiable.
*Les connexions UltraPairs - feuilles sont plus stables, les parcours que font les requêtes poussées sont beaucoup plus fiable.
*Il réduit le volume du trafic acheminé par le réseau Gnutella.
*Il réduit le volume du trafic acheminé par le réseau Gnutella.


Enfin, quand un utilisateur se déconnecte, le logiciel client enregistre la liste des nœuds à qui il était activement connecté et celles recueillies à partir des paquets pong pour les utiliser à sa prochaine tentative de connexion afin de devenir indépendant de toute forme de services d'[[Amorçage client (Bootstrapping)|amorçage]].
Enfin, quand un utilisateur se déconnecte, le logiciel client enregistre la liste des nœuds à qui il était activement connecté et celles recueillies à partir des paquets pong pour les utiliser à sa prochaine tentative de connexion afin de devenir indépendant de toute forme de services d'amorçage.


En pratique, cette méthode de recherche sur le réseau Gnutella est peu fiable. Chaque nœud est l'ordinateur d'un utilisateur et en tant que tel, ils se connectent et se déconnectent constamment, de fait le réseau n'est jamais complétement stable. En outre, le volume de bande passante sur Gnutella pour les requêtes de recherches a connue croissance exponentielle du nombre d'utilisateurs connectés, saturant souvent les connexions et rendant lents les nœuds inutiles.
En pratique, cette méthode de recherche sur le réseau Gnutella est peu fiable. Chaque nœud est l'ordinateur d'un utilisateur et en tant que tel, ils se connectent et se déconnectent constamment, de fait le réseau n'est jamais complétement stable. En outre, le volume de bande passante sur Gnutella pour les requêtes de recherches a connue croissance exponentielle du nombre d'utilisateurs connectés, saturant souvent les connexions et rendant lents les nœuds inutiles.


Par conséquent, les requêtes de recherches sont souvent lâchées et les requêtes restantes n'atteignent qu'un petite partie du réseau. Cette observation identifie le réseau Gnutella comme un système distribué inextensible et à inspiré le développement des [[Tables de hachage distribuées]] qui sont beaucoup plus extensibles mais qui ne supportent uniquement qu'une correspondance exacte, plutôt que des les mots clés d'une recherche.
Par conséquent, les requêtes de recherches sont souvent lâchées et les requêtes restantes n'atteignent qu'un petite partie du réseau. Cette observation identifie le réseau Gnutella comme un système distribué inextensible et à inspiré le développement des [http://fr.wikipedia.org/wiki/Table_de_hachage_distribu%C3%A9e "Tables de hachage distribuées"] qui sont beaucoup plus extensibles mais qui ne supportent uniquement qu'une correspondance exacte, plutôt que des les mots clés d'une recherche.


Pour résoudre les problèmes de [http://fr.wikipedia.org/wiki/Goulot_détranglement_(informatique) goulots d'étranglement] , les développeurs de gnutella ont mis en place un système à plusieurs niveaux d'ultrapairs et de feuilles. Plutôt que tous les nœuds soient considérés comme égaux, les nœuds entrant sur le réseau ont été maintenus ''"en marge"'' du réseaux comme feuilles, non responsables de l'acheminement. Les nœuds capables de router les messages furent promus UltraPairs acceptant la connexion des feuilles et routant les requêtes de recherche ainsi que les messages de maintenance du réseau. Cela permet aux requêtes de recherches de se propager davantage à travers le réseau et permis de nombreuses modifications dans la topologie qui ont amélioré grandement l'efficacité et l'extensibilité.
Pour résoudre les problèmes de [http://fr.wikipedia.org/wiki/Goulot_détranglement_(informatique) goulots d'étranglement] , les développeurs de gnutella ont mis en place un système à plusieurs niveaux d'ultrapairs et de feuilles. Plutôt que tous les nœuds soient considérés comme égaux, les nœuds entrant sur le réseau ont été maintenus ''"en marge"'' du réseaux comme feuilles, non responsables de l'acheminement. Les nœuds capables de router les messages furent promus UltraPairs acceptant la connexion des feuilles et routant les requêtes de recherche ainsi que les messages de maintenance du réseau. Cela permet aux requêtes de recherches de se propager davantage à travers le réseau et permis de nombreuses modifications dans la topologie qui ont amélioré grandement l'efficacité et l'extensibilité.
Line 63: Line 77:


== Caractéristiques et Extensions du Protocole ==
== Caractéristiques et Extensions du Protocole ==
Comme nous l'avons vu plus haut, le protocole Gnutella a purement fonctionné à base de [[Requêtes d'inondation|requêtes d'inondation]], dans sa version 0.4, le protocole réseau utilise cinq différents types de paquets&nbsp;:
Comme nous l'avons vu plus haut, le protocole Gnutella a purement fonctionné à base de [http://en.wikipedia.org/wiki/Query_flooding requêtes d'inondation], dans sa version 0.4, le protocole réseau utilise cinq différents types de paquets&nbsp;:<br />
*les pings&nbsp;: pour la découverte des hôtes sur le réseau
*les pings&nbsp;: pour la découverte des hôtes sur le réseau
*les pongs&nbsp;: qui est la réponse aux ping
*les pongs&nbsp;: qui est la réponse aux ping
Line 72: Line 86:
Ce sont les paquets concernés principalement par la recherche du réseau Gnutella. Les transferts de fichiers sont gérés via le protocole HTTP.
Ce sont les paquets concernés principalement par la recherche du réseau Gnutella. Les transferts de fichiers sont gérés via le protocole HTTP.


Le développement du protocole Gnutella est actuellement dirigé par les "GDF" (Gnutella Developers Forum). Plusieurs extension du protocole ont été et sont développées par des éditeurs de logiciels et par les développeurs libre du GDF. Ces extensions inclues le routage intelligent des requêtes,[http://fr.wikipedia.org/wiki/Somme_de_contrôle la somme de contrôle] [[SHA-1]], les hits de requêtes via l'[http://fr.wikipedia.org/wiki/User_Datagram_Protocol UDP], l'interrogation via UDP , les requêtes dynamiques via le [http://fr.wikipedia.org/wiki/Transmission_Control_Protocol TCP], le transfert de fichier via l'UDP, les métadonnées[http://fr.wikipedia.org/wiki/Extensible_Markup_Language XML], l'échange de source et le téléchargement parallèle en tranches ([[essaimage]]).
Le développement du protocole Gnutella est actuellement dirigé par les "GDF" (Gnutella Developers Forum). Plusieurs extension du protocole ont été et sont développées par des éditeurs de logiciels et par les développeurs libre du GDF. Ces extensions inclues le routage intelligent des requêtes,[http://fr.wikipedia.org/wiki/Somme_de_contrôle la somme de contrôle] [http://fr.wikipedia.org/wiki/SHA-1 SHA-1], les hits de requêtes via l'[http://fr.wikipedia.org/wiki/User_Datagram_Protocol UDP], l'interrogation via UDP , les requêtes dynamiques via le [http://fr.wikipedia.org/wiki/Transmission_Control_Protocol TCP], le transfert de fichier via l'UDP, les métadonnées[http://fr.wikipedia.org/wiki/Extensible_Markup_Language XML], l'échange de source et le téléchargement parallèle en tranches (''''essaimage'''').


Il y eu des efforts pour finaliser ces extensions de spécifications du protocole Gnutella 0.6 sur le site de développement. La version 0.4 de Gnutella -bien qu'étant toujours la dernière spécification du protocole- est obsolète, puisque toutes les extensions existent que sous la forme de propositions. Dans les fait, il serait extrêmement difficile voir impossible aujourd'hui de se connecter avec la poignée de main de la version 0.4.
Il y eu des efforts pour finaliser ces extensions de spécifications du protocole Gnutella 0.6 sur le site de développement. La version 0.4 de Gnutella -bien qu'étant toujours la dernière spécification du protocole- est obsolète, puisque toutes les extensions existent que sous la forme de propositions. Dans les fait, il serait extrêmement difficile voir impossible aujourd'hui de se connecter avec la poignée de main de la version 0.4.
Line 84: Line 98:
<center>
<center>


{| width="55%" align="center" class="wikitable sortable"
{| width="55%" align="center" class="wikitable"
|-
|-
! valign="middle" align="center" rowspan="1" | Nom
! valign="middle" align="center" rowspan="1" | Nom
Line 91: Line 105:
! rowspan="1" | Héritage
! rowspan="1" | Héritage
|-
|-
! valign="middle" align="center" rowspan="1" | [[Acquisition]]
! valign="middle" align="center" rowspan="1" {{rh}} | '''Acquisition'''
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Mac_OS_X Mac OS X]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/OS_X Mac OS X]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Logiciel_propriétaire Propriétaire]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Logiciel_propriétaire Propriétaire]
| valign="middle" align="center" | [[LimeWire]]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/LimeWire LimeWire]
|-
|-
! valign="middle" align="center" rowspan="1" | [[BearFlix]]
! valign="middle" align="center" rowspan="1" {{rh2}}|[http://fr.wikipedia.org/wiki/BearShare BearShare]<br><small>(Avant la Version 6)</small>
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Microsoft_Windows Microsoft Windows]
| valign="middle" align="center" | Microsoft Windows
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Logiciel_propriétaire Propriétaire]
| valign="middle" align="center" | Propriétaire
| valign="middle" align="center" | [[BearShare]]
| valign="middle" align="center" | Travail Original
|-
|-
! valign="middle" align="center" rowspan="1" |[[BearShare]]<br><small>(Avant la Version 6)</small>
! valign="middle" align="center" rowspan="1" {{rh2}}| '''BearFlix'''
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Microsoft_Windows Microsoft Windows]
| valign="middle" align="center" | Microsoft Windows
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Logiciel_propriétaire Propriétaire]
| valign="middle" align="center" | Propriétaire
| valign="middle" align="center" | Travail Original
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/BearShare BearShare]
|-
|-
! valign="middle" align="center" rowspan="1" | [[Cabos]]
! valign="middle" align="center" rowspan="1" {{rh2}}| [http://en.wikipedia.org/wiki/Cabos Cabos]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Java_(technique) Java]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Java_(technique) Java]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Licence_publique_générale_GNU GNU GPL]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Licence_publique_générale_GNU GNU GPL]
| valign="middle" align="center" | [[LimeWire]]
| valign="middle" align="center" | LimeWire
|-
|-
! valign="middle" align="center" rowspan="1" | [[FilesWire]]
! valign="middle" align="center" rowspan="1" {{rh2}} | [http://en.wikipedia.org/wiki/FilesWire FilesWire]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Java_(technique) Java]
| valign="middle" align="center" | Java
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Logiciel_propriétaire Propriétaire]
| valign="middle" align="center" | Propriétaire
| valign="middle" align="center" | Travail Original
| valign="middle" align="center" | Travail Original
|-
|-
! valign="middle" align="center" rowspan="1" | [[FrostWire]]
! valign="middle" align="center" rowspan="1" {{rh}}| [http://fr.wikipedia.org/wiki/FrostWire FrostWire]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Java_(technique) Java]
| valign="middle" align="center" | Java
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Licence_publique_générale_GNU GNU GPL]
| valign="middle" align="center" | GNU GPL
| valign="middle" align="center" | [[LimeWire]]
| valign="middle" align="center" | LimeWire
|-
|-
! valign="middle" align="center" rowspan="1" |[[giFT]]<br><small>(plugin Gnutella)</small>
! valign="middle" align="center" rowspan="1" {{rh2}}|[http://fr.wikipedia.org/wiki/GiFT giFT]<br><small>(plugin Gnutella)</small>
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Multiplate-forme Multi plate-forme]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Multiplate-forme Multi plate-forme]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Licence_publique_générale_GNU GNU GPL]
| valign="middle" align="center" | GNU GPL
| valign="middle" align="center" | Travail Original
| valign="middle" align="center" | Travail Original
|-
|-
! valign="middle" align="center" rowspan="1" | [[Gnucleus]]
! valign="middle" align="center" rowspan="1" {{rh2}}| [http://en.wikipedia.org/wiki/GnucDNA#Gnucleus Gnucleus]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Microsoft_Windows Microsoft Windows]
| valign="middle" align="center" | Microsoft Windows
   | valign="middle" align="center" |  [http://fr.wikipedia.org/wiki/Licence_publique_générale_GNU GNU GPL],  [http://fr.wikipedia.org/wiki/Licence_publique_générale_limité_GNUGNU LGPL]
   | valign="middle" align="center" |  GNU GPL,  [http://fr.wikipedia.org/wiki/Licence_publique_générale_limité_GNU GNU LGPL]
| valign="middle" align="center" | Travail Original
| valign="middle" align="center" | Travail Original
|-
|-
! valign="middle" align="center" rowspan="1" | [[Gtk-gnutella]]
! valign="middle" align="center" rowspan="1" {{rh}}| [http://en.wikipedia.org/wiki/Gtk-gnutella Gtk-gnutella]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Type_Unix Type Unix], [http://fr.wikipedia.org/wiki/Mac_OS_X Mac OS X] ,[http://fr.wikipedia.org/wiki/Microsoft_Windows Microsoft Windows]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Type_Unix Type Unix], Mac OS X, Microsoft Windows
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Licence_publique_générale_GNU GNU GPL]
| valign="middle" align="center" | GNU GPL
| valign="middle" align="center" | Travail Original
| valign="middle" align="center" | Travail Original
|-
|-
! valign="middle" align="center" rowspan="1" |[[iMesh]]<br><small>(Avant la Version 6)</small>
! valign="middle" align="center" rowspan="1" {{rh2}}|[http://fr.wikipedia.org/wiki/IMesh iMesh]<br><small>(Avant la Version 6)</small>
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Microsoft_Windows Microsoft Windows]
| valign="middle" align="center" | Microsoft Windows
| valign="middle" align="center" |
| valign="middle" align="center" | Propriétaire
| valign="middle" align="center" | [[GnucDNA]]
| valign="middle" align="center" |[http://en.wikipedia.org/wiki/GnucDNA GnucDNA]
|-
|-
! valign="middle" align="center" rowspan="1" | [[giFT#giFT front-ends|KCeasy]]
! valign="middle" align="center" rowspan="1" {{rh2}}| [http://en.wikipedia.org/wiki/GiFT#giFT_front-ends KCeasy]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Microsoft_Windows Microsoft Windows]
| valign="middle" align="center" | Microsoft Windows
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Licence_publique_générale_GNU GNU GPL]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Licence_publique_générale_GNU GNU GPL]
| valign="middle" align="center" | [[GiFT]]
| valign="middle" align="center" | giFT
|-
|-
! valign="middle" align="center" rowspan="1" | [[GnucDNA#Kiwi_Alpha|Kiwi Alpha]]
! valign="middle" align="center" rowspan="1" {{rh2}}| [http://en.wikipedia.org/wiki/GnucDNA#Kiwi_Alpha Kiwi Alpha]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Microsoft_Windows Microsoft Windows]
| valign="middle" align="center" | Microsoft Windows
| valign="middle" align="center" |
| valign="middle" align="center" | GnucDNA
| valign="middle" align="center" | [[GnucDNA]]
|-
|-
! valign="middle" align="center" rowspan="1" | [[LimeWire]]
! valign="middle" align="center" rowspan="1" {{rh2}}| [http://fr.wikipedia.org/wiki/LimeWire LimeWire]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Java_(technique) Java]
| valign="middle" align="center" | Java
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Licence_publique_générale_GNU GNU GPL]
| valign="middle" align="center" | GNU GPL
| valign="middle" align="center" | Travail Original
| valign="middle" align="center" | Travail Original
|-
|-
! valign="middle" align="center" rowspan="1" | [[Morpheus|Morpheus]]
! valign="middle" align="center" rowspan="1" {{rh2}}| [http://fr.wikipedia.org/wiki/Morpheus_%28logiciel%29 Morpheus]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Microsoft_Windows Microsoft Windows]
| valign="middle" align="center" | Microsoft Windows
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Logiciel_propriétaire Propriétaire]
| valign="middle" align="center" | Propriétaire
| valign="middle" align="center" | [[GnucDNA]]
| valign="middle" align="center" | GnucDNA
|-
|-
! valign="middle" align="center" rowspan="1" | [[Phex]]
! valign="middle" align="center" rowspan="1" {{rh}}| [http://en.wikipedia.org/wiki/Phex Phex]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Java_(technique) Java]
| valign="middle" align="center" | Java
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Licence_publique_générale_GNU GNU GPL]
| valign="middle" align="center" | GNU GPL
| valign="middle" align="center" | Original Work
| valign="middle" align="center" | Travail Original
|-
|-
! valign="middle" align="center" rowspan="1" | [[giFT#giFT front-ends|Poisoned]]
! valign="middle" align="center" rowspan="1" {{rh2}}| [http://en.wikipedia.org/wiki/GiFT#giFT_front-ends Poisoned]]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Mac_OS_X Mac OS X]
| valign="middle" align="center" | Mac OS X
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Licence_publique_générale_GNU GNU GPL]
| valign="middle" align="center" | GNU GPL
| valign="middle" align="center" | [[GiFT]]
| valign="middle" align="center" | giFT
|-
|-
! valign="middle" align="center" rowspan="1" | '''Shareaza'''
! valign="middle" align="center" rowspan="1" {{rh}}| '''Shareaza'''
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Microsoft_Windows Microsoft Windows]
| valign="middle" align="center" | Microsoft Windows
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Licence_publique_générale_GNU GNU GPL]
| valign="middle" align="center" | GNU GPL
| valign="middle" align="center" | Travail Original
| valign="middle" align="center" | Travail Original
|-
|-
! valign="middle" align="center" rowspan="1" | [[Symella]]
! valign="middle" align="center" rowspan="1" {{rh2}}| [http://en.wikipedia.org/wiki/Symella Symella]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Symbian_OS Symbian OS]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Symbian_OS Symbian OS]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Licence_publique_générale_GNU GNU GPL]
| valign="middle" align="center" | GNU GPL
| valign="middle" align="center" | Travail Original
| valign="middle" align="center" | Travail Original
|-
|-
! valign="middle" align="center" rowspan="1" | [[Zultrax]]
! valign="middle" align="center" rowspan="1" {{rh}}| [http://en.wikipedia.org/wiki/Zultrax Zultrax]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Microsoft_Windows Microsoft Windows]
| valign="middle" align="center" | Microsoft Windows
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Logiciel_propriétaire Propriétaire]
| valign="middle" align="center" | Propriétaire
| valign="middle" align="center" | Travail Original
| valign="middle" align="center" | Travail Original
|}
|}
Line 191: Line 204:
{| width= auto; style="font-size: 85%; text-align: center;" class="wikitable"
{| width= auto; style="font-size: 85%; text-align: center;" class="wikitable"
! colspan=2 | Clients
! colspan=2 | Clients
! rowspan=1 | '''Recherche<br /> à partir<br /> du [[Fonction de Hachage|hache]]'''  
! rowspan=1 | '''Recherche<br /> à partir<br /> du hache'''  
! rowspan=1 | {{Cref|tChat}}
! rowspan=1 | {{Cref|tChat}}
! rowspan=1 | Liste d'amis
! rowspan=1 | Liste d'amis
Line 197: Line 210:
! rowspan=1 | [http://fr.wikipedia.org/wiki/Binary_Ordered_Compression_for_Unicode Unicode-compatible]<br>Routage requêtes
! rowspan=1 | [http://fr.wikipedia.org/wiki/Binary_Ordered_Compression_for_Unicode Unicode-compatible]<br>Routage requêtes
! rowspan=1 | {{Cref|Mappage des ports UPnP}}
! rowspan=1 | {{Cref|Mappage des ports UPnP}}
! rowspan=1 | [[NAT traversal]]
! rowspan=1 | [http://en.wikipedia.org/wiki/NAT_traversal NAT traversal]{{Cref|**}}
! rowspan=1 | [[NAT Port Mapping Protocol|NAT port mapping]]
! rowspan=1 | [http://fr.wikipedia.org/wiki/NAT_Port_Mapping_Protocol NAT port mapping]
! rowspan=1 | {{Cref|RUDP}}
! rowspan=1 | {{Cref|RUDP}}
! rowspan=1 | Proxy poussé TCP
! rowspan=1 | Proxy poussé TCP
Line 205: Line 218:
! rowspan=1 | {{Cref|GWebCache}}
! rowspan=1 | {{Cref|GWebCache}}
! rowspan=1 | Cache d'hôte UDP
! rowspan=1 | Cache d'hôte UDP
! rowspan=1 | [[Tree Hash EXchange format (THEX)|THEX]]
! rowspan=1 | {{Cref||THEX}}
! rowspan=1 | [http://fr.wikipedia.org/wiki/Transport_Layer_Security TLS]
! rowspan=1 | [http://fr.wikipedia.org/wiki/Transport_Layer_Security TLS]
! rowspan=1 | Autres
! rowspan=1 | Autres
|-
|-
! {{rh2}} colspan=2 | [[BearShare]]<br />
! {{rh2}} colspan=2 | BearShare<br />
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Non}}
| {{no}}
| {{Non}}
| {{no}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Non}}
| {{no}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Non}}
| {{no}}
| {{Oui}}
| {{yes}}
| {{Non}}
| {{no}}
| - <br />
| - <br />
|-
|-
! {{rh2}} colspan=2 | [[giFT]] (coeur & plugins)
! {{rh2}} colspan=2 | giFT (coeur & plugins)
| {{Oui}}
| {{yes}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
| {{Non}}
| {{no}}
| {{Non}}
| {{no}}
| '''?'''
| '''?'''
| '''?'''
| '''?'''
| '''?'''
| '''?'''
| {{Non}}
| {{no}}
| {{Oui|Oui {{Cref|a}}}}
| {{yes|yes {{Cref|a}}}}
| {{Non}}
| {{no}}
| {{Non|Non {{Cref|b}}}}
| {{no|Non {{Cref|b}}}}
| {{Oui}}
| {{yes}}
| {{Non}}
| {{no}}
| {{Non}}
| {{no}}
| {{Non}}
| {{no}}
| -<br />
| -<br />
|-
|-
! {{rh2}} colspan=2 | [[GnucDNA]] {{Cref|c}}
! {{rh2}} colspan=2 | GnucDNA {{Cref|c}}
| {{Oui}}
| {{yes}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
| {{Non}}
| {{no}}
| {{Non}}
| {{no}}
| {{Non}}
| {{no}}
| {{Non}}
| {{no}}
| {{Non}}
| {{no}}
| {{Non}}
| {{no}}
| {{Oui}}
| {{yes}}
| {{Non}}
| {{no}}
| {{Non|Non {{cref|b}} }}
| {{no|Non {{cref|b}} }}
| {{Oui}}
| {{yes}}
| {{Non}}
| {{no}}
| {{Non}}
| {{no}}
| {{Non}}
| {{no}}
| - <br />
| - <br />
|-
|-
! {{rh}} colspan=2 | [[gtk-gnutella]]
! {{rh}} colspan=2 | gtk-gnutella
| {{Oui|Oui {{cref|d}}}}
| {{yes|yes {{cref|d}}}}
| {{Non}}
| {{no}}
| {{Non}}
| {{no}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Non}}
| {{no}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Non}} (tombé)
| {{no}} (tombé)
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| [http://fr.wikipedia.org/wiki/IPv6 IPv6], [[Table de hachage distribuée|THD]]
| [http://fr.wikipedia.org/wiki/IPv6 IPv6], [http://fr.wikipedia.org/wiki/Table_de_hachage_distribu%C3%A9e THD]
|-
|-
! {{rh2}} colspan=2 | [[LimeWire]]{{cref|h}}
! {{rh2}} colspan=2 | LimeWire{{cref|h}}
| {{Oui|Oui {{cref|d}}}}
| {{yes|yes {{cref|d}}}}
| {{Oui}}
| {{yes}}
| {{Oui|Gmail ou XMPP}}
| {{yes|Gmail ou XMPP}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Oui|Oui {{cref|e}} }}
| {{yes|yes {{cref|e}} }}
| {{Oui|Oui {{cref|g}} }}
| {{yes|yes {{cref|g}} }}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| [[Table de hachage distribuée|THD]]
| [http://fr.wikipedia.org/wiki/Table_de_hachage_distribu%C3%A9e THD]
|-
|-
! {{rh}} colspan=2 | [[Phex]]
! {{rh}} colspan=2 | Phex
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Non}}
| {{no}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Non}}
| {{no}}
| {{Oui|Oui {{cref|socks}} }}
| {{yes|yes {{cref|socks}} }}
| {{Non}}
| {{no}}
| {{Non}}
| {{no}}
| {{Oui}}
| {{yes}}
| {{Non}}
| {{no}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| [http://fr.wikipedia.org/wiki/I2P I2P]
| [http://fr.wikipedia.org/wiki/I2P I2P]
|-
|-
! {{rh}} colspan=2 | '''Shareaza'''
! {{rh}} colspan=2 | '''Shareaza'''
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Non}}
| {{no}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Non}}
| {{no}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Oui}}
| {{yes}}
| {{Oui|Oui {{cref|f}} }}
| {{yes|yes {{cref|f}} }}
| {{Oui}}
| {{yes}}
| {{Non}}
| {{no}}
| [[Gnutella2|G2]], [[BitTorrent (protocol)|BT]], [[eDonkey2000|eD2k]], [[IRC]]
| [[Gnutella2|G2]], [[BitTorrent (protocole)|BT]], [[eDonkey2000|eD2k]], [[IRC/fr|IRC]]
|}
|}


Line 346: Line 359:


{{Cnote|tChat|Se réfère au tchat client-à-client.}}
{{Cnote|tChat|Se réfère au tchat client-à-client.}}
{{Cnote|Mappage des ports UPnP|[http://en.wikipedia.org/wiki/Universal_Plug_and_Play]Configure automatiquement la redirection des ports (Requière un routeur qui supporte l'UPnP)}}
{{Cnote|Mappage des ports UPnP|[http://en.wikipedia.org/wiki/Universal_Plug_and_Play UPnP] Configure automatiquement la redirection des ports (Requière un routeur qui supporte l'UPnP)}}
{{Cnote|RUDP|[[Reliable User Datagram Protocol|Reliable UDP protocol]] Utilisé pour les transferts NAT-à-NAT; Parfois appelé Pare-feu-à-pare-feu}}
{{Cnote|**|En anglais}}
{{Cnote|GWebCache|[[GWebCache|->]] Le cache d'hôtes est la méthode d'[[Amorçage client (Bootstrapping)|amorçage]] privilégiée.}}
{{Cnote|RUDP|[http://en.wikipedia.org/wiki/Reliable_User_Datagram_Protocol Reliable UDP protocol]** Utilisé pour les transferts NAT-à-NAT; Parfois appelé Pare-feu-à-pare-feu}}
{{Cnote|GWebCache|[[GWC/fr|GWebCache]] Le cache d'hôtes est la méthode d'Amorçage client (Bootstrapping) privilégiée.}}
{{Cnote|THEX|Tree Hash EXchange format}}
{{Cnote|a|TCP Client seulement}}
{{Cnote|a|TCP Client seulement}}
{{Cnote|b|Degré sortant non élevé, donc inutilisable sous sa forme actuelle.}}
{{Cnote|b|Degré sortant non élevé, donc inutilisable sous sa forme actuelle.}}
{{Cnote|c|Version 0.9.2.7}}
{{Cnote|c|Version 0.9.2.7}}
{{Cnote|d|Via the [[Kademlia]] based Mojito DHT network only supported by LimeWire and gtk-gnutella (starting version r15750); completely different from [[SHA-1]] searches supported by all other gnutella clients.}}
{{Cnote|d|Via [http://fr.wikipedia.org/wiki/Kademlia Kademlia] (basé sur le [http://fr.wikipedia.org/wiki/Table_de_hachage_distribu%C3%A9e DHT] réseau Mojito) seulement supporté par LimeWire et gtk-Gnutella (à partir de la version r15750); complètement différent des recherches SHA-1 supporté par tous les autres clients Gnutella.}}
{{Cnote|e|Port triggering or ''firewall to firewall'' (FW2FW).}}
{{Cnote|e|Port triggering ou ''firewall à firewall'' (FW2FW).}}
{{Cnote|socks|Via un proxy [http://fr.wikipedia.org/wiki/SOCKS SOCKS] qui peut faire ''tunnel'' sur [http://fr.wikipedia.org/wiki/Secure_Shell SSH].}}
{{Cnote|socks|Via un proxy [http://fr.wikipedia.org/wiki/SOCKS SOCKS] qui peut faire ''tunnel'' sur [http://fr.wikipedia.org/wiki/Secure_Shell SSH].}}
{{Cnote|f|Depuis la version 2.2.4.0}}
{{Cnote|f|Depuis la version 2.2.4.0}}
{{Cnote|g|Automatique avec UPnP, ou en configuration manuelle dans les options "Pare-feu" de LimeWire.}}
{{Cnote|g|Automatique avec UPnP, ou en configuration manuelle dans les options "Pare-feu" de LimeWire.}}
{{Cnote|h|Comme le client LimeWire n'est officiellement plus disponible, des client tels que [[FrostWire]] qui sont basé sur le code de LimeWire peuvent être utilisés comme alternative.}}
{{Cnote|h|Comme le client LimeWire n'est officiellement plus disponible, des client tels que FrostWire qui sont basé sur le code de LimeWire peuvent être utilisés comme alternative.}}
*[[Morpheus]] Diffère de manière significative et peut-être complètement indépendant du code du moteur GnucDNA. Morpheus peut fonctionner comme un Ultrapair moderne tandis que les autres clients GnucDNA ne le peuvent pas.
*Morpheus Diffère de manière significative et peut-être complètement indépendant du code du moteur GnucDNA. Morpheus peut fonctionner comme un Ultrapair moderne tandis que les autres clients GnucDNA ne le peuvent pas.
*[[Gnucleus]] et [[Kiwi Alpha]] utilise le moteur de [[GnucDNA]].
*Gnucleus et Kiwi Alpha utilise le moteur de GnucDNA.
*[[BearFlix]] doit être similaire à [[BearShare]].
*BearFlix doit être similaire à BearShare.
*[[GiFTcurs]], [[Apollon]], [[FilePipe]], [[GiFToxic]], [[GiFTui]], [[GiFTwin32]], [[KCeasy]], [[Poisoned]], et [[Xfactor]] sont des Interface Graphique Utilisateur pour le moteur de [[giFT]].
*GiFTcurs, Apollon, FilePipe, GiFToxic, GiFTui, GiFTwin32, KCeasy, Poisoned, et Xfactor sont des Interface Graphique Utilisateur pour le moteur de giFT.
*[[Etomi]] utilise un réseau obsolète de Shareaza.
*Etomi utilise un réseau obsolète de Shareaza.
*360Share, LemonWire, MP3Torpedo, and DexterWire are the [[LimeWire]] package.
*360Share, LemonWire, MP3Torpedo, and DexterWire sont des paquets de LimeWire.
*[[FrostWire]] est presque identique à LimeWire; [[Acquisition]] et [[Cabos]] ont une Interface Utilisateur personnalisé mais qui utilise le moteur de [[LimeWire]].
*FrostWire est presque identique à LimeWire; Acquisition et Cabos ont une Interface Utilisateur personnalisé mais qui utilise le moteur de LimeWire.


== Références ==
== Références ==
Line 374: Line 389:
Source de cet article : http://en.wikipedia.org/wiki/Gnutella
Source de cet article : http://en.wikipedia.org/wiki/Gnutella


 
{{Nav2Fr|Networks and Hashes/fr}}
[[Catégorie:Protocoles Réseaux P2P]]

Latest revision as of 13:36, 26 April 2014

  Updated:

This page has been updated on 29 mars 2014 for the release of Shareaza v2.7.x.0.

e
  Contenu stable

Les informations de cette page s'appliquent à toutes les versions de Shareaza tant qu'il n'y a pas de modification majeur.

e

Présentation


Gnutella est un grand réseaux "pair-à-pairs" (P2P), qui au moment de sa création, fut le premier réseau P2P décentralisé. Plus tard, d'autres réseaux adoptèrent ce modèle. En juin 2005, Gnutella reliait 1,81 million d'ordinateur, pour passer au dessus des 3 millions de nœuds en janvier 2006. Dans le courant de l'année 2007, il était le plus populaire des réseaux de partage de fichiers sur internet avec une estimation de plus de 40% de part de marché.
Il célébra ses 10 ans le 14 mars 2010.

Le logo de Gnutella (G1)
Le logo de Gnutella (G1)


Histoire

Le premier client fut développé par Justin Frankel et Tom Pepper développeurs chez Nullsoft au début des années 2000. Le 14 mars 2000, le programme était disponible en téléchargement sur les serveurs de Nullsoft. Cet événement fut prématurément annoncé sur Slashdot(1.), Il y eu des milliers de téléchargements du programme ce jour là. Le code source fut libéré plus tard sous Licence publique générale GNU (GPL).

Le jour suivant, AOL qui venait d'acquérir Nullsoft, stoppa la mise à disposition du programme pour des préoccupations légales(2.). Nullsoft fut contraint de ne pas aller plus loin dans le projet. Cela ne stoppa pas Gnutella, après plusieurs jours, le code du protocole subit une rétro-ingénierie et des clones du logiciels libres et open-source firent leurs apparitions. Ce développement parallèle de différents clients, par différents groupes garde le même Modus operandi à ce jour.

Le réseau Gnutella est une réelle alternative aux système semi-centralisé tel que FastTrack (KaZaA) et à l'original Napster. La popularité initiale du réseau a été stimulée par Napster qui reçut des menaces légales en 2001.Cette montée en croissance de la popularité, a révélé les limites de l'adaptabilité du protocole initial. En 2001, une variation du protocole (première implémentation dans un logiciel propriétaire et aux sources fermées permis une amélioration d'adaptabilité. Au lieu de traiter tous les nœuds comme client et serveur, quelques nœuds ont été traités comme "super nœuds" (Ultrapairs), routant les requêtes de recherche et leur réponses pour les nœuds connectés à eux.

Cela permis au réseau de gagner encore plus en popularité. Fin 2001, le client Gnutella Limewire (Basic) sorti, gratuit et open source. En février 2002,la société éditrice de Morpheus, abandonne FastTrack et sorti un nouveau client basé sur un client Gnutella qui est libre et open source Gnucleus.

Aujourd'hui, le mot "Gnutella" se réfère pas au projet ou une parti du logiciel, mais au protocole ouvert utilisé par différents clients. Gnutella est un mot-valise formé de GNU et de Nutella (la pâte à tartiner), il est supposé que Frankel et Pepper en étaient gourmand sur le projet original, et destinaient leur programme à la Licence publique générale GNU. Gnutella n'est pas associé au projet GNU(3.) ou à son réseau Pair-à-pair GNUnet.

Conception

La connexion

Pour comprendre comment Gnutella fonctionne, imaginez un large cercle d'utilisateur (appelé Nœuds), qui ont un logiciel client Gnutella quel-qu'il soit.

A la connexion initiale, le logiciel client doit amorcer la connexion à un autre nœud. Pour cela Différentes méthodes sont utilisées:

  • Le client Gnutella possède une liste intégrée d'adresse IP de nœuds (appelé voisin ou hôtes) aux quelles, il est potentiellement capable de se connecter.
  • La mise à jour des web caches de nœuds (appelé Gnutella Web Cache (GWC))
  • Les caches UDP hôte et plus rarement via IRC

Une fois connecté, le client demande une liste fonctionnelle d'adresse. Il tente alors de se connecter aux nœuds de la liste reçue, aussi bien qu'aux nœuds dont il reçoit l'adresse depuis d'autres clients, jusqu'à ce qu'il atteigne un certain quota. Il se connecte toujours à plusieurs nœuds, mettant en caches les adresses de connexion possible qu'il n'a pas essayé et en supprimant les adresses avec qui, il n'a pas pu établir de connexion.

Les recherches

Quand un utilisateur effectue une recherche, le client Gnutella envoi une requête à chacun des nœuds activement connectés.
Dans la version 0.4 du protocole, le nombre de nœuds activement connectés pour un client était vraiment petit (autour de 5 pour 1), ainsi chaque nœud retransmet la requête à chacun des nœuds auxquels il est activement connecté et à leurs tours il retransmettent la requête, ainsi de suite... Ce jusqu'à ce que la requête atteigne un nombre de "bonds" pré-déterminé (maximum 7) par le client qui l'a envoyée .

La version 0.6, Gnutella est un réseau composite formé de nœuds "feuilles" et d'ultra nœuds (appelé UltraPairs (UltraPeers en anglais)). Les feuilles sont connectées à un petit nombre d'UltraPairs (typiquement 3) tandis qu'un UltraPair peut être connecté à plus de 32 autres UltraPairs.

Feuilles et ultrapairs utilise un Protocole de Routage de Requêtes (Query Routing Protocol ou QRP) pour échanger des Tables de Routage de Requêtes (QRT) constituées de mots clés hachés. Une feuille envoi sa QRT à chacun des ultrapairs auquels il est connecté, puis les UltraPairs combinent les QRT reçues de leurs feuilles, plus leurs QRT (s'ils partagent des fichiers) et les échangent avec leurs voisins.

Ainsi un client interrogeant un ultrapeer peut rechercher sur 30 autres clients avec une seule requête. Si la requête est retransmise aux 30 autres ultrapeers auquel il est connecté, sa recherche atteint le contenu de 900 clients... Autre point non négligeable, les clients ne reçoivent plus de requêtes de recherche, on dit qu'ils sont protégés par leur ultrapair. Cela permet en outre aux utilisateurs connectés à Internet en bas débit de pouvoir utiliser Gnutella sans diminuer leurs performances.

Si une recherche retourne des résultats, le nœud qui possède le fichier contacte le nœud initiateur de la recherche. Dans le protocole classique de Gnutella, les messages de réponse suivent le même parcours que que la requête de recherche, car la requête ne contient pas de données permettant d'identifier l'hôte initiateur de la recherche. Ce schéma, fut révisé plus tard... Car maintenant, la requête contient l'adresse IP et le numéro de port de l'hôte, ainsi les résultats de recherches sont directement délivré à l'hôte initiateur de la recherche via l'UDP par l'ultrapair du nœud. Cela permet de diminuer la somme de trafic acheminé par le réseau Gnutella.

Chemin effectué par une requête (en vert) de recherche et sa réponse (en rouge).

Si un utilisateur décide de télécharger un fichier, son client Gnutella et le client dépositaire du fichier négocient un transfert de fichier. Si le nœud qui possède le fichier n'est pas derrière un pare-feu, le deux clients peuvent se connecter directement et procéder à l'échange de fichier. Si par contre le dépositaire (la source) du fichier est derrière un pare-feu, celui-ci ne peut pas recevoir les connexions entrantes. Le client qui recherche le fichier est obligé d'envoyer une "requête poussée" à l'ultrapair pour demander à l'hôte distant d'initier la connexion à sa place.

Auparavant, cette "requête poussée" suivait le parcours inverse qu'avait parcouru la requête. Cela était un parcours incertain, car de nombreux hôtes par lesquels la requêtes était passé se déconnectaient et brisaient la connexion, et les paquets acheminés sont toujours soumis à un contrôle de flux.

Par conséquent ce que l'on appelle des "proxys poussés" a été introduits. Ce sont généralement les ultrapeers d'un nœud feuille et ils sont annoncés dans les résultats de recherche. Le client se connecte à l'un de ces "proxys poussés" à l'aide d'une requête HTTP et le proxy envoie une "demande poussé" à la source du fichier pour le compte du client demandeur. Normalement, il est également possible d'envoyer une requête poussée via l'UDP au proxy poussé ce qui est plus efficace que d'utiliser le protocole TCP.

Les proxys poussés ont deux avantages :

  • Les connexions UltraPairs - feuilles sont plus stables, les parcours que font les requêtes poussées sont beaucoup plus fiable.
  • Il réduit le volume du trafic acheminé par le réseau Gnutella.

Enfin, quand un utilisateur se déconnecte, le logiciel client enregistre la liste des nœuds à qui il était activement connecté et celles recueillies à partir des paquets pong pour les utiliser à sa prochaine tentative de connexion afin de devenir indépendant de toute forme de services d'amorçage.

En pratique, cette méthode de recherche sur le réseau Gnutella est peu fiable. Chaque nœud est l'ordinateur d'un utilisateur et en tant que tel, ils se connectent et se déconnectent constamment, de fait le réseau n'est jamais complétement stable. En outre, le volume de bande passante sur Gnutella pour les requêtes de recherches a connue croissance exponentielle du nombre d'utilisateurs connectés, saturant souvent les connexions et rendant lents les nœuds inutiles.

Par conséquent, les requêtes de recherches sont souvent lâchées et les requêtes restantes n'atteignent qu'un petite partie du réseau. Cette observation identifie le réseau Gnutella comme un système distribué inextensible et à inspiré le développement des "Tables de hachage distribuées" qui sont beaucoup plus extensibles mais qui ne supportent uniquement qu'une correspondance exacte, plutôt que des les mots clés d'une recherche.

Pour résoudre les problèmes de goulots d'étranglement , les développeurs de gnutella ont mis en place un système à plusieurs niveaux d'ultrapairs et de feuilles. Plutôt que tous les nœuds soient considérés comme égaux, les nœuds entrant sur le réseau ont été maintenus "en marge" du réseaux comme feuilles, non responsables de l'acheminement. Les nœuds capables de router les messages furent promus UltraPairs acceptant la connexion des feuilles et routant les requêtes de recherche ainsi que les messages de maintenance du réseau. Cela permet aux requêtes de recherches de se propager davantage à travers le réseau et permis de nombreuses modifications dans la topologie qui ont amélioré grandement l'efficacité et l'extensibilité.

En outre, Gnutella a adopté un certain nombre d'autres techniques pour résoudre la surcharge de trafic et rendre les recherches plus efficaces. Notamment le Protocole de Routage des Requêtes (Query Routing Protocol ou QRP) et les Requêtes Dynamiques (Dynamic Querying ou DQ). Avec QRP, les recherches n'atteignent seulement que clients qui sont susceptible de posséder le fichier recherché. de fait, les recherches de fichiers 'rares' deviennent plus efficaces. Avec DQ les recherches s'arrêtent aussitôt que le programme trouve suffisamment de résultats, ce qui réduit significativement la somme du trafic causé par les recherches "populaires".

Un des avantages que possède Gnutella est sa décentralisation, il serait extrêmement difficile de faire tomber son réseau contrairement à Napster qui avait son réseau entier de connecté à un serveur central qui, en son temps fut facile de faire fermé par les ayants droits. Gnutella ne peut être arrêté par la fermeture de quelques nœuds et il est impossible pour une compagnie de prendre le contrôle du contenu partagé sur le réseau dont seuls les utilisateurs sont dépositaires, qui est également due aux nombreux clients Gnutella libre et open source qui se partagent le réseau.

Caractéristiques et Extensions du Protocole

Comme nous l'avons vu plus haut, le protocole Gnutella a purement fonctionné à base de requêtes d'inondation, dans sa version 0.4, le protocole réseau utilise cinq différents types de paquets :

  • les pings : pour la découverte des hôtes sur le réseau
  • les pongs : qui est la réponse aux ping
  • les requêtes : pour la recherche de fichier
  • les hits de requête : qui est la réponse a la requête
  • poussée (push) : qui est la requête au téléchargement derrière un pare-feu

Ce sont les paquets concernés principalement par la recherche du réseau Gnutella. Les transferts de fichiers sont gérés via le protocole HTTP.

Le développement du protocole Gnutella est actuellement dirigé par les "GDF" (Gnutella Developers Forum). Plusieurs extension du protocole ont été et sont développées par des éditeurs de logiciels et par les développeurs libre du GDF. Ces extensions inclues le routage intelligent des requêtes,la somme de contrôle SHA-1, les hits de requêtes via l'UDP, l'interrogation via UDP , les requêtes dynamiques via le TCP, le transfert de fichier via l'UDP, les métadonnéesXML, l'échange de source et le téléchargement parallèle en tranches ('essaimage').

Il y eu des efforts pour finaliser ces extensions de spécifications du protocole Gnutella 0.6 sur le site de développement. La version 0.4 de Gnutella -bien qu'étant toujours la dernière spécification du protocole- est obsolète, puisque toutes les extensions existent que sous la forme de propositions. Dans les fait, il serait extrêmement difficile voir impossible aujourd'hui de se connecter avec la poignée de main de la version 0.4.

Le protocole Gnutella est toujours en cours de développement et en dépit des tentatives de faire une rupture nette avec la complexité héritée de l'ancienne version gnutella 0.4 et de concevoir une nouvelle architecture. Gnutella est encore l'un des protocoles les plus réussies de partage de fichiers à ce jour.

Logiciels

Les tableaux suivants comparent les informations générales et techniques de plusieurs applications qui supportent le réseau Gnutella.Ils n'ont pas pour vocation de donner une liste complète des clients Gnutella, ils sont limités aux clients qui sont capables de participer actuellement au réseau Gnutella.

Spécifications Générales

Nom Environnement Licence Héritage
Acquisition Mac OS X Propriétaire LimeWire
BearShare
(Avant la Version 6)
Microsoft Windows Propriétaire Travail Original
BearFlix Microsoft Windows Propriétaire BearShare
Cabos Java GNU GPL LimeWire
FilesWire Java Propriétaire Travail Original
FrostWire Java GNU GPL LimeWire
giFT
(plugin Gnutella)
Multi plate-forme GNU GPL Travail Original
Gnucleus Microsoft Windows GNU GPL, GNU LGPL Travail Original
Gtk-gnutella Type Unix, Mac OS X, Microsoft Windows GNU GPL Travail Original
iMesh
(Avant la Version 6)
Microsoft Windows Propriétaire GnucDNA
KCeasy Microsoft Windows GNU GPL giFT
Kiwi Alpha Microsoft Windows GnucDNA
LimeWire Java GNU GPL Travail Original
Morpheus Microsoft Windows Propriétaire GnucDNA
Phex Java GNU GPL Travail Original
Poisoned] Mac OS X GNU GPL giFT
Shareaza Microsoft Windows GNU GPL Travail Original
Symella Symbian OS GNU GPL Travail Original
Zultrax Microsoft Windows Propriétaire Travail Original

Caractéristiques des clients Gnutella

Clients Recherche
à partir
du hache
tChat
[-›]
Liste d'amis Manipulation des
fichiers larges
(> 4 Gio)
Unicode-compatible
Routage requêtes
Mappage des ports UPnP
[-›]
NAT traversal**
[-›]
NAT port mapping RUDP
[-›]
Proxy poussé TCP Proxy poussé UDP Ultrapair GWebCache
[-›]
Cache d'hôte UDP
[-›]
TLS Autres
BearShare
Yes


Yes


Yes


No No Yes


Yes


Yes


Yes


Yes


No Yes


Yes


No Yes


No -
giFT (coeur & plugins) Yes


N/A N/A No No ? ? ? No yes a
[-›]


No Non b
[-›]
Yes


No No No -
GnucDNA c
[-›]
Yes


N/A N/A No No No No No No Yes


No Non b
[-›]
Yes


No No No -
gtk-gnutella yes d
[-›]


No No Yes


Yes


Yes


Yes


Yes


No Yes


Yes


Yes


No (tombé) Yes


Yes


Yes


IPv6, THD
LimeWireh
[-›]
yes d
[-›]


Yes


Gmail ou XMPP


Yes


Yes


Yes


yes e
[-›]


yes g
[-›]


Yes


Yes


Yes


Yes


Yes


Yes


Yes


Yes


THD
Phex Yes


Yes


No Yes


Yes


No yes socks
[-›]


No No Yes


No Yes


Yes


Yes


Yes


Yes


I2P
Shareaza Yes


Yes


Yes


Yes


No Yes


Yes


Yes


No Yes


Yes


Yes


Yes


yes f
[-›]


Yes


No G2, BT, eD2k, IRC

Notes

  •  tChat : Se réfère au tchat client-à-client.
  •  Mappage des ports UPnP : UPnP Configure automatiquement la redirection des ports (Requière un routeur qui supporte l'UPnP)
  •  GWebCache : GWebCache Le cache d'hôtes est la méthode d'Amorçage client (Bootstrapping) privilégiée.
  •  THEX : Tree Hash EXchange format
  •  a : TCP Client seulement
  •  b : Degré sortant non élevé, donc inutilisable sous sa forme actuelle.
  •  c : Version 0.9.2.7
  •  d : Via Kademlia (basé sur le DHT réseau Mojito) seulement supporté par LimeWire et gtk-Gnutella (à partir de la version r15750); complètement différent des recherches SHA-1 supporté par tous les autres clients Gnutella.
  •  e : Port triggering ou firewall à firewall (FW2FW).
  •  socks : Via un proxy SOCKS qui peut faire tunnel sur SSH.
  •  f : Depuis la version 2.2.4.0
  •  g : Automatique avec UPnP, ou en configuration manuelle dans les options "Pare-feu" de LimeWire.
  •  h : Comme le client LimeWire n'est officiellement plus disponible, des client tels que FrostWire qui sont basé sur le code de LimeWire peuvent être utilisés comme alternative.
  • Morpheus Diffère de manière significative et peut-être complètement indépendant du code du moteur GnucDNA. Morpheus peut fonctionner comme un Ultrapair moderne tandis que les autres clients GnucDNA ne le peuvent pas.
  • Gnucleus et Kiwi Alpha utilise le moteur de GnucDNA.
  • BearFlix doit être similaire à BearShare.
  • GiFTcurs, Apollon, FilePipe, GiFToxic, GiFTui, GiFTwin32, KCeasy, Poisoned, et Xfactor sont des Interface Graphique Utilisateur pour le moteur de giFT.
  • Etomi utilise un réseau obsolète de Shareaza.
  • 360Share, LemonWire, MP3Torpedo, and DexterWire sont des paquets de LimeWire.
  • FrostWire est presque identique à LimeWire; Acquisition et Cabos ont une Interface Utilisateur personnalisé mais qui utilise le moteur de LimeWire.

Références

1. Annonce de la sortie de Gnutella sur Slashdot (en anglais)
2. AOL et Gnutella par CNN
3. Quant à Gnutella(www.gnu.org)

Source de cet article : http://en.wikipedia.org/wiki/Gnutella



Navigation:     Page d'accueil > Networks and Hashes/fr > Gnutella/fr