

įor file identification and secure integrity check of files it employs SHA-1 hashes. The packet format was designed so that future network improvements and individual vendor features could be added without worry of causing bugs in other clients on the network. 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. 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. If the acknowledge packet is not sent, the reliable packet will be retransmitted in an attempt to ensure delivery.

.jpg)
When an UDP packet with enabled reliability flag is received, the client will respond with an acknowledge packet to inform the sending client that their packet arrived at its destination. Because of this, UDP packets in Gnutella2 have a flag to enable a reliability setting. Because UDP is connectionless, there is no standard method to inform the sending client that a message was received, and so if the packet is lost, there is no way to know. However, UDP is not without its own drawbacks. The 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. Gnutella2 relies extensively on UDP, rather than TCP, for searches. This allows for Hubs to reduce bandwidth greatly by simply not forwarding queries to Leaves and neighbouring Hubs if the entries which match the search are not found in the routing tables. Hubs index what files a Leaf has by means of a Query Routing Table, which is filled with single bit entries of hashes of keywords which the Leaf uploads to the Hub, and which the Hub then combines with all the hash tables its Leaves have sent it in order to create a version to send to their neighbouring Hubs. 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. 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. Most Leaves maintain two connections to Hubs, while Hubs accept hundreds of Leaf connections, and an average of 7 connections to other Hubs. Gnutella2 divides nodes into two groups: Leaves and Hubs. Many Gnutella2 proponents claim that this is because of political reasons, while gnutella supporters claim that the drastic changes don't have enough merit to outweigh the cost of deep rewrites. G2 is not supported by many of the "old" gnutella network clients, however many Gnutella2 clients still also connect to gnutella. The draft specifications were released on March 26, 2003, and more detailed specifications soon followed. With the developers entrenched in their positions, a flame war soon erupted, further cementing both sides' resolve. The Gnutella2 protocol still uses the old "GNUTELLA CONNECT/0.6" handshake string for its connections as defined in the gnutella 0.6 specifications, which was criticized by the GDF as an attempt to use the gnutella network for bootstrapping the new, unrelated network, while proponents of the network claimed that its intent was to remain backwards-compatible with gnutella to allow current gnutella clients to add Gnutella2 at their leisure. Many still refuse to refer to the network as "Gnutella2" and instead refer to it as "Mike's Protocol" ("MP"). While some thought the goals stated for Gnutella2, 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, to be impressive and desirable, other developers, primarily those of LimeWire and BearShare, thought it a "cheap publicity stunt" and discounted technical merits. In November 2002, Michael Stokes announced the Gnutella2 protocol to the Gnutella Developers Forum.
