So what is the Domain Name System or as it’s more commonly known as DNS? Well, very simply it is a huge distributed database which contains the domain names and addresses of all devices on the network. This structure is crucial to the way DNS functions, it allows local control of specific segments – and means that somebody doesn’t control it (or effectively the internet!). Yet data in each of these local segments is available to anyone across the entire database. It’s not the most efficient system, but reasonable levels of performance are produced by replicating the local segments and caching these for quicker resolution.
The database is operated on a client/server configuration, the important part served by Name servers. These Name servers contain information on addresses on specific segments and make that information available to clients and other servers – a process called resolving. Resolvers are often just simple library routines, they create queries on demand and forward them to name servers across a network.
The structure of a DNS database is very similar to the directory tree of any filesystem. It’s easiest to think of these as an inverted tree, at the very top is the root node. Each subsequent node is displayed with a text label which identifies it’s relationship with it’s parent. The second tier of the database contains domain extensions such as com, edu, gov and mil. At the top of the tree the node has a ’null’ label, although in practice and configuration it is written as a single dot – ..
Every domain in this tree has a unique name, it’s name helps identify it’s location in the database. The name is made up of the series of nodes that distinguish it’s location in the database. For example if I establish a new domain called mybesttelly.co.uk – I would be responsible for that small segment – mybesttelly.co.uk and any devices such as computer1.mybesttelly.co.uk, www.mybesttellt.co.uk and mail.mybesttelly.co.uk. I can control nodes below my DNS name but nothing above, although I can delegate authority or redirect my resolution requirements to other servers.
But the underlying requirement of course, is to resolve the domain names with specific IP address (and vice versa). In the early days of networking this resolution was done by a text file called the hosts file, which was replicated across the network. In larger networks and specifically the internet – this is clearly not possible. The sheer size of the file would be enormous and replicating changes throughout the world would be completely impossible. There is much more to this technology of course, DNS lies at the heart of the internet and making it function. Name resolution helps any specific client find the server it is looking for. It is open to abuse and there have been many attacks on the infrastructure and localised DNS poisioning and spooofing attacks. DNS is being improved and developed all the time – you can see some of the advances in things like Dynamic DNS or the Smart DNS applied to devices to make them region free – see here for information.
Without DNS we’d be left with huge lists of IP addresses of our favorite sites, it would be rather hard work. As it is, controlling our client IP addresses is more likely to be an issue as I discovered when I tried to watch Canadian TV in the USA last week but was blocked because I had an American IP address.
For a more thorough introduction you could do a lot worse than the excellent primer on this site – http://www.tcpipguide.com/free/t_TCPIPDomainNameSystemDNS.htm.