Ultrapeer Election Principles
From Gnutella Developers
Source - [Latest draft (http://rfc-gnutella.sourceforge.net/src/rfc-0_6-draft.html)]
Since Gnutella is a decentralized system, ultrapeers are elected without the use of a central server. It is up to each node to determine if it is to become an ultrapeer or a shielded leaf node. First, there are some basic requirements that must be satisfied to even consider becoming an ultrapeer.
- Not firewalled. This can usually be approximated by looking at whether the host has received incoming connections.
- Suitable operating system. Some operating systems handle large numbers of sockets better than others. Linux, Windows 2000/NT/XP, and Mac OS/X will typically make better ultrapeers than Windows 95/98/ME or Mac Classic.
- Sufficient bandwidth. At least 15KB/s downstream and 10KB/s upstream bandwidth is recommended. This can be approximated by looking at the maximum upload and download throughput.
- Sufficient uptime. Ultrapeers should have long expected uptimes. A reasonable heuristic is that the expected future uptime is proportional to the current uptime. That is, nodes should not become ultrapeers until they have been running at least a few hours.
- Sufficient RAM and CPU speed. Ultrapeers need memory for storing routing tables and CPU speed for outing all incoming queries. Exactly how much is needed depends how efficiently it is implemented and must be experimented with.
If the above criterias are met, a node is said to be ultrapeer capable. Note that this is not the same as actually being an ultrapeer.
When either an ultrapeer capable node will actually become an ultrapeer depends on if there is need for more ultrapeers on the network, and on how well the above criteria are met. The need for ultrapeers can be estimated from the number of ultrapeers found, and can be communicated when new connections are established (see 2.3.2 Ultrapeer Handshaking).