As i know when the user's default DNS server doesn't know the answer for a query (e.g. the IP of google.pl) it asks one of the Root Servers. Assuming we are querying for a google.pl IP address (A query type). My default DNS server doesn't know the answer so it asks one of the Root Servers (for e.g. a.root-servers.net).

  1. How do the default DNS server know the IP addresses of Root Servers. Are they just defined in the server's config file?
  2. When asked about google.pl Root Server returns a list of pl name servers such as a-dns.pl, c-dns.pl... How now the default DNS server get the IP address of a-dns.pl? Does it send an extra A type query to the . server for a-dns.pl name or just use Additional records (send along with google.pl NS servers list Authority records) which include IP address of a-dns.pl?

1 Answer 1


Your 'default' DNS server (aka, the resolving DNS server), does indeed have a list of all the root servers. It's called the Root Hints or Root Zone file and is published by IANA (https://www.iana.org/domains/root/files). DNS server operators should regularly update their Root Hints files to point to the right nameservers (although there aren't many changes in the Root Hints file). Often the Root Hints/Zone files are distributed with the DNS server distribution (RPM/deb).

The Root server will also give the A record for a-dns.pl to the client. The glue consists of an NS and an A (or AAAA) record. If you review the dig command output, you can see that I request the NS records for .pl, but the DNS server also returns the A records for the .pl name servers.

mtak@frisbee:~$ dig -t ns pl. @k.root-servers.net

; <<>> DiG 9.10.3-P4-Ubuntu <<>> -t ns pl. @k.root-servers.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40548
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 8, ADDITIONAL: 15
;; WARNING: recursion requested but not available

; EDNS: version: 0, flags:; udp: 4096
;pl.                IN  NS

pl.         172800  IN  NS  a-dns.pl.
pl.         172800  IN  NS  c-dns.pl.
pl.         172800  IN  NS  d-dns.pl.
pl.         172800  IN  NS  e-dns.pl.
pl.         172800  IN  NS  f-dns.pl.
pl.         172800  IN  NS  g-dns.pl.
pl.         172800  IN  NS  h-dns.pl.
pl.         172800  IN  NS  i-dns.pl.

a-dns.pl.       172800  IN  A
a-dns.pl.       172800  IN  AAAA    2001:a10:121:1::156
c-dns.pl.       172800  IN  A
c-dns.pl.       172800  IN  AAAA    2a02:38:14::146
d-dns.pl.       172800  IN  A
d-dns.pl.       172800  IN  AAAA    2a00:4120:8000:2::186
e-dns.pl.       172800  IN  A
f-dns.pl.       172800  IN  A
f-dns.pl.       172800  IN  AAAA    2001:1a68:0:17::238
g-dns.pl.       172800  IN  A
g-dns.pl.       172800  IN  AAAA    2001:6d8:1001:1::252
h-dns.pl.       172800  IN  A
h-dns.pl.       172800  IN  AAAA    2001:678:4::2
i-dns.pl.       172800  IN  A

;; Query time: 3 msec
;; WHEN: Thu May 11 17:56:23 CEST 2017
;; MSG SIZE  rcvd: 487
  • So the A record for a-dns.pl is send together in the same response message with NS record and the clients doesn't have to send am extra qiery for A a-dns.pl record?
    – Mulligan
    May 23, 2017 at 15:25
  • That's what I said, right? Even if the nameserver doesn't, the client can send an additional request to the nameserver, as it does have the A(AAA) record.
    – mtak
    May 23, 2017 at 17:42

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.