# DNS system
The resolution of nameserver starts when a *DNS Resolver* receives the request of naming resolution from a client (e.g. a web browser).
The first server that is contacted is one of the 13 *Root Servers*.
Those servere was historically owned by different big institution and corporation: NASA; Mariland University, Cloudflare, Verisign...
Even if root servers are only 13 (this limitations is in the original architecture of DNS since it requires there to be a maximum of 13 server addresses in the root zone) each one is connected with many others (around 600 around the globe) in anycast to route requests.

The root server identified the address of a TLD (Top Level Domain: e.g. "com") server that is contacted to get further in the name resolution.

At this point the resolution is performed querying an *Authoritative Nameserver*.
## Observations
The DNS architecture was born in a period where few actors was able to run the hardware required and the distribution of the domain was geography dependant.
A name resolution in a peer to peer network with high volume of sharing capabilities can be drastically different.
Neverthless few observations about the properties of the DNS architecure can be held in any distributed name resolution architecture:
* **Having hierarchical relation between servers**. In that architecture the hirarchy mapped the DNS name itself. In a massive distributed scenario, child/parent relation can be a good way to enforce relations between different resolvers and mitigate errors/malicious behaviour.
* **Caching**. DNS architecture use massively caching mechanism. This is part of the time needed to update a DNS once a modification is requested: there is the need to wait that all authoritatve servers are refreshed with the new value. Cache is something that could be maintained in a dynamic way. Prootocol could be for example responsible to decide the tradeoff between the time to update the name and its redundancy (or selectively refresh less frequently naming that are never changed). Another suggestion is to include two different caching mechanisms: naming for never changing objects and modifiable handle.
* **Data Sharing**. In DNS architecture data is shared for caching purpose. Is not exluded that a if instead DNS service has a cost, nodes that resolve correctly names could be rewarded by some fee.