Gnutella2/fr: Difference between revisions

From Shareaza Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
{{Languages|Gnutella2}}
{{Languages|Gnutella2}}
'''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 <ref name="Poignée de main Gnutella2">[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)</ref>.


== Gnutella2 ==
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]]
== 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 recommencer sur de nouvelles bases les parties de Gnutella les moins "''propres''". 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" (ou "MP") <ref>[http://groups.yahoo.com/group/the_gdf/message/11933 Discussion des développeurs du GDF sur le nom de Gnutella2] (en anglais)</ref>.


Gnutella est un réseau décentralisé. Il utilise les super-pairs appelés HUB pour créer des serveurs provisoires d'indexation.
Le protocole Gnutella2 utilise les anciennes chaînes de poignée de main de Gnutella 0.6 pour ses connexions<ref name="Poignée de main Gnutella2"/> 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'[[Bootstrapping|amorçage]] de Gnutella2, tandis que les partisans affirmaient que l'intension était de rester compatible pour permettre aux [[clients Gnutella]] actuels de pouvoir ajouter Gnutella2 s'ils le souhaitaient.
Voici une image de ce à quoi, il peut ressembler :


[[Image:gnutella2.png]]
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.<ref name="Gnutella2 Flame War (1)">[http://groups.yahoo.com/group/the_gdf/message/13932  Part of the Gnutella/Gnutella2 Flame War (1)]</ref><ref name="Gnutella2 Flame War (2)">[http://groups.yahoo.com/group/the_gdf/message/13942 Part of the Gnutella/Gnutella2 Flame War (2)]</ref><ref name="Gnutella2 Flame War (3)">[http://groups.yahoo.com/group/the_gdf/message/13946 Part of the Gnutella/Gnutella2 Flame War (3)]</ref><ref name="Gnutella2 Flame War (4)">[http://groups.yahoo.com/group/the_gdf/message/13950 Part of the Gnutella/Gnutella2 Flame War (4)]</ref>


On peut s’imaginer une toile d’araignée, ou le centre de la toile est un HUB, où chaque croisement de fils est un nœud, représentant soit une feuille soit un autre HUB…
L'ébauche des spécifications ont été publié le 26 mars 2003, puis des spécifications plus détaillées suivirent rapidement
N'importe quel client Shareaza peut devenir HUB si la connexion internet et l'ordinateur de l'utilisateur sont assez puissants.
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.<ref name="Developer discussion on migration to Gnutella2">[http://groups.yahoo.com/group/the_gdf/message/11921 Developer discussion on migration to Gnutella2]</ref>
Les feuilles sont les clients de base et les noeuds sont tous les clients connectés à Gnutella, HUB et feuilles confondus.


Gnutella2 (G2) est un des [[P2P network/fr|réseaux P2P]] supporté par Shareaza. Gnutella2 est le primaire de Shareaza, créé et fondé par [[Mike/fr|Mike]], le concepteur de Shareaza. Il fonctionne comme le réseau [[gnutella/fr|gnutella]] original (1), avec un système de connexion semblable, mais offre plus de résultats de recherche, des vitesses plus rapides et plus d'options.
== 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 <ref name="G2 Network history">[http://crawler.trillinux.org/history.html Gnutella2 Network history]</ref> tandis que les hubs acceptent la connexion à plusieurs centaines de feuilles ainsi qu'à sept autres hubs. <br />


La distribution de fichier est toute la différence. Par exemple, gnutella était très en avance sur comment dans rendre effectif le Partage de Fichier Partiel (Partial File Sharing où PFS), un système qui permet aux utilisateurs avec des fichiers partialement téléchargés de partager leurs parties de fichier avec d'autre utilisateurs. Il a aussi beaucoup d'options qu'aucun autre réseau ne possède à ce jour; Gnutella2 peut vous indiquer si le fichier a été rapporté comme fake, de mauvaise qualité, basse où autre... Il peut vous dire si une source est stable ou occupé, et il affiche les metadata étendu, au sujet d'un fichier, seulement en le cherchant. Ce sont juste quelques unes des options de G2 qui est réseau totalement décentralisé en le signifiant qu'il peut ne jamais être arrêté.
===La connexion===
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
*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 [[Gnutella Web Cache|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 mettre à jour son cache d'hôtes.


Pour plus d'information sur Gnutella2 consultez le {{g2|Main_Page|site officiel}} (en anglais).
===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 [http://fr.wikipedia.org/wiki/Bit bit] du [[Fonction de Hachage|hache]] des mots clé correspondant aux fichiers. Ensuite, le Hub combine toutes les tables de hache reçues des ses feuilles et les transmet aux Hubs voisins. Cela permet de réduire 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.


{{Navigation|Networks and Hashes/fr}}
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 ==
'''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.<ref>[http://g2.trillinux.org/index.php?title=Packet_Structure Packet Structure] (en anglais)</ref> <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 />
<br />
Pour construire un système de recherche plus robuste et plus complet, Gnutella2 utilise aussi les [[Métadonnées|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>[http://g2.trillinux.org/index.php?title=Simple_Query_Language_and_Metadata 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.<br />
<br />
Gnutella2 utilise aussi une [http://en.wikipedia.org/wiki/HTTP_compression 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">[http://groups.yahoo.com/group/the_gdf/message/16290 Developer discussion of Gnutella and Gnutella2 packet formats]</ref>.<br />
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 [http://fr.wikipedia.org/wiki/Granularité 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.
<br />
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 [http://fr.wikipedia.org/wiki/Attaque_par_déni_de_service attaques par déni de service].
 
=== Terminologie===
Les terminologies sont aussi différentes : <br />
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.<br />
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).<br />
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 ===
<center>
{| width="55%" align="center" class="wikitable sortable"
|-
! valign="middle" align="center" rowspan="1" | Nom
! rowspan="1" | Environnement
! rowspan="1" | Licence
! rowspan="1" | Héritage
|-
! valign="middle" align="center" rowspan="1" | [[Adagio]]
| 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" | 
|-
! 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/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" | Travail Original
|-
! valign="middle" align="center" rowspan="1" |[[MLDonkey]]<br /><small>(Avant la Version 2.9.0<ref>Le support n'est plus maintenu et est désactivé des binaires</ref>)</small>
| 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" | Travail Original
|-
! valign="middle" align="center" rowspan="1" | '''Shareaza'''
| 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]
| valign="middle" align="center" | Travail Original
|-
! valign="middle" align="center" rowspan="1" | [[Sharelin]]
| valign="middle" align="center" | Linux/Unix
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Licence_publique_générale_GNU GNU GPL]
| valign="middle" align="center" | Shareaza
|-
! valign="middle" align="center" rowspan="1" | [[G2CD]]
| valign="middle" align="center" | Linux/Unix/BSD
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Licence_publique_générale_GNU GNU GPLv3]
| valign="middle" align="center" |
|-
! valign="middle" align="center" rowspan="1" | [[Quazaa]]
| valign="middle" align="center" | Multi Plate-forme
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Licence_publique_générale_GNU GNU GPLv3]
| valign="middle" align="center" | Shareaza
|-
! valign="middle" align="center" rowspan="1" | [[Foxy]]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Microsoft_Windows Microsoft Windows]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Logiciel_propriétaire Propriétaire]
| valign="middle" align="center" | dérivé de [[GnucDNA]] <ref>il n'y a pas d'interaction possible avec tout autre client G2.</ref>
|-
! valign="middle" align="center" rowspan="1" | [[GnucDNA#Kiwi_Alpha|Kiwi Alpha]]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Microsoft_Windows Microsoft Windows]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Logiciel_propriétaire Propriétaire]
| valign="middle" align="center" | [[GnucDNA]]
|-
! valign="middle" align="center" rowspan="1" | [[Morpheus]]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Microsoft_Windows Microsoft Windows]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Logiciel_propriétaire Propriétaire]
| valign="middle" align="center" | [[GnucDNA]]
|-
! valign="middle" align="center" rowspan="1" | [[TrustyFiles]]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Microsoft_Windows Microsoft Windows]
| valign="middle" align="center" | [http://fr.wikipedia.org/wiki/Logiciel_propriétaire Propriétaire]
| valign="middle" align="center" | [[GnucDNA]]
|-
|}
</center>
 
=== 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.
<center>
{| width= auto; style="font-size: 85%; text-align: center;" class="wikitable"
! colspan=2 | '''Clients'''
! rowspan=1 | '''Intègre un<br />{{Cref|tChat}}''' 
! rowspan=1 | '''Manipulation des<br />fichiers larges'''<br />(> 4 [http://fr.wikipedia.org/wiki/Giga Gio]) 
! rowspan=1 | '''UKHL''' 
! rowspan=1 | '''[http://fr.wikipedia.org/wiki/Unicode Unicode]''' 
! rowspan=1 | '''{{Cref|Mappage des ports UPnP}}''' 
! rowspan=1 | '''[[NAT traversal]]'''
! rowspan=1 | '''{{Cref|Prévisualisations}}<br /> à distance'''
! rowspan=1 | '''Recherche<br /> à partir<br /> du [[Fonction de Hachage|hache]]''' 
! rowspan=1 | '''Mode Hub'''
! rowspan=1 | '''Sans<br /> logiciels<br />malveillant''' 
! rowspan=1 | '''Réseaux'''
! rowspan=1 | '''Basé sur''' 
! rowspan=1 | '''Autres'''
|- 
! {{rh2}} colspan=2 | '''[[Adagio]]'''
| {{non}} 
| {{non}} 
| {{non}} 
| {{non}} 
| {{non}} 
| {{non}} 
| {{non}} 
| {{oui}} 
| {{non}} 
| {{oui}} 
| {{N/a}} 
| <br />-<br /> 
| - 
|- 
! {{rh}} colspan=2 | '''[[Foxy]]'''
| {{Oui}}
| {{non}}
| {{non}}
| {{Oui}}
| {{Oui}}
| {{non}}
| {{non}}
| {{Oui}}
| {{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>}}
| {{non}}
| {{N/a}}
| [[GnucDNA]]
| [http://fr.wikipedia.org/wiki/Licence_publique_g%C3%A9n%C3%A9rale_GNU GPL]<br /> violateur<br />
|-
! {{rh}} colspan=2 | '''[[FileScope]]'''
| {{Oui}}
| {{non}}
| {{non}}
| {{non}}
| {{non}}
| {{non}}
| {{Oui}}
| {{Oui}}
| {{Oui}}
| {{Oui}}
| {{Oui|[[gnutella]],<br />[[eD2k]],<br />[[OpenNap]]}}
| -
| -
|-
! {{rh}} colspan=2 | '''[[Gnucleus]]'''
| {{non}}
| {{non}}
| {{non}}
| {{non}}
| {{non}}
| {{non}}
| {{non}}
| {{Oui}}
| {{non}}
| {{Oui}}
| {{Oui|[[gnutella]]}}
| [[GnucDNA]]
| <br />-<br />
|-
! {{rh2}} colspan=2 | '''[[Kiwi Alpha]]'''
| {{non}}
| {{non}}
| {{non}}
| {{non}}
| {{non}}
| {{non}}
| {{non}}
| {{Oui}}
| {{Non}}
| {{non}}
| {{Oui|[[gnutella]]}}
| [[GnucDNA]]
| <br />-<br />
|-
! {{rh2}} colspan=2 | '''[[MLdonkey]]'''
| colspan=11 {{inexacte| Faute de développeur responsable du [http://mldonkey.sourceforge.net/Gnutella2 module complémentaire], Gnutella2 n'est actuellement plus supporté.}}
| -
| <small>les modules complémentaire<br />de [[gnutella]] et Gnutella2 sont<br /> disponible en téléchargement</small>.<ref>Page de téléchargement des plugins MLDonkey : http://mldonkey.sourceforge.net/MLdonkeyPlugin </ref>
|-
! {{rh2}} colspan=2 | '''[[Morpheus]]'''
| {{Oui}}
| {{non}}
| {{non}}
| {{non}}
| {{Oui}}
| {{non}}
| {{non}}
| {{non}}
| {{non}}
| {{non}}
| {{Oui|[[gnutella]],<br />[[NEOnet]]}}
| [[GnucDNA]]
| <small>Le développement et l'hébergement<br /> du client ont été arrêté.</small>
|-
! {{rh}} colspan=2 | '''Shareaza'''
| {{Oui}}
| {{Oui}}
| {{Oui}}<ref>depuis la version 2.2.4.0</ref>
| {{Oui}}
| {{Oui}}
| {{non}}
| {{Oui}}
| {{Oui}}
| {{Oui}}
| {{Oui}}
| {{Oui|[[gnutella]],<br />[[eD2k]],<br />[[BitTorrent]]}}
| -
| Intègre le support [[IRC]]
|-
! {{rh}} colspan=2 | '''[[Sharelin]]'''
| {{non}}
| {{Oui}}
| {{Oui}}
| {{non}}
| {{non}}
| {{non}}
| {{Non}}
| {{Oui}}
| {{non}}
| {{Oui}}
| {{N/a}}
| -
| <small>Contrôle de l'application<br /> depuis une interface web</small>
|-
! {{rh}} colspan=2 | '''[[TrustyFiles]]'''
| {{non}}
| {{non}}
| {{non}}
| {{non}}
| {{non}}
| {{non}}
| {{non}}
| {{Oui}}
| {{non}}
| {{non|<small>supprimable<br />dans la version<br />commerciale<br />(29$US)</small>}}
| {{Oui|[[eD2k]],<br />[[Overnet]],<br />[[BitTorrent]],<br />[[gnutella]]}}
| [[GnucDNA]]<br />(partiellement)
| -
|-
|}
</center>
 
====Notes====
{{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|Prévisualisations| Depuis la recherche et les téléchargements}}
==Références ==
<references/>
Source de cet article : http://en.wikipedia.org/wiki/Gnutella2
 
== Liens externes ==
* [http://www.numerama.com/magazine/463-shareaza-commence-la-creation-d-un-gnutella-2.html Shareaza commence la création d'un Gnutella 2 !]
* [http://g2.trillinux.org/ Gnutella2 wiki]
* [http://crawler.trillinux.org/ g2paranha - G2 Network Crawler]
 
[[Category:Protocoles Réseaux P2P]]

Revision as of 20:02, 17 March 2014

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 <ref name="Poignée de main Gnutella2">Discussion des développeurs du GDF (Gnutella Developers Forum) sur les similarités entre Gnutella et Gnutella2 (en anglais)</ref>.

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.

Le logo de Gnutella2
Le logo de Gnutella2

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 recommencer sur de nouvelles bases les parties de Gnutella les moins "propres". 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" (ou "MP") <ref>Discussion des développeurs du GDF sur le nom de Gnutella2 (en anglais)</ref>.

Le protocole Gnutella2 utilise les anciennes chaînes de poignée de main de Gnutella 0.6 pour ses connexions<ref name="Poignée de main Gnutella2"/> 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 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.<ref name="Gnutella2 Flame War (1)">Part of the Gnutella/Gnutella2 Flame War (1)</ref><ref name="Gnutella2 Flame War (2)">Part of the Gnutella/Gnutella2 Flame War (2)</ref><ref name="Gnutella2 Flame War (3)">Part of the Gnutella/Gnutella2 Flame War (3)</ref><ref name="Gnutella2 Flame War (4)">Part of the Gnutella/Gnutella2 Flame War (4)</ref>

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.<ref name="Developer discussion on migration to Gnutella2">Developer discussion on migration to Gnutella2</ref>

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 <ref name="G2 Network history">Gnutella2 Network history</ref> 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 liste d'autres hubs potentiels et ainsi mettre à 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 hache reçues des ses feuilles et les transmet aux Hubs voisins. Cela permet de réduire 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.<ref>Packet Structure (en anglais)</ref>

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 Template:Non Template:Non Template:Non Template:Non Template:Non Template:Non Template:Non Template:Oui Template:Non Template:Oui N/A
-
-
Foxy Template:Oui Template:Non Template:Non Template:Oui Template:Oui Template:Non Template:Non Template:Oui Template:Partiel Template:Non N/A GnucDNA GPL
violateur
FileScope Template:Oui Template:Non Template:Non Template:Non Template:Non Template:Non Template:Oui Template:Oui Template:Oui Template:Oui Template:Oui - -
Gnucleus Template:Non Template:Non Template:Non Template:Non Template:Non Template:Non Template:Non Template:Oui Template:Non Template:Oui Template:Oui GnucDNA
-
Kiwi Alpha Template:Non Template:Non Template:Non Template:Non Template:Non Template:Non Template:Non Template:Oui Template:Non Template:Non Template:Oui 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 Template:Oui Template:Non Template:Non Template:Non Template:Oui Template:Non Template:Non Template:Non Template:Non Template:Non Template:Oui GnucDNA Le développement et l'hébergement
du client ont été arrêté.
Shareaza Template:Oui Template:Oui Template:Oui<ref>depuis la version 2.2.4.0</ref> Template:Oui Template:Oui Template:Non Template:Oui Template:Oui Template:Oui Template:Oui Template:Oui - Intègre le support IRC
Sharelin Template:Non Template:Oui Template:Oui Template:Non Template:Non Template:Non Template:Non Template:Oui Template:Non Template:Oui N/A - Contrôle de l'application
depuis une interface web
TrustyFiles Template:Non Template:Non Template:Non Template:Non Template:Non Template:Non Template:Non Template:Oui Template:Non Template:Non Template:Oui 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

<references/> Source de cet article : http://en.wikipedia.org/wiki/Gnutella2

Liens externes