If you think about what we are trying to do at a high level, there are
two questions to consider: (1) How do we map objects onto nodes, and
(2) How do we route a request to the node that is responsible for a given
object? We start with the first question, which has a simple statement:
How do we map an object with name x into the address of some node n
that is able to serve that object? While traditional peer-to-peer networks
have no control over which node hosts object x, if we could control how
objects get distributed over the network, we might be able to do a better
job of finding those objects at a later time.
A well-known technique for mapping names into an address is to use a
hash table, so that
hash(x) −−→n