Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Gnutella2
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{fsb}} [[File:Shareaza2.JPG|thumb]] '''Gnutella2''', often referred to as '''G2''', is a [[peer-to-peer]] [[Communication protocol|protocol]] developed mainly by [[Michael Stokes (programmer)|Michael Stokes]] and released in 2002. While inspired by the [[gnutella]] protocol, G2 shares little of its design with the exception of its [[Handshake (computing)|connection handshake]] and [[download]] mechanics.<ref name="Gnutella2 Handshakes">{{cite web| url=https://groups.yahoo.com/group/the_gdf/message/15113| title=Developer discussion of similarities between Gnutella and Gnutella2| publisher=The Gnutella Developer Forum| access-date=2006-05-10| archive-date=2023-01-17| archive-url=https://web.archive.org/web/20230117212148/https://www.yahoo.com/| url-status=dead}}</ref> G2 adopts an extensible binary [[network packet|packet]] format and an entirely new [[search algorithm]]. Furthermore, G2 has a related (but significantly different) [[network topology]] and an improved [[metadata]] system, which helps effectively to reduce fake files, such as [[Computer virus|viruses]], on the network. == History == In November 2002, Michael Stokes announced the Gnutella2 protocol to the Gnutella Developers Forum. While some thought the goals stated for Gnutella2 are primarily to make a clean break with the gnutella 0.6 protocol and start over, so that some of gnutella's less clean parts would be done more elegantly and, in general, be impressive and desirable; other [[Software developer|developers]], primarily those of [[LimeWire]] and [[BearShare]], thought it to be a "cheap [[publicity stunt]]" and discounted technical merits. Some still refuse to refer to the network as "Gnutella2", and instead, refer to it as "Mike's Protocol" ("MP").<ref name="GDF Discussion on the Gnutella2 name">{{cite web| url=https://groups.yahoo.com/group/the_gdf/message/11933| title=GDF Discussion on the Gnutella2 name| publisher=The Gnutella Developer Forum| access-date=2006-05-10| archive-date=2023-01-17| archive-url=https://web.archive.org/web/20230117212150/https://www.yahoo.com/| url-status=dead}}</ref> The Gnutella2 protocol still uses the old "GNUTELLA CONNECT/0.6" handshake string for its connections<ref name="Gnutella2 Handshakes"/> as defined in the gnutella 0.6 specifications. This backwardly compatible handshake method was criticized by the Gnutella Developers Forum as an attempt to use the gnutella network for [[Bootstrapping (computing)|bootstrapping]] the new, unrelated network, while proponents of the network claimed that its intent was to remain [[backward compatibility|backwards-compatible]] with gnutella and to allow current gnutella clients to add Gnutella2 at their leisure. With the developers entrenched in their positions, a [[flame war]] soon erupted, further cementing both sides' resolve.<ref name="Gnutella2 Flame War (1)">{{cite web| url=https://groups.yahoo.com/group/the_gdf/message/13932| title=Part of the Gnutella/Gnutella2 Flame War (1)| publisher=The Gnutella Developer Forum| access-date=2006-08-06| archive-date=2009-02-12| archive-url=https://web.archive.org/web/20090212190509/http://groups.yahoo.com/group/the_gdf/message/13932| url-status=dead}}</ref><ref name="Gnutella2 Flame War (2)">{{cite web| url=https://groups.yahoo.com/group/the_gdf/message/13942| title=Part of the Gnutella/Gnutella2 Flame War (2)| publisher=The Gnutella Developer Forum| access-date=2006-08-06| archive-date=2023-01-17| archive-url=https://web.archive.org/web/20230117213154/https://www.yahoo.com/| url-status=dead}}</ref><ref name="Gnutella2 Flame War (3)">{{cite web| url=https://groups.yahoo.com/group/the_gdf/message/13946| title=Part of the Gnutella/Gnutella2 Flame War (3)| publisher=The Gnutella Developer Forum| access-date=2006-08-06| archive-date=2023-01-17| archive-url=https://web.archive.org/web/20230117213154/https://www.yahoo.com/| url-status=dead}}</ref><ref name="Gnutella2 Flame War (4)">{{cite web| url=https://groups.yahoo.com/group/the_gdf/message/13950| title=Part of the Gnutella/Gnutella2 Flame War (4)| publisher=The Gnutella Developer Forum| access-date=2006-08-06| archive-date=2023-01-17| archive-url=https://web.archive.org/web/20230117213154/https://www.yahoo.com/| url-status=dead}}</ref> The [[Draft document|draft specifications]] were released on March 26, 2003, and more detailed [[Specification (technical standard)|specifications]] soon followed. G2 is not supported by many of the "old" gnutella network clients, however, many Gnutella2 clients still also connect to gnutella. Many Gnutella2 proponents claim that this is because of [[politics|political]] reasons, while gnutella supporters claim that the drastic changes don't have enough merit to outweigh the cost of deep rewrites.<ref name="Developer discussion on migration to Gnutella2">{{cite web| url=https://groups.yahoo.com/group/the_gdf/message/11921| title=Developer discussion on migration to Gnutella2| publisher=The Gnutella Developer Forum| access-date=2006-05-10| archive-date=2023-01-17| archive-url=https://web.archive.org/web/20230117213155/https://www.yahoo.com/| url-status=dead}}</ref> == Design == Gnutella2 divides [[Node (networking)|nodes]] into two groups: [[leaf node|Leaves]] and Hubs. Most Leaves maintain two [[Telecommunication circuit|connections]] to Hubs,<ref name="G2 Network history">{{cite web| url=http://crawler.trillinux.org/history.html| title=Gnutella2 Network history| publisher=Trillinux crawler (G2paranha)| access-date=2009-04-12| archive-date=2009-05-15| archive-url=https://web.archive.org/web/20090515142530/http://crawler.trillinux.org/history.html| url-status=live}}</ref> while Hubs accept hundreds of Leaf connections, and an average of 7 connections to other Hubs. When a search is initiated, the node obtains a list of Hubs, if needed, and contacts the Hubs in the list, noting which have been searched, until the list is exhausted or a predefined search limit has been reached. This allows a user to find a popular file easily without loading the network, while, theoretically, maintaining the ability for a user to find a single file located anywhere on the network. Hubs index what [[computer file|files]] a Leaf has by means of a [[Query Routing Table]], which is filled with single [[bit]] entries of [[Hash function|hashes]] of [[Index term|keyword]]s, which the Leaf [[upload]]s to the Hub, and which the Hub then combines with all the [[hash table]]s its Leaves have sent, it in order to create a version to send to their neighboring Hubs. This allows for Hubs to reduce [[Bandwidth (computing)|bandwidth]] greatly by simply not forwarding [[query string|queries]] to Leaves and neighboring Hubs, if the entries which match the search are not found in the [[routing table]]s. Gnutella2 relies extensively on [[User Datagram Protocol|UDP]], rather than [[Transmission Control Protocol|TCP]], for searches. The [[Overhead (computing)|overhead]] of setting up a TCP connection would make a [[random walk]] search system, requiring the contacting of large numbers of nodes with small volumes of data, unworkable. However, UDP is not without its own drawbacks. Because UDP is connectionless, there is no standard method to inform the sending client that a [[Message passing|message]] was received, and so if the packet is lost, there is no way to know. Because of this, UDP packets in Gnutella2 have a [[Flag field|flag]] to enable a reliability setting. When an UDP packet with enabled reliability flag is received, the client will respond with an [[Acknowledgement (data networks)|acknowledge packet]] to inform the sending client that their packet arrived at its destination. If the acknowledge packet is not sent, the reliable packet will be retransmitted in an attempt to ensure delivery. Low importance packets, which do not have the flag enabled, do not require an acknowledge packet, reducing reliability, but also reducing overhead, as no acknowledge packet needs to be sent and waited upon. == Protocol features == Gnutella2 has an extensible binary packet format, comparable to an [[XML]] document tree, which was conceived as an answer for some of gnutella's less elegant parts. The packet format was designed so that future network improvements and individual vendor features could be added without worry of causing [[Software bug|bugs]] in other clients on the network.<ref>{{cite web| url=http://g2.trillinux.org/index.php?title=Packet_Structure| title=Packet Structure| publisher=Gnutella2 Wiki| access-date=2007-11-07| archive-date=2007-12-19| archive-url=https://web.archive.org/web/20071219232211/http://g2.trillinux.org/index.php?title=Packet_Structure| url-status=live}}</ref> For the purpose file identification and secure [[Data integrity|integrity]] check of files it employs [[SHA-1]] [[Cryptographic hash function|hashes]]. To allow for a file to be reliably [[download]]ed in parallel from multiple sources, as well as to allow for the reliable uploading of parts while the file is still being downloaded (swarming), [[Merkle tree|Tiger tree hashes]] are used.<ref name="G2 standard">{{cite web| url=http://g2.trillinux.org/index.php?title=Gnutella2_Standard| title=Gnutella2 Standard| publisher=Gnutella2 wiki| access-date=2007-11-07| archive-date=2007-12-19| archive-url=https://web.archive.org/web/20071219232205/http://g2.trillinux.org/index.php?title=Gnutella2_Standard| url-status=live}}</ref> To create a more [[Robustness (computer science)|robust]] and complete system for searching, Gnutella2 also has a [[metadata]] system for more complete labeling, rating, and quality information to be given in the search results than would simply be gathered by the file names.<ref>{{cite web| url=http://g2.trillinux.org/index.php?title=Simple_Query_Language_and_Metadata| title=Simple Query Language and Metadata| publisher=Gnutella2 Wiki| access-date=2007-11-07| archive-date=2007-12-19| archive-url=https://web.archive.org/web/20071219232217/http://g2.trillinux.org/index.php?title=Simple_Query_Language_and_Metadata| url-status=live}}</ref> Nodes can even share this information after they have deleted the file, allowing users to mark [[Computer virus|viruses]] and [[Computer worm|worms]] on the network, without requiring them to keep a copy. Gnutella2 also utilizes [[HTTP compression|compression]] in its network connections to reduce the bandwidth used by the network.<ref name="G2 standard"/> [[Shareaza]] has the additional feature to request previews of [[image]]s and [[Video file format|video]]s though only FilesScope takes limited advantage of this. [[gtk-gnutella]] extended the protocol to further reduce the gap between [[Gnutella]] and G2. In particular, the semi-reliable UDP layer was enhanced to add cumulative and extended acknowledgments in a way that is backward compatible with legacy G2 clients.<ref>{{cite web |url=http://g2.doxu.org/index.php/UDP_Transceiver#Extension_Proposal |title=UDP Transceiver - Gnutella2 |publisher=G2.doxu.org |access-date=2014-08-06 |archive-date=2014-07-19 |archive-url=https://web.archive.org/web/20140719083104/http://g2.doxu.org/index.php/UDP_Transceiver#Extension_Proposal |url-status=live }}</ref> Further extensions include the "A" string in /Q2/I <ref>{{cite web |url=http://g2.doxu.org/index.php/Q2#.2FQ2.2FI_-_Interest |title=Q2 - Gnutella2 |publisher=G2.doxu.org |date=2014-02-25 |access-date=2014-08-06 |archive-date=2014-07-14 |archive-url=https://web.archive.org/web/20140714124310/http://g2.doxu.org/index.php/Q2#.2FQ2.2FI_-_Interest |url-status=live }}</ref> and the introduction of /QH2/H/ALT, /QH2/H/PART/MT, /QH2/HN, /QH2/BH and /QH2/G1 in the query hits.<ref>{{cite web |url=http://g2.doxu.org/index.php/QH2 |title=QH2 - Gnutella2 |publisher=G2.doxu.org |date=2014-03-12 |access-date=2014-08-06 |archive-date=2013-12-13 |archive-url=https://web.archive.org/web/20131213030530/http://g2.doxu.org/index.php/QH2 |url-status=live }}</ref> == Differences from gnutella == Overall, the two networks are fairly similar, with the primary differences being in the packet format and the search methodology. === Protocol === Gnutella's packet format has been criticized because it was not originally designed with [[extensibility]] in mind, and has had many additions over the years, leaving the packet structure cluttered and inefficient.<ref name="Developer discussion of gnutella and Gnutella2 packet formats">{{cite web| url=https://groups.yahoo.com/group/the_gdf/message/16290| title=Developer discussion of Gnutella and Gnutella2 packet formats| publisher=The Gnutella Developer Forum| access-date=2006-05-15| archive-date=2023-01-17| archive-url=https://web.archive.org/web/20230117213155/https://www.yahoo.com/| url-status=dead}}</ref> Gnutella2 learned from this, and aside from having many of the added features of gnutella standard in Gnutella2, designed in future extensibility from the start. === Search algorithm === While gnutella uses a [[query flooding]] method of searching, Gnutella2 uses a [[random walk]] system, where a searching node gathers a list of Hubs and contacts them directly, one at a time. However, as Hub organize themselves in, so called, "Hub [[Computer cluster|clusters]]", where each Hub mirrors the information stored by its neighbors, the Leaf is returned the information of the entire Hub cluster (usually 7 Hubs). This has several advantages over the gnutella's query flooding system. It is more efficient, as continuing a search does not increase the [[network traffic]] [[Exponential function|exponentially]], queries are not routed through as many nodes, and it increases the [[granularity]] of a search, allowing a client to stop, once a pre-defined threshold of results has been obtained, more effectively than in gnutella. However, the walk system also increases the [[Complex network|complexity of the network]] and the [[Network management|network maintenance and management]] required, as well as requiring safeguards to prevent a [[cyberattack|malicious attacker]] from using the network for [[denial-of-service attack]]s. === Terminology === There is also a difference in terminology: while the more capable nodes, which are used to condense the network, are referred to as ''Ultrapeers'' in gnutella, they are called ''Hubs'' in Gnutella2, and they are also used slightly differently in topology. In gnutella, the Ultrapeers generally maintain as many leaves as peer connections, while Gnutella2 Hubs maintain far more leaves, and fewer peer (Hub-to-Hub) connections. The reason for this is that the search methods of the various networks have different optimum topologies. == Clients == === List === [[Free software]] Gnutella2 clients include: * Adagio<ref>{{cite web|url=https://sourceforge.net/projects/agio/|title=Adagio download {{!}} SourceForge.net|access-date=2016-11-11|archive-date=2016-11-12|archive-url=https://web.archive.org/web/20161112085146/https://sourceforge.net/projects/agio/|url-status=live}}</ref> (Cross Platform), written in [[Ada (programming language)|Ada]], under the GPL. * [[Gnucleus]] (Windows), written in [[C (programming language)|C]]/[[C++]], under the LGPL * [[Gtk-gnutella]] (Cross Platform), written in [[C (programming language)|C]]. Only supports leaf-mode connections to G2 since version 1.1.<ref>{{cite web |url=http://gtk-gnutella.sourceforge.net/ |title=gtk-gnutella - The Graphical Unix Gnutella Client |publisher=Gtk-gnutella.sourceforge.net |access-date=2014-08-06 |archive-date=2005-07-08 |archive-url=https://web.archive.org/web/20050708082206/http://gtk-gnutella.sourceforge.net/ |url-status=live }}</ref> * <s>[[MLDonkey]]</s> (Cross Platform), written in [[OCaml]], under the GPL, however as of version 2.9.0 (2007), support is officially unmaintained and disabled in the binaries.<ref>{{cite web|url=http://mldonkey.sourceforge.net/OtherNetworksSupported|title=OtherNetworksSupported - MLDonkey|website=mldonkey.sourceforge.net|access-date=2016-11-11|archive-date=2016-11-12|archive-url=https://web.archive.org/web/20161112091741/http://mldonkey.sourceforge.net/OtherNetworksSupported|url-status=live}}</ref> * [[Shareaza]] (Windows), multi-network, written in C++, under the GPL, currently +/- 93% network share<ref name="Gnutella2 network share">{{cite web| url=http://crawler.trillinux.org/versions.html| title=Shareaza network share on the G2 network| publisher=Trillinux crawler (G2paranha)| access-date=2008-09-18| archive-date=2009-01-05| archive-url=https://web.archive.org/web/20090105180845/http://crawler.trillinux.org/versions.html| url-status=live}}</ref> [[Proprietary software]] implementations include: * [[Foxy (P2P)|Foxy]] (Windows) Chinese [[GnucDNA]]-derived program, no interaction with any other G2 clients possible, and uses its own "Foxy"-Network, which is separated from the original G2 and known for network leakage into G2{{Citation needed|date=April 2009}}. Theoretically, the client is compatible to G2. * [[Morpheus (file-sharing software)|Morpheus]] (Windows) === Comparison === The following table compares general and technical information for a number of available applications supporting the G2 network. {| style="font-size: 85%; text-align: center;" class="wikitable" ! Client ! Chat ! Handles big files (>4 GB) ! UKHL<ref>UKHL = UDP Known Hub List</ref> ! [[Unicode]] ! [[UPnP port mapping]] ! [[NAT traversal]] ! Remote preview ! Ability to search with hashes ! Hub modus ! [[Spyware]]/ [[Adware]]/ [[Malware]]-free ! Other networks ! Based on ! OS ! Other |- ! {{Rh}} | [[Foxy (P2P)|Foxy]] | {{yes}} | {{no}} | {{no}} | {{yes}} | {{yes}} | {{no}} | {{no}} | {{yes}} | {{partial|Foxy only}} | {{no}} | {{n/a}} | [[GnucDNA]] | [[Cross-platform]] | - |- ! {{Rh}} | FileScope | {{yes}} | {{no}} | {{no}} | {{no}} | {{no}} | {{no}} | {{yes}} | {{yes}} | {{yes}} | {{yes}} | {{yes|[[gnutella]], [[EDonkey network|eD2k]], OpenNap}} | - | [[Microsoft Windows|Windows]]<ref>{{Cite web|title=FileScope website: Statement about cross-platforum compatibility|url=http://www.filescope.com/|url-status=live|access-date=2008-08-22|website=FileScope|archive-date=2008-08-28|archive-url=https://web.archive.org/web/20080828172225/http://www.filescope.com/}}</ref> | Development has ended in 2014.<ref>{{Cite web|title=FileScope|url=https://sourceforge.net/projects/filescope/|url-status=live|access-date=2021-06-25|website=[[SourceForge]]|language=en|archive-date=2021-06-25|archive-url=https://web.archive.org/web/20210625090429/https://sourceforge.net/projects/filescope/}}</ref> |- ! {{Rh}} | [[Gnucleus]] | {{no}} | {{no}} | {{no}} | {{no}} | {{no}} | {{no}} | {{no}} | {{yes}} | {{no}} | {{yes}} | {{yes|[[gnutella]]}} | [[GnucDNA]] | [[Microsoft Windows|Windows]] | - |- ! {{Rh}} | [[gtk-gnutella]] | {{no}} | {{yes}} | {{no}} | {{yes}} | {{yes}} | {{yes}} | {{no}} | {{yes}} | {{no}} | {{yes}} | {{yes|[[gnutella]]}} | - | [[Cross-platform]] | - |- ! {{Rh2}} | [[Morpheus (file-sharing software)|Morpheus]] | {{yes}} | {{no}} | {{no}} | {{no}} | {{yes}} | {{no}} | {{no}} | {{yes}} | {{no}} | {{no}} | {{yes|[[gnutella]], NEOnet}} | [[GnucDNA]] | [[Microsoft Windows|Windows]] | Development and hosting of the client has been stopped |- ! {{Rh}} | [[Shareaza]] | {{yes}} | {{yes}} | {{yes}} | {{yes}} | {{yes}} | {{no}} | {{yes}} | {{yes}} | {{yes}} | {{yes}} | {{yes|[[gnutella]], [[EDonkey network|eD2k]], [[BitTorrent (protocol)|BitTorrent]]}} | - | [[Microsoft Windows|Windows]] | Includes [[IRC]] support |- |} == See also == * [[GnucDNA]] * [[Shareaza]] == References == <!-- references are not statements. A notes section would be more appropriate. --> {{Reflist|2}} == External links == * [http://g2.trillinux.org/ Gnutella2 wiki] * [http://crawler.doxu.org/ g2paranha - G2 Network Crawler] {{File sharing protocols}} {{Gnutella2}} [[Category:Gnutella2| ]] [[Category:File sharing networks]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Citation needed
(
edit
)
Template:Cite web
(
edit
)
Template:File sharing protocols
(
edit
)
Template:Fsb
(
edit
)
Template:Gnutella2
(
edit
)
Template:N/a
(
edit
)
Template:No
(
edit
)
Template:Partial
(
edit
)
Template:Reflist
(
edit
)
Template:Rh
(
edit
)
Template:Rh2
(
edit
)
Template:Yes
(
edit
)