What protocols or algorithms are Bitcoin clients using in order to find their peers? I learnt that BitTorrent clients may rely on central computers called trackers. Do Bitcoin clients need any kind of central servers or nodes in order to operate?

2 Answers
2

Bitcoin clients use several methods to locate other clients. The primary method is a list of nodes from a previous connection to the network. The works very well for everything but your first connection or a connection after a very long period of disconnection.

For the case where you have no previous known IPs or they aren't usable, the primary fallback method is by DNS seeds. Several host names (such as dnsseed.bluematt.me) are maintained that resolve to a list of IP addresses known to be running nodes. Should that fail, the client has a list of IP addresses believed to point to stable nodes hard-coded into it.

One method that used to be used, but that has since been abandoned, was having the clients locate each other using an IRC server. That worked similar to a BitTorrent tracker.

Once you are connected to the network, you will begin to receive lists of IP addresses and ports of known clients.

@knocte It used to use irc.lfnet.org, joining a random channel between #bitcoin00 and #bitcoin99.
– David SchwartzApr 14 '13 at 13:03

1

so if lfnet.org went down, that was a single point of failure? what now, who dictates what are the DNS names to lookup?
– knocteApr 14 '13 at 14:12

2

@Taiko DNS poisoning has no effect on connections to hard coded IPs. You are right that an entity that controls your Internet access can break your ability to use bitcoin, just as it can break your ability to use any other Internet service. (Bitcoin is especially resilient, however, because just one leak saves everyone.)
– David SchwartzOct 24 '17 at 18:37

The number one way that clients learn about other clients is by connecting to another client and issuing the 'getaddr' command. The standard client has always had that ability. However, there's a problem with this - how do you learn about client #1?

IRC seeding. This is something that's been in since the first version too. It was simple to implement, but ultimately didn't scale. The first version connected to freenode. Then, bitcoin nodes started getting k-lined. Later versions connected to lfnet. Then, lfnet went down, and IRC support was removed entirely. DNS was around by this point, so that was fine.