DNS 查询过程以及为什么域名根服务器只能有 13 台呢?

为什么域名根服务器只能有 13 台呢?

其实对于一个小白,这个问题核心并不是13台,而是,域名根服务器什么,查询的过程是怎么样呢?

不算太久以前的基础知识

DNS 是一种分层结构,在整个互联网中组成一个树状系统,顶层是系统的根域名,下层为 TLD 以及二级域名,叶子就构成了所谓的 FQDN(Fully Qualified Domain Names),根域名通常使用 "." 来表示,其实际上也是由域名组成,全世界目前有 13 组域名根节点,由少数几个国家进行管理,而国内仅有几台根节点镜像。
img

img

如查询 www.im.qq.com,简略描述 DNS 的过程就是,先查询 com 这个域名的name server有哪些,然后选一个继续查询qq这个子域名的name servers有哪些,再选一个继续查询im这个子域名的name servers有哪些,www不是域名,查询结束。这个查询出来的结果就是google.com域名。所谓的name server,其实就是dns服务器啦,用来解析域名的。

万物起始之风——Root Servers

而上面的查询过程有一个问题就是,程序该去哪里查询comgov这些顶级域名的服务器呢?

这个就是 Root servers(根服务器) 的作用,用来查询以上的顶级域名的name server

思考

而怎么样获取 Root servers 的地址呢,注意这里没有动态域名(DNS)可用,获取的地址其实就是要获取IP,假如我们来实现 DNS 服务器,这一步你会怎么做呢?

其实这种做法很显然易见,写程序直觉就是如此:

  • 写一份配置文件放程序里,记录了全部Root servers的 IP 地址列表,定时从网上(这个就可以用域名了)更新这份配置文件;
  • 又或者程序启动的时候,直接从网上获取这些信息,存下来,也是定时更新;

DNS的做法也不外乎如是,而上面说到的这份"配置文件",就在 https://www.internic.net/domain/named.root,里面就是所有Root Servers的 信息:

```
; This file holds the information on root name servers needed to
; initialize cache of Internet domain name servers
; (e.g. reference this file in the "cache . "
; configuration file of BIND domain name servers).
;
; This file is made available by InterNIC
; under anonymous FTP as
; file /domain/named.cache
; on server FTP.INTERNIC.NET
; -OR- RS.INTERNIC.NET
;
; last update: July 30, 2019
; related version of root zone: 2019073000
;
; FORMERLY NS.INTERNIC.NET
;
. 3600000 NS A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4
A.ROOT-SERVERS.NET. 3600000 AAAA 2001:503:ba3e::2:30
;
; FORMERLY NS1.ISI.EDU
;
. 3600000 NS B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET. 3600000 A 199.9.14.201
B.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:200::b
;
; FORMERLY C.PSI.NET
;
. 3600000 NS C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12
C.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:2::c
;
; FORMERLY TERP.UMD.EDU
;
. 3600000 NS D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET. 3600000 A 199.7.91.13
D.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:2d::d
;
. 3600000 NS M.ROOT-SERVERS.NET.

top Created with Sketch.