To have a distributed network(1), you need two things:
1. All the nodes in the network should have similar behavior.
2. No network structure or organization is assumed.
By the definition of a distributed network itself, sending some data to a node is about the same as sending the same data to any other node. We can even say that the whole network is "represented" by any node in it. If you connect yourself to any node on the network, it is as if you connected yourself to all the nodes on the network. From that, we can say that no other node really needs to know a way to identify you precisely: if they want to send you some data, they just need to send it to any node on the network, it shouldn't make any difference.
As long as you can connect yourself to the network, you can send data to any node without you having to know where it is, or how to identify it. As a result, a distributed network can be anonymous, in the sense that you don't really need to know where some data came from or where its destination is.
Thus, it is possible, with a distributed network, to make an abstraction of the specificities of the underlying network protocol, or of the IP addresses in a TCP/IP network.
If you think about it, if all the nodes are equivalent, then there is no need to restrict the ability to provide information only to some nodes in the network. Any node can equally be a server. So, from that and from the abstracted IP addresses, a distributed network can implement a peer-to-peer network.
Because we assume that there is no network structure or organization, or that the network is "anarchic", we can assume that there is no single point of failure. What this means is that for the network to "go down", all the nodes must "go down". Also, it can be very difficult to attack the network(2), since you will need to attack it from many points at the same time to have any kind of effect.
So, we can say that the network is dynamic, as opposed to static.
In a static network, the number of nodes affected when a node disconnects itself, n
, is:
n = im + k
,
where k
and i
are some arbitrary constants other than 0, and m
is the total number of nodes in the network. As the network grows, the number of nodes affected by the disconnection becomes higher. For example, a pure Client/Server network has i = 1
and k = 0
for the server, and i = 0
and k = 1
for the clients.
In a dynamic network, the number of affected nodes becomes:
n = k
,
where k
is an arbitrary constant.
If we look at the ratio of the nodes that will be affected by a disconnection as the size of the network grows to infinity, the ratio is i
for a static network, and 0 for a dynamic network. This means that for a dynamic network, the more the network grows, the more stable it becomes.
The goal of the ANet project is to provide a framework to allow easy implementation of distributed networks on top of any communication protocol. To do so, the ANet protocol should not make any assumption about the underlying network structure or about its use.
Thus, ANet has to be a generic protocol for an anonymous distributed network. By making ANet very generic, yet flexible, it becomes possible for anyone to "fine-tune" ANet for a particular use(3). This can be done by telling ANet to make some assumptions for some service. For example, you could easily implement a client/server system with ANet for a "chat" service, or you can implement more complex network structures that include backbones and ring-like structures.
By doing so, ANet is not a specific program for a specific solution, but more of a powerfull framework for a new generation of network communication.
(1) Again, this is my definition. It is "inspired" by the terms "Distributed Database" and "Distributed Computing", but applied to network communications. I've seen some publications talking about distributed networking, but their definition was very confusing (or missing).
(2) This doesn't mean that it is impossible that the network is taken doen from a single point. It is up to the protocols of the services to not allow an attack that can affect everyone.
(3) What this means is that even if the "generic" version of ANet proves to be impractical to use, we can always re-use ANet for some specific use. We won't spend too much effort of making the "generic" version of ANet "universally good" in all situations, nor we will try to compete directly with other protocols optimized for a particular use (well, until we "fine-tune" it for that use). We can't lose!
Last update for this document: September 1, 2001, at 18:41:14 PST