How does DNS work? For dummies!

I get a lot of people asking how DNS works, my response is always that your computer asks a server what IP address a domain points to and then goes and makes it's request to that address. But how does DNS really work and why does it work the way it does? That question is a little more involved but i've tried to answer in the simplest way possible without dumbing it down too much.

The Basics: is a domain, when you type that into your address bar, your computer asks a server called a Domain Name Server (DNS) where to load that site from, the DNS Server responds with an IP Address which works just like you might use a house number & postcode to find a house in the real world, an IP address can be used to find a server on the internet.

Your browser then goes to that IP Address and says, what content have you got for, and if that server does indeed host the website, you’ll see it load up in your browser.

It’s the same for anything internet related, when you send an email to [email protected] the mail server your sending from asks a DNS Server the IP Address of the Mail server that it needs to send to and then once it has a response, sends the email to it.

The main domain record types:

  • A: This is what’s called a host record, it contains an IP address of a server that hosts a service.
  • CNAME: This is just a pointer, it represents the same value as another record, for example: has been configured as a CNAME because it’s hosted at the same place as (which is an A record). This is done so that if we ever change server IP Address of our website, then we only have to update the one record and the changes will be reflected on both, though it does require an extra lookup.
  • MX: A Mail Exchanger record specifies what mail servers are responsible for a domain and where to find the mailboxes for email addresses you might want to send to.

But how does my DNS Server know what server hosts that domain?

A DNS Server might not know who hosts so it goes off to another DNS server, usually the one responsible for all domains (called a root name server) and asks, who has the records for, it returns the address of the DNS Server that knows (because it has a list of servers that are responsible for managing the records on that domain) and then caches the answer for anyone who might ask later on. This makes the lookup a little slow for the first lookup but a lot quicker thereafter.

So why does it cache?

Without caching, websites would load very slowly because of the number of computers in the chain to load a website. If your computer, for every file, image, document and stylesheet had to find out what server hosted it every time, imagine the round trip it’d have to take and how many requests those servers would be answering! It could take seconds, just to find out where a file should be downloaded from. That’s a pretty crappy user experience.

For example, you load an image in your browser, such as, your computer first checks its internal cache, it has nothing, so it will go and ask the DNS Server within the company building if it knows, and guess what? It has no idea either, so it goes and asks the name servers that it’s been told to reference, let’s say for example Google’s domain name servers at the address, they don’t know either, so they ask a root name server which has records for the domains, they forward the request on to the server that has the records for and then the information is passed down the chain until it reaches your machine. Usually each machine in the chain will then cache the result so it doesn’t have to go off and do the lookup again, it can just go and ask the web server directly.

How does it know how long to cache for?

Each record on a DNS Server (no matter what type) has what’s called a TTL which stands for Time To Live, this tells your computer and any DNS Servers that have cached the record to go and look up a fresh copy of the record after the time has passed, it’s normally a few hours and is stored in milliseconds. This is because the data might have changed in that time, so if we did want to change a server address at some point, we can change the TTL from 24 hours to 1 hour, this tells all servers to update or at least invalidate their cache after 1 hour instead of 24. But be careful, because it was set to 24 hours previously, it’ll take 24 hours for the TTL change to reach all servers/computers involved.


I realise this is a little involved for a newbie, but I tried to make it fairly simple without dumbing down too much, any questions, just ask!

Published at

Tags: DNS,Internet,Web

Luke Alderton


Share with
Latest Comments
By Mark Gentry on Windows Server 2019 - Change product key does nothing
20 Aug 2021, 03:30 AM
By Cathy on In-Place Upgrade for a Windows Server domain controller
31 Jul 2021, 18:28 PM
By Mr. Greymatter on Raspberry Pi - Running Java app on Raspbian
16 Feb 2021, 07:35 AM
By Mikko Seittenranta on Xamarin Forms multiple instances of same app open
16 Feb 2021, 04:34 AM
By Andrew on Auto/Custom height on Xamarin Forms WebView for Android and iOS
22 Jan 2021, 22:15 PM
By Nick on Raspberry Pi - Running Java app on Raspbian
14 Oct 2020, 19:37 PM
By Ivan on Fixed: Value cannot be null Parameter Name: source
15 Sep 2020, 19:47 PM
By Anand on Raspberry Pi - Bluetooth using Bluecove on Raspbian
7 Sep 2020, 16:53 PM
App Development
Game Development
Web Development