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

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .