Gnutella2/fr: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
{{Languages|Gnutella2}} | {{Languages|Gnutella2}} | ||
'''Présentation'''<br /> | '''Présentation'''<br /> | ||
'''Gnutella2''', aussi appelé G2 est un protocole P2P initialement développé et publié en 2002 par Michael Stokes. Inspiré par le protocole [[Gnutella]], ils ne partagent que deux points communs, les poignée de mains et les mécanismes de téléchargement | '''Gnutella2''', (aussi appelé G2) est un protocole P2P initialement développé et publié en 2002 par Michael Stokes. Inspiré par le protocole [[Gnutella/fr|Gnutella]], ils ne partagent que deux points communs, les poignée de mains et les mécanismes de téléchargement . | ||
Il adopte un format de paquet binaire extensible et un [http://fr.wikipedia.org/wiki/Algorithmique algorithme] de recherche des fichiers entièrement nouveau, de plus il dispose d'une topologie réseau légèrement différente et d'une amélioration du système des [http://fr.wikipedia.org/wiki/M%C3%A9tadonn%C3%A9e métadonnées] qui contribue efficacement à réduire le nombre de | Il adopte un format de paquet binaire extensible et un [http://fr.wikipedia.org/wiki/Algorithmique algorithme] de recherche des fichiers entièrement nouveau, de plus il dispose d'une topologie réseau légèrement différente et d'une amélioration du système des [http://fr.wikipedia.org/wiki/M%C3%A9tadonn%C3%A9e métadonnées] qui contribue efficacement à réduire le nombre de faux fichiers et fichiers [http://fr.wikipedia.org/wiki/Virus_informatique douteux] (virus, troyen, etc...) dans les résultats de recherche. | ||
[[Image:Gnutella2 logo.gif|border|right|280x250px|Le logo de Gnutella2]] | [[Image:Gnutella2 logo.gif|border|right|280x250px|Le logo de Gnutella2]] | ||
== Histoire== | == Histoire== | ||
En novembre 2002, [[Michael Stokes]] annonça sur le '''Forum des Développeurs de Gnutella''' la sortie de Gnutella2. Alors que certains pensaient que le but principale de ce développement était de faire une rupture totale avec le protocole [[Gnutella]] 0.6 et de | En novembre 2002, [[Mike/fr|Michael Stokes]] annonça sur le '''Forum des Développeurs de Gnutella''' la sortie de Gnutella2. Alors que certains pensaient que le but principale de ce développement était de faire une rupture totale avec le protocole [[Gnutella]] 0.6 et de reprendre sur de nouvelles bases, les parties les moins "''propres'' de Gnutella ". | ||
D'autres, principalement les développeurs de [http://fr.wikipedia.org/wiki/LimeWire LimeWire] et de [http://fr.wikipedia.org/wiki/BearShare BearShare], pensaient qu'il s'agissait d'une "''opération publicitaire bon marché''" et doutaient du mérite technique. Encore aujourd'hui, beaucoup refuse de l'appeler le "réseau Gnutella2", ils préfèrent l'appeler le "protocole de Mike". | |||
Le protocole Gnutella2 utilise les anciennes chaînes de poignée de main de Gnutella 0.6 pour ses connexions comme elles sont définies dans les spécifications de Gnutella0.6, ce qui a été perçu par les développeurs du GDF, comme une tentative d'utiliser le réseau Gnutella pour l'[http://fr.wikipedia.org/wiki/Amor%C3%A7age_d%27un_ordinateur amorçage] de Gnutella2, tandis que les partisans affirmaient que l'intension était de rester compatible pour permettre aux [[Gnutella/fr#Sp.C3.A9cifications_G.C3.A9n.C3.A9rales clients Gnutella]] actuels de pouvoir ajouter Gnutella2 s'ils le souhaitaient. | |||
L'ébauche des spécifications ont été publié le 26 mars 2003, puis des spécifications plus détaillées suivirent rapidement | Malheureusement, les détracteurs restèrent sur leurs position et entamèrent une "[http://fr.wikipedia.org/wiki/Flaming_%28informatique%29 ''flame war'']", enfermant davantage chaques parties dans leurs retranchements. | ||
Gnutella2 n'est pas supporté par la plupart des "anciens" clients du réseau Gnutella, cependant de nombreux clients Gnutella2 se connecte toujours à Gnutella. Beaucoup de partisans de Gnutella2 prétendent que c'est pour des raisons politiques, alors que les partisans de gnutella prétendent que les changements radicaux n'ont pas assez de valeur pour l'emporter sur le coût d'une réécriture profonde du code. | |||
L'ébauche des spécifications ont été publié le 26 mars 2003, puis des spécifications plus détaillées suivirent rapidement. | |||
Gnutella2 n'est pas supporté par la plupart des "anciens" clients du réseau Gnutella, cependant de nombreux clients Gnutella2 se connecte toujours à Gnutella. Beaucoup de partisans de Gnutella2 prétendent que c'est pour des ''raisons politiques'', alors que les partisans de gnutella prétendent que les changements radicaux n'ont pas assez de valeur pour l'emporter sur le coût d'une réécriture profonde du code. | |||
== Conception == | == Conception == | ||
Gnutella2 divise les | Gnutella2 divise les ''nœuds'' en deux groupes distincts : Feuilles et Hubs. En règle générale, les feuilles maintiennent une connexion avec 2 hubs tandis que les hubs acceptent la connexion à plusieurs centaines de feuilles ainsi qu'à sept autres hubs. <br /> | ||
===La connexion=== | ===La connexion=== | ||
De la même façon que [[Gnutella]], pour se connecter le client Gnutella2 peut procéder de plusieurs façon : <br /> | De la même façon que [[Gnutella]], pour se connecter le client Gnutella2 peut procéder de plusieurs façon : <br /> | ||
*Le client G2 possède une liste intégrée d'hôtes (appelé cache d'hôte) auxquels il est potentiellement capable de se connecter | *Le client G2 possède une liste intégrée d'hôtes (appelé cache d'hôte) auxquels il est potentiellement capable de se connecter | ||
*Via l'interrogation et la mise à jour des web cache (appelé [[Gnutella Web Cache]] ou GWC). | *Via l'interrogation et la mise à jour des web cache (appelé [[GWC/fr|Gnutella Web Cache]] ou GWC). | ||
Lorsqu'une tentative de connexion est initiée, le nœud interroge sa liste d'hôte potentiellement capable de lui offrir une connexion. Cette liste est interrogé hubs par hub jusqu'à ce que la connexion puisse être établie, tout en supprimant du cache les hôtes qui ont refusé la connexion. Si la liste d'hôte potentiel arrive à son terme et qu'aucune connexion n'a pu être réalisée, le client G2 interroge alors les [[ | Lorsqu'une tentative de connexion est initiée, le nœud interroge sa liste d'hôte potentiellement capable de lui offrir une connexion. Cette liste est interrogé hubs par hub jusqu'à ce que la connexion puisse être établie, tout en supprimant du cache les hôtes qui ont refusé la connexion. Si la liste d'hôte potentiel arrive à son terme et qu'aucune connexion n'a pu être réalisée, le client G2 interroge alors les [[GWC/fr|GWebCaches]] pour obtenir ainsi une nouvelle liste d'hôte potentiel, ce jusqu'à ce qu'une connexion puisse être établie.<br /> | ||
Une fois la connexion établie, le client Gnutella2 demande aux hubs auxquels il est connecté une liste d'autres hubs potentiels et ainsi | Une fois la connexion établie, le client Gnutella2 demande aux hubs auxquels il est connecté une nouvelle liste d'autres hubs potentiels et ainsi met à jour son cache d'hôtes. | ||
===les recherches=== | ===les recherches=== | ||
Lorsqu'une recherche est lancée, le nœud obtient une liste de hubs qu'il contact, jusqu'à épuisement de la liste, ou jusqu'à ce qu'une limite prédéfinie soit atteint. Cela permet à un utilisateur de chercher facilement un fichier populaire sans surcharger le réseau et théoriquement, maintenir la capacité pour un utilisateur de trouver un fichier où qu'il soit sur le réseau. | Lorsqu'une recherche est lancée, le nœud obtient une liste de hubs qu'il contact, jusqu'à épuisement de la liste, ou jusqu'à ce qu'une limite prédéfinie soit atteint. Cela permet à un utilisateur de chercher facilement un fichier populaire sans surcharger le réseau et théoriquement, maintenir la capacité pour un utilisateur de trouver un fichier où qu'il soit sur le réseau. | ||
Les Hubs indexent les fichiers que possèdent les feuilles au moyen d'une Table de Routage des Requêtes (Query Routing Table) qui est rempli d'entrées à un seul [http://fr.wikipedia.org/wiki/Bit bit] du | Les Hubs indexent les fichiers que possèdent les feuilles au moyen d'une Table de Routage des Requêtes (Query Routing Table) qui est rempli d'entrées à un seul [http://fr.wikipedia.org/wiki/Bit bit] du hache des mots clé correspondant aux fichiers. Ensuite, le Hub combine toutes les tables de haches reçues des ses feuilles et les transmet aux Hubs voisins. Cela permet de réduire l'utilisation de la bande passante, simplement, en ne transférant pas les requêtes de recherches aux feuilles et aux Hubs voisins s'il n'y a pas de correspondance dans les table de routage. | ||
Gnutella2 s'appuie largement sur l'[http://fr.wikipedia.org/wiki/User_Datagram_Protocol UDP] plutôt que sur le [http://fr.wikipedia.org/wiki/Transmission_Control_Protocol TCP] pour les recherches. La charge d'une mise en place une connexion TCP ferait un système de recherche en [http://fr.wikipedia.org/wiki/Marche_aléatoire marche aléatoire] demandant de contacter un grand nombre de nœuds avec un faible volume de données. Cependant, UDP n'est pas sans inconvénients, car il est sans connexion et il n'existe aucune méthode standard pour informer le client expéditeur qu'il a reçu un message, ou pour lui indiquer que le paquet a été perdu. C'est pour cette raison que les paquets UDP de Gnutella2 possèdent ''un marqueur'', cela afin de permettre un paramètre de fiabilité. Quand un paquet UDP doté de ce marqueur de fiabilité est reçu, le client répond avec un paquet ''accusé de réception'' pour informer le client expéditeur que le paquet est arrivé a destination. Si l'accusé de réception n'est pas envoyé, un paquet fiable sera envoyé, dans la tentative d'assurer la livraison. Les paquets de moindre importance dont le marqueur n'est pas activé ne requièrent pas d'accusé de réception, ce qui réduit la fiabilité mais qui réduit aussi la charge des paquets accusés de réception qui doivent être envoyés. | Gnutella2 s'appuie largement sur l'[http://fr.wikipedia.org/wiki/User_Datagram_Protocol UDP] plutôt que sur le [http://fr.wikipedia.org/wiki/Transmission_Control_Protocol TCP] pour les recherches. La charge d'une mise en place une connexion TCP ferait un système de recherche en [http://fr.wikipedia.org/wiki/Marche_aléatoire marche aléatoire] demandant de contacter un grand nombre de nœuds avec un faible volume de données. Cependant, UDP n'est pas sans inconvénients, car il est sans connexion et il n'existe aucune méthode standard pour informer le client expéditeur qu'il a reçu un message, ou pour lui indiquer que le paquet a été perdu. C'est pour cette raison que les paquets UDP de Gnutella2 possèdent ''un marqueur'', cela afin de permettre un paramètre de fiabilité. Quand un paquet UDP doté de ce marqueur de fiabilité est reçu, le client répond avec un paquet ''accusé de réception'' pour informer le client expéditeur que le paquet est arrivé a destination. Si l'accusé de réception n'est pas envoyé, un paquet fiable sera envoyé, dans la tentative d'assurer la livraison. Les paquets de moindre importance dont le marqueur n'est pas activé ne requièrent pas d'accusé de réception, ce qui réduit la fiabilité mais qui réduit aussi la charge des paquets accusés de réception qui doivent être envoyés. | ||
==Caractéristiques du Protocole == | ==Caractéristiques du Protocole == | ||
'''Gnutella2''' possède un format de paquet binaire extensible, comparable à l'arbre d'un document [http://fr.wikipedia.org/wiki/Extensible_Markup_Language XML] qui a été conçu comme une réponse aux parties les moins élégantes de [[Gnutella]]. Le format des paquet a été conçu de sorte à ce que toutes améliorations et/où fonctionnalités futures puissent être ajoutés sans souci de générer de bogues aux autres clients du réseau. | '''Gnutella2''' possède un format de paquet binaire extensible, comparable à l'arbre d'un document [http://fr.wikipedia.org/wiki/Extensible_Markup_Language XML] qui a été conçu comme une réponse aux parties les moins élégantes de [[Gnutella]]. Le format des paquet a été conçu de sorte à ce que toutes améliorations et/où fonctionnalités futures puissent être ajoutés sans souci de générer de bogues aux autres clients du réseau. <br /> | ||
<br /> | <br /> | ||
La [[fonction de hachage]] [[SHA-1]] est utilisé pour l'identification et la vérification d'intégrité d'un fichier. Cela permet à un fichier d'être téléchargé parallèlement auprès de sources multiples de façon fiable, alors que les [[Arbre de Hachage|Tiger tree hashes]] (TTH) sont utilisés pour permettre l'envoi de parties fiables du fichier qui est téléchargé ([[essaimage]]).<ref name="G2 standard">[http://g2.trillinux.org/index.php?title=Gnutella2_Standard Gnutella2 Standard] (en anglais)</ref><br /> | La [[fonction de hachage]] [[SHA-1]] est utilisé pour l'identification et la vérification d'intégrité d'un fichier. Cela permet à un fichier d'être téléchargé parallèlement auprès de sources multiples de façon fiable, alors que les [[Arbre de Hachage|Tiger tree hashes]] (TTH) sont utilisés pour permettre l'envoi de parties fiables du fichier qui est téléchargé ([[essaimage]]).<ref name="G2 standard">[http://g2.trillinux.org/index.php?title=Gnutella2_Standard Gnutella2 Standard] (en anglais)</ref><br /> | ||
Line 71: | Line 73: | ||
! rowspan="1" | Héritage | ! rowspan="1" | Héritage | ||
|- | |- | ||
! valign="middle" align="center" rowspan="1" | | ! valign="middle" align="center" rowspan="1" | Adagio | ||
| valign="middle" align="center" | Multi Plate-forme | | valign="middle" align="center" | Multi Plate-forme | ||
| 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" | | | valign="middle" align="center" | | ||
|- | |- | ||
! valign="middle" align="center" rowspan="1" | | ! valign="middle" align="center" rowspan="1" | Gnucleus | ||
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Microsoft_Windows Microsoft Windows] | | valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Microsoft_Windows 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" | [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] | ||
Line 149: | Line 151: | ||
|- | |- | ||
! {{rh2}} colspan=2 | '''[[Adagio]]''' | ! {{rh2}} colspan=2 | '''[[Adagio]]''' | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{Yes}} | ||
| {{ | | {{No}} | ||
| {{ | | {{Yes}} | ||
| {{N/a}} | | {{N/a}} | ||
| <br />-<br /> | | <br />-<br /> | ||
Line 164: | Line 166: | ||
|- | |- | ||
! {{rh}} colspan=2 | '''[[Foxy]]''' | ! {{rh}} colspan=2 | '''[[Foxy]]''' | ||
| {{ | | {{Yes}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{Yes}} | ||
| {{ | | {{Yes}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{Yes}} | ||
| {{Partiel|Foxy<ref>Foxy n'est pas compatible avec d'autres clients Gnutella2. Les clients Foxy n'acceptent pas de connexion provenant d'autres clients</ref>}} | | {{Partiel|Foxy<ref>Foxy n'est pas compatible avec d'autres clients Gnutella2. Les clients Foxy n'acceptent pas de connexion provenant d'autres clients</ref>}} | ||
| {{ | | {{No}} | ||
| {{N/a}} | | {{N/a}} | ||
| [[GnucDNA]] | | [[GnucDNA]] | ||
Line 179: | Line 181: | ||
|- | |- | ||
! {{rh}} colspan=2 | '''[[FileScope]]''' | ! {{rh}} colspan=2 | '''[[FileScope]]''' | ||
| {{ | | {{Yes}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{Yes}} | ||
| {{ | | {{Yes}} | ||
| {{ | | {{Yes}} | ||
| {{ | | {{Yes}} | ||
| {{ | | {{Yes|[[gnutella]],<br />[[eD2k]],<br />[[OpenNap]]}} | ||
| - | | - | ||
| - | | - | ||
|- | |- | ||
! {{rh}} colspan=2 | '''[[Gnucleus]]''' | ! {{rh}} colspan=2 | '''[[Gnucleus]]''' | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{Yes}} | ||
| {{ | | {{No}} | ||
| {{ | | {{Yes}} | ||
| {{ | | {{Yes|[[gnutella]]}} | ||
| [[GnucDNA]] | | [[GnucDNA]] | ||
| <br />-<br /> | | <br />-<br /> | ||
|- | |- | ||
! {{rh2}} colspan=2 | '''[[Kiwi Alpha]]''' | ! {{rh2}} colspan=2 | '''[[Kiwi Alpha]]''' | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{Yes}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{Yes|[[gnutella]]}} | ||
| [[GnucDNA]] | | [[GnucDNA]] | ||
| <br />-<br /> | | <br />-<br /> | ||
Line 229: | Line 231: | ||
|- | |- | ||
! {{rh2}} colspan=2 | '''[[Morpheus]]''' | ! {{rh2}} colspan=2 | '''[[Morpheus]]''' | ||
| {{ | | {{Yes}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{Yes}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{Yes|[[gnutella]],<br />[[NEOnet]]}} | ||
| [[GnucDNA]] | | [[GnucDNA]] | ||
| <small>Le développement et l'hébergement<br /> du client ont été arrêté.</small> | | <small>Le développement et l'hébergement<br /> du client ont été arrêté.</small> | ||
|- | |- | ||
! {{rh}} colspan=2 | '''Shareaza''' | ! {{rh}} colspan=2 | '''Shareaza''' | ||
| {{ | | {{Yes}} | ||
| {{ | | {{Yes}} | ||
| {{ | | {{Yes}}<ref>depuis la version 2.2.4.0</ref> | ||
| {{ | | {{Yes}} | ||
| {{ | | {{Yes}} | ||
| {{ | | {{No}} | ||
| {{ | | {{Yes}} | ||
| {{ | | {{Yes}} | ||
| {{ | | {{Yes}} | ||
| {{ | | {{Yes}} | ||
| {{ | | {{Yes|[[gnutella]],<br />[[eD2k]],<br />[[BitTorrent]]}} | ||
| - | | - | ||
| Intègre le support [[IRC]] | | Intègre le support [[IRC]] | ||
|- | |- | ||
! {{rh}} colspan=2 | '''[[Sharelin]]''' | ! {{rh}} colspan=2 | '''[[Sharelin]]''' | ||
| {{ | | {{No}} | ||
| {{ | | {{Yes}} | ||
| {{ | | {{Yes}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{Yes}} | ||
| {{ | | {{No}} | ||
| {{ | | {{Yes}} | ||
| {{N/a}} | | {{N/a}} | ||
| - | | - | ||
Line 274: | Line 276: | ||
|- | |- | ||
! {{rh}} colspan=2 | '''[[TrustyFiles]]''' | ! {{rh}} colspan=2 | '''[[TrustyFiles]]''' | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{No}} | ||
| {{ | | {{Yes}} | ||
| {{ | | {{No}} | ||
| {{non|<small>supprimable<br />dans la version<br />commerciale<br />(29$US)</small>}} | | {{non|<small>supprimable<br />dans la version<br />commerciale<br />(29$US)</small>}} | ||
| {{ | | {{Yes|[[eD2k]],<br />[[Overnet]],<br />[[BitTorrent]],<br />[[gnutella]]}} | ||
| [[GnucDNA]]<br />(partiellement) | | [[GnucDNA]]<br />(partiellement) | ||
| - | | - | ||
Line 296: | Line 298: | ||
{{Cnote|Prévisualisations| Depuis la recherche et les téléchargements}} | {{Cnote|Prévisualisations| Depuis la recherche et les téléchargements}} | ||
==Références == | ==Références == | ||
* [http://groups.yahoo.com/group/the_gdf/message/15113 Discussion des développeurs du GDF ('''G'''nutella '''D'''evelopers '''F'''orum) sur les similarités entre Gnutella et Gnutella2] (en anglais). | |||
Source de cet article : http://en.wikipedia.org/wiki/Gnutella2 | * [http://groups.yahoo.com/group/the_gdf/message/11933 Discussion des développeurs du GDF à propos du nom '''Gnutella2'''] (en anglais). | ||
* [http://groups.yahoo.com/group/the_gdf/message/13932 Part of the Gnutella/Gnutella2 Flame War (1)](en anglais). | |||
* [http://groups.yahoo.com/group/the_gdf/message/13942 Part of the Gnutella/Gnutella2 Flame War (2)](en anglais). | |||
* [http://groups.yahoo.com/group/the_gdf/message/13946 Part of the Gnutella/Gnutella2 Flame War (3)](en anglais). | |||
* [http://groups.yahoo.com/group/the_gdf/message/13950 Part of the Gnutella/Gnutella2 Flame War (4)](en anglais). | |||
* [http://groups.yahoo.com/group/the_gdf/message/11921 Discussion à propos de la migration vers Gnutella2] (en anglais). | |||
* [http://crawler.trillinux.org/history.html Histoire du réseau G2] (en anglais). | |||
* [http://g2.trillinux.org/index.php?title=Packet_Structure Structure des Paquets] (en anglais). | |||
* Source de cet article : http://en.wikipedia.org/wiki/Gnutella2 (en anglais). | |||
== Liens externes == | == Liens externes == |
Revision as of 16:32, 25 March 2014
Languages: |
English • Deutsch • Español • Français • עברית • Italiano • Nederlands • Polski • Português • Русский • 中文(繁體) | e |
Présentation
Gnutella2, (aussi appelé G2) est un protocole P2P initialement développé et publié en 2002 par Michael Stokes. Inspiré par le protocole Gnutella, ils ne partagent que deux points communs, les poignée de mains et les mécanismes de téléchargement .
Il adopte un format de paquet binaire extensible et un algorithme de recherche des fichiers entièrement nouveau, de plus il dispose d'une topologie réseau légèrement différente et d'une amélioration du système des métadonnées qui contribue efficacement à réduire le nombre de faux fichiers et fichiers douteux (virus, troyen, etc...) dans les résultats de recherche.
Histoire
En novembre 2002, Michael Stokes annonça sur le Forum des Développeurs de Gnutella la sortie de Gnutella2. Alors que certains pensaient que le but principale de ce développement était de faire une rupture totale avec le protocole Gnutella 0.6 et de reprendre sur de nouvelles bases, les parties les moins "propres de Gnutella ".
D'autres, principalement les développeurs de LimeWire et de BearShare, pensaient qu'il s'agissait d'une "opération publicitaire bon marché" et doutaient du mérite technique. Encore aujourd'hui, beaucoup refuse de l'appeler le "réseau Gnutella2", ils préfèrent l'appeler le "protocole de Mike".
Le protocole Gnutella2 utilise les anciennes chaînes de poignée de main de Gnutella 0.6 pour ses connexions comme elles sont définies dans les spécifications de Gnutella0.6, ce qui a été perçu par les développeurs du GDF, comme une tentative d'utiliser le réseau Gnutella pour l'amorçage de Gnutella2, tandis que les partisans affirmaient que l'intension était de rester compatible pour permettre aux Gnutella/fr#Sp.C3.A9cifications_G.C3.A9n.C3.A9rales clients Gnutella actuels de pouvoir ajouter Gnutella2 s'ils le souhaitaient.
Malheureusement, les détracteurs restèrent sur leurs position et entamèrent une "flame war", enfermant davantage chaques parties dans leurs retranchements.
L'ébauche des spécifications ont été publié le 26 mars 2003, puis des spécifications plus détaillées suivirent rapidement. Gnutella2 n'est pas supporté par la plupart des "anciens" clients du réseau Gnutella, cependant de nombreux clients Gnutella2 se connecte toujours à Gnutella. Beaucoup de partisans de Gnutella2 prétendent que c'est pour des raisons politiques, alors que les partisans de gnutella prétendent que les changements radicaux n'ont pas assez de valeur pour l'emporter sur le coût d'une réécriture profonde du code.
Conception
Gnutella2 divise les nœuds en deux groupes distincts : Feuilles et Hubs. En règle générale, les feuilles maintiennent une connexion avec 2 hubs tandis que les hubs acceptent la connexion à plusieurs centaines de feuilles ainsi qu'à sept autres hubs.
La connexion
De la même façon que Gnutella, pour se connecter le client Gnutella2 peut procéder de plusieurs façon :
- Le client G2 possède une liste intégrée d'hôtes (appelé cache d'hôte) auxquels il est potentiellement capable de se connecter
- Via l'interrogation et la mise à jour des web cache (appelé Gnutella Web Cache ou GWC).
Lorsqu'une tentative de connexion est initiée, le nœud interroge sa liste d'hôte potentiellement capable de lui offrir une connexion. Cette liste est interrogé hubs par hub jusqu'à ce que la connexion puisse être établie, tout en supprimant du cache les hôtes qui ont refusé la connexion. Si la liste d'hôte potentiel arrive à son terme et qu'aucune connexion n'a pu être réalisée, le client G2 interroge alors les GWebCaches pour obtenir ainsi une nouvelle liste d'hôte potentiel, ce jusqu'à ce qu'une connexion puisse être établie.
Une fois la connexion établie, le client Gnutella2 demande aux hubs auxquels il est connecté une nouvelle liste d'autres hubs potentiels et ainsi met à jour son cache d'hôtes.
les recherches
Lorsqu'une recherche est lancée, le nœud obtient une liste de hubs qu'il contact, jusqu'à épuisement de la liste, ou jusqu'à ce qu'une limite prédéfinie soit atteint. Cela permet à un utilisateur de chercher facilement un fichier populaire sans surcharger le réseau et théoriquement, maintenir la capacité pour un utilisateur de trouver un fichier où qu'il soit sur le réseau.
Les Hubs indexent les fichiers que possèdent les feuilles au moyen d'une Table de Routage des Requêtes (Query Routing Table) qui est rempli d'entrées à un seul bit du hache des mots clé correspondant aux fichiers. Ensuite, le Hub combine toutes les tables de haches reçues des ses feuilles et les transmet aux Hubs voisins. Cela permet de réduire l'utilisation de la bande passante, simplement, en ne transférant pas les requêtes de recherches aux feuilles et aux Hubs voisins s'il n'y a pas de correspondance dans les table de routage.
Gnutella2 s'appuie largement sur l'UDP plutôt que sur le TCP pour les recherches. La charge d'une mise en place une connexion TCP ferait un système de recherche en marche aléatoire demandant de contacter un grand nombre de nœuds avec un faible volume de données. Cependant, UDP n'est pas sans inconvénients, car il est sans connexion et il n'existe aucune méthode standard pour informer le client expéditeur qu'il a reçu un message, ou pour lui indiquer que le paquet a été perdu. C'est pour cette raison que les paquets UDP de Gnutella2 possèdent un marqueur, cela afin de permettre un paramètre de fiabilité. Quand un paquet UDP doté de ce marqueur de fiabilité est reçu, le client répond avec un paquet accusé de réception pour informer le client expéditeur que le paquet est arrivé a destination. Si l'accusé de réception n'est pas envoyé, un paquet fiable sera envoyé, dans la tentative d'assurer la livraison. Les paquets de moindre importance dont le marqueur n'est pas activé ne requièrent pas d'accusé de réception, ce qui réduit la fiabilité mais qui réduit aussi la charge des paquets accusés de réception qui doivent être envoyés.
Caractéristiques du Protocole
Gnutella2 possède un format de paquet binaire extensible, comparable à l'arbre d'un document XML qui a été conçu comme une réponse aux parties les moins élégantes de Gnutella. Le format des paquet a été conçu de sorte à ce que toutes améliorations et/où fonctionnalités futures puissent être ajoutés sans souci de générer de bogues aux autres clients du réseau.
La fonction de hachage SHA-1 est utilisé pour l'identification et la vérification d'intégrité d'un fichier. Cela permet à un fichier d'être téléchargé parallèlement auprès de sources multiples de façon fiable, alors que les Tiger tree hashes (TTH) sont utilisés pour permettre l'envoi de parties fiables du fichier qui est téléchargé (essaimage).<ref name="G2 standard">Gnutella2 Standard (en anglais)</ref>
Pour construire un système de recherche plus robuste et plus complet, Gnutella2 utilise aussi les métadonnées, un système qui apporte de meilleures informations (notation, qualité, commentaires, etc...) sur le fichier, qui peuvent être fournies dans des résultats de recherches en étant simplement lié au nom du fichier<ref>Simple Query Language and Metadata</ref>. Même après suppression du fichier, les nœuds peuvent partager ces métadonnées, permettant aux utilisateurs de marquer des fichiers sur le réseaux, qu'ils soient de bonne qualité, infectés, ou faux sans pour cela en garder une copie en partage.
Gnutella2 utilise aussi une compression dans ses connexions réseaux pour réduire la bande passante utilisé par le réseau<ref name="G2 standard"/>.
Les Différences avec Gnutella
Dans l'ensemble, les deux protocoles sont relativement similaire, avec pour différence principale, le format des paquets et la méthodologie de recherche.
Protocole
Le format des paquets Gnutella a été critiqué car il n'a pas été conçu en ayant l'extensibilité à l'esprit et a connu de nombreux ajout au fil du temps, dont le résultat est une structure de paquets encombré et inefficace<ref name="Developer discussion of gnutella and Gnutella2 packet formats">Developer discussion of Gnutella and Gnutella2 packet formats</ref>.
Gnutella2 tire parti de cela, en plus d'avoir de nombreuses fonctionnalités ajoutées issues des normes de Gnutella, il a été conçu dés le début dans une possibilité d'extensibilité future.
L'algorithme de recherche
Bien que Gnutella utilise une méthode par requêtes d'inondation pour les recherche, Gnutella2 utilise lui, un système de marche. Lorsqu'un nœud effectue une recherche, il collecte une liste de Hubs et les contacte directement un par un. Cependant, comme les Hubs s'organisent en se qu'on appelle des "grappes" de hubs, ou chaque hub renvoi l'information stockée par ses voisins, la feuille renvoie l'information à la grappe entière (qui contient habituellement 7 hubs). Cela a plusieurs avantages le système par requête d'inondation de Gnutella.
Ce système est plus efficace, comme de poursuivre une recherche sans augmenter le trafic du réseau de façon exponentiel, les requêtes de sont pas redirigées par tous les noeuds et n'augmente pas la granularité d'une recherche, permettant à un client de l'arrêter une fois qu'un seuil pré-défini de résultat soit atteint, ce qui est plus efficace que dans Gnutella.
Toutefois, le système de marche augmente aussi la complexité du réseau et la maintenance nécessaire de celui-ci, tout en exigeant des garanties pour empêcher un utilisateur malveillant d'attaquer le réseau avec des attaques par déni de service.
Terminologie
Les terminologies sont aussi différentes :
Sur Gnutella, les nœuds qui sont les plus capables, sont utilisés pour condenser le réseau sont appelés des "UltraPairs", sur Gnutella2 ils sont appelés "Hubs". De plus la topologie d'utilisation d'un Hub est légèrement différente que celle d'un UltraPair.
Sur Gnutella, les UltraPairs permettent et maintiennent la connexion pour autant de feuille que de pairs.
Sur Gnutella2, les Hubs permettent et maintiennent la connexion pour beaucoup plus de feuille et beaucoup moins de pairs (Hub à Hub).
C'est pour cela que les méthodes de recherche des différents réseaux ont différentes topologies optimales.
Les clients
Liste des clients
Spécifications Générales
Nom | Environnement | Licence | Héritage |
---|---|---|---|
Adagio | Multi Plate-forme | GNU GPL | |
Gnucleus | Microsoft Windows | GNU GPL, LGPL | Travail Original |
MLDonkey (Avant la Version 2.9.0<ref>Le support n'est plus maintenu et est désactivé des binaires</ref>) |
Multi Plate-forme | GNU GPL | Travail Original |
Shareaza | Microsoft Windows | GNU GPL | Travail Original |
Sharelin | Linux/Unix | GNU GPL | Shareaza |
G2CD | Linux/Unix/BSD | GNU GPLv3 | |
Quazaa | Multi Plate-forme | GNU GPLv3 | Shareaza |
Foxy | Microsoft Windows | Propriétaire | dérivé de GnucDNA <ref>il n'y a pas d'interaction possible avec tout autre client G2.</ref> |
Kiwi Alpha | Microsoft Windows | Propriétaire | GnucDNA |
Morpheus | Microsoft Windows | Propriétaire | GnucDNA |
TrustyFiles | Microsoft Windows | Propriétaire | GnucDNA |
Comparaison
Le tableau suivant compare les informations générales et techniques pour un certain nombre d'application susceptible de supporter le réseau Gnutella2.
Clients | Intègre un tChat [-›] |
Manipulation des fichiers larges (> 4 Gio) |
UKHL | Unicode | Mappage des ports UPnP [-›] |
NAT traversal | Prévisualisations [-›] à distance |
Recherche à partir du hache |
Mode Hub | Sans logiciels malveillant |
Réseaux | Basé sur | Autres | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Adagio | No | No | No | No | No | No | No | Yes
|
No | Yes
|
N/A | - |
- | |
Foxy | Yes
|
No | No | Yes
|
Yes
|
No | No | Yes
|
Template:Partiel | No | N/A | GnucDNA | GPL violateur | |
FileScope | Yes
|
No | No | No | No | No | Yes
|
Yes
|
Yes
|
Yes
|
gnutella, eD2k, OpenNap
|
- | - | |
Gnucleus | No | No | No | No | No | No | No | Yes
|
No | Yes
|
gnutella
|
GnucDNA | - | |
Kiwi Alpha | No | No | No | No | No | No | No | Yes
|
No | No | gnutella
|
GnucDNA | - | |
MLdonkey | colspan=11 Template:Inexacte | - | les modules complémentaire de gnutella et Gnutella2 sont disponible en téléchargement.<ref>Page de téléchargement des plugins MLDonkey : http://mldonkey.sourceforge.net/MLdonkeyPlugin </ref> | |||||||||||
Morpheus | Yes
|
No | No | No | Yes
|
No | No | No | No | No | gnutella, NEOnet
|
GnucDNA | Le développement et l'hébergement du client ont été arrêté. | |
Shareaza | Yes
|
Yes
|
Yes
|
Yes
|
Yes
|
No | Yes
|
Yes
|
Yes
|
Yes
|
gnutella, eD2k, BitTorrent
|
- | Intègre le support IRC | |
Sharelin | No | Yes
|
Yes
|
No | No | No | No | Yes
|
No | Yes
|
N/A | - | Contrôle de l'application depuis une interface web | |
TrustyFiles | No | No | No | No | No | No | No | Yes
|
No | Template:Non | eD2k, Overnet, BitTorrent, gnutella
|
GnucDNA (partiellement) |
- |
Notes
- ↑ tChat : Se réfère au tchat client-à-client.
- ↑ Mappage des ports UPnP : [1] Configure automatiquement la redirection des ports (Requière un routeur qui supporte l'UPnP)
- ↑ Prévisualisations : Depuis la recherche et les téléchargements
Références
- Discussion des développeurs du GDF (Gnutella Developers Forum) sur les similarités entre Gnutella et Gnutella2 (en anglais).
- Discussion des développeurs du GDF à propos du nom Gnutella2 (en anglais).
- Part of the Gnutella/Gnutella2 Flame War (1)(en anglais).
- Part of the Gnutella/Gnutella2 Flame War (2)(en anglais).
- Part of the Gnutella/Gnutella2 Flame War (3)(en anglais).
- Part of the Gnutella/Gnutella2 Flame War (4)(en anglais).
- Discussion à propos de la migration vers Gnutella2 (en anglais).
- Histoire du réseau G2 (en anglais).
- Structure des Paquets (en anglais).
- Source de cet article : http://en.wikipedia.org/wiki/Gnutella2 (en anglais).