Graph Visualization
P2P Network Data Visualization

Gnutella Protocol

A sequence of snapshots of the Gnutella peer-to-peer file sharing network from August 2002. There are total of 9 snapshots of Gnutella network collected in August 2002.

Nodes represent hosts in the Gnutella network topology and edges represent connections between the Gnutella hosts.

August 8 2002
Gnutella P2P Network

6,301 Nodes / 20,777 Edges

First P2P

Gnutella is a peer-to-peer network protocol. Founded in 2000, it was the first decentralized peer-to-peer network of its kind, leading to other, later networks adopting the model. Although the initial software stopped being distributed soon after it's publishment, copies got distributed so quickly among programmers and they hacked and improved the original version of Gnutella.


Gnutella introduced Gossip-based Protocol for communicating membership lists. In a Gossip-based Protocol, each members "gossip" K random membership lists to their neighbors. By this design, Gnutella achieved lower latency for communicating messages through the network, without sacrificing reliability and fault-tolerancy, compared to it's older membership protocol like All-to-All and Minimum-Spanning-Tree.

Binary Protocol

Gnutella specification have 5 simple operations - Ping/Pong/Query/Query Hit/Push. Ping and Pong are used for discovery, while Query and QueryHit are used for searching files through the whole newtork. Push is used to tell peers to send back files for better locality.

Node with Most Edges

Node ID=266 with 91 Edges
The node with most edges is ID=266, that is showed as the center of the following image. ID=123 follows with 87 edges, ID=367 with 86 edges comes next.
    MATCH (:Node)-[r:CONNECTED]->(toNode:Node)
    WITH toNode, count(r) AS num
    LIMIT 1
    RETURN toNode, num

Nodes without Edges

80 Nodes have no incoming connections. In other words, those nodes are isolated at the time this snapshot was taken.
    MATCH (n:Node)
    WHERE NOT (n)<-[:CONNECTED]-(:Node)
    RETURN n


In total, 2,383 global triangles can be found in this network. Related nodes count up to 6,301. Here is the example of triangles. Three nodes, 3, 15 and 123, are connected and make triangles.
    CALL gds.graph.project( "myGraph", "Node", { CONNECTED: { "orientation": "UNDIRECTED" } } )
    CALL gds.triangleCount.stats('myGraph')
    YIELD globalTriangleCount, nodeCount
    CALL gds.alpha.triangles('myGraph') YIELD nodeA, nodeB, nodeC RETURN gds.util.asNode(nodeA).id, gds.util.asNode(nodeB).id, gds.util.asNode(nodeC).id

Longest Shortest Path

According to the analysis at "Node with Most Edges", it turned out that Node ID=266 has the most number of edges. How about the longest shortest path that includes that node?
Nodes with ID 0, 3, 1896, 1118, 2997, 2312, 174, 427, 369 and 266 are connected and composes the longest shortest path including Node 266.
    MATCH p=(:Node)-[:CONNECTED*1..9]->(end:Node{id: 266})
    RETURN p
    ORDER BY length(p) DESC
    LIMIT 10

June, 2022

How P2P works is essentially beautiful.

There is no doubt that the development of P2P software has been the foundation of other technology areas like Distributed Computing and Blockchain afterwards.

Although there are a lot of disadvantages and limitations of P2P network architecture, there are exactly some areas that it's distributed nature comes into play.