DNS的基本原理

一、DNS是什么

DNS(Domain Name System——域名系统)的作用非常简单,就是根据提供的域名,来查询相应的IP地址。这个系统的目的也很简单,避免人们去记忆数字形式的IP地址,因为字母比数字要容易记些。就好像你的电话簿,你不可能记住里面所有的电话号码,但你可以很容易的知道一个人的名字。

二、查询过程

DNS的作用虽然简单,但是它的查询过程却比看起来的要复杂得多,分为好几个步骤。在linux下,你可以通过命令dig来显示DNS的查询过程。

$ dig baidu.com

命令的执行结果如下:
DNS查询过程

查询的结果包括了五段内容,第一段为查询的参数和统计

; <<>> DiG 9.10.3-P4-Ubuntu <<>> baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21572
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

第三段为查询内容

;; QUESTION SECTION:
;baidu.com.         IN  A

上面的内容意思是,查询域名baidu.com的A记录,其中A表示地址,即address的缩写

第四段为DNS服务器的回应内容

;; ANSWER SECTION:
baidu.com.      556 IN  A   111.13.101.208
baidu.com.      556 IN  A   180.149.132.47
baidu.com.      556 IN  A   220.181.57.217
baidu.com.      556 IN  A   123.125.114.144

上面的内容意思是,baidu.com有四个A记录,即四个IP地址。数字556是TTL(生存时间)值,表示缓存时间,即556秒之内不用重新查询,DNS服务器会把之前查询的结果直接返回给你。

第五段是DNS服务器的传输信息

;; Query time: 2 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Sat Apr 08 20:06:11 CST 2017
;; MSG SIZE  rcvd: 102

它的内容显示,本地DNS服务器的地址是127.0.1.1,DNS服务器的端口是53,以及回应内容的大小是102个字节。你可以通过”+short”参数来简化查询结果。

$ dig +short baidu.com
111.13.101.208
123.125.114.144
180.149.132.47
220.181.57.217

它的返回内容是查询域名对应的IP地址。

三、DNS服务器

想要使用DNS服务,你当然要知道DNS服务器的IP地址,否则你没法上网浏览网页了。DNS服务器的IP地址可以由DHCP协议为子网中的计算机动态分配,也可以使用固定的地址(比如谷歌的8.8.8.8)。Linux中,DNS服务器的IP地址保存在/etc/resolv.conf中。dig命令默认使用本机设置好的DNS服务器地址进行查询,你也可以通过参数”@”,来显示指定其他DNS服务器进行查询。

$ dig @8.8.8.8 baidu.com
四、域名的分级

域名分为多层,DNS服务器查询域名的IP地址,采用的方式也是分级查询。如果你仔细看前面的查询结果,你会发现每个域名的后面都有一个点”.”。

baidu.com.

我们在查询时输入的是baidu.com,而显示的结果却多了一个点。这不是错误,而是所有域名的尾部都有一个根域名。比如,www.example.com真正的域名是www.example.com.root,简写为www.example.com.。因为,根域名.root对于所有域名都是一样的,所以加以省略。
根域名的下一级,叫做“顶级域名”(top-level domain,缩写TLD),比如.com、.net,再下一级叫做“刺激域名”(second-level domain,缩写SLD),比如www.example.com,中的.example,这一级的域名可以进行注册;再下一级的叫做主机名(host),比如www.example.com中的www,又称为“三级域名”,这是用户自己为域里面为服务器分配的名称,是用户可以任意分配的。
可以知道域名的层级结构如下:

主机名.次级域名.顶级域名.根域名
#即
host.sld.tld.root
五、根域名服务器

DNS根据域名的层级,进行分级查询。
你需要知道,每一级域名都有自己的NS记录,NS记录指向该级域名的域名服务器。这些服务器知道下一级域名的各种记录。分级查询的就是一级一级的查询域名的NS记录,知道查询到最终的IP地址,大致过程如下:

  1. 从“根域名服务器”查到“顶级域名服务器”的NS记录和A记录
  2. 从“顶级域名服务器”查到“次级域名服务器”的NS记录和A记录
  3. 从“次级域名服务器”查到“主机名”的IP地址

如过仔细看,你会发现没有提到根域名服务器的IP地址是怎么知道的,答案是,根域名服务器的NS记录和IP地址几乎不会变,所以在DNS服务器中设置好了。根域名服务器全世界一共有十三组,从“A.ROOT-SERVERS.NET——M.ROOT-SERVERS.NET”,你可以访问根域名服务器,来获取根域名服务器的NS和IP地址信息。

.           518400  IN  NS  a.root-servers.net.
.           518400  IN  NS  b.root-servers.net.
.           518400  IN  NS  c.root-servers.net.
.           518400  IN  NS  d.root-servers.net.
.           518400  IN  NS  e.root-servers.net.
.           518400  IN  NS  f.root-servers.net.
.           518400  IN  NS  g.root-servers.net.
.           518400  IN  NS  h.root-servers.net.
.           518400  IN  NS  i.root-servers.net.
.           518400  IN  NS  j.root-servers.net.
.           518400  IN  NS  k.root-servers.net.
.           518400  IN  NS  l.root-servers.net.
.           518400  IN  NS  m.root-servers.net.

可以看到这些记录的TTL为518400秒,为144个小时。

六、分级查询演示

通过dig命令的+trace参数可以显示DNS的整个查询过程

$ dig +trace baidu.com

命令执行结果的第一段如下,其中列出了根域名 . 的所有NS记录,即所有根域名服务器:

; <<>> DiG 9.10.3-P4-Ubuntu <<>> +trace baidu.com
;; global options: +cmd
.           2530    IN  NS  m.root-servers.net.
.           2530    IN  NS  a.root-servers.net.
.           2530    IN  NS  c.root-servers.net.
.           2530    IN  NS  e.root-servers.net.
.           2530    IN  NS  l.root-servers.net.
.           2530    IN  NS  d.root-servers.net.
.           2530    IN  NS  h.root-servers.net.
.           2530    IN  NS  k.root-servers.net.
.           2530    IN  NS  j.root-servers.net.
.           2530    IN  NS  f.root-servers.net.
.           2530    IN  NS  g.root-servers.net.
.           2530    IN  NS  b.root-servers.net.
.           2530    IN  NS  i.root-servers.net.

根据内置的根域名服务器IP地址,DNS服务器向所有这些IP地址发出查询请求,询问baidu.com的顶级域名服务器com.的NS记录。DNS服务器会选择最先回复的结果,并缓存,以后只向这台服务器发请求。

com.            172800  IN  NS  a.gtld-servers.net.
com.            172800  IN  NS  i.gtld-servers.net.
com.            172800  IN  NS  k.gtld-servers.net.
com.            172800  IN  NS  m.gtld-servers.net.
com.            172800  IN  NS  h.gtld-servers.net.
com.            172800  IN  NS  b.gtld-servers.net.
com.            172800  IN  NS  c.gtld-servers.net.
com.            172800  IN  NS  e.gtld-servers.net.
com.            172800  IN  NS  f.gtld-servers.net.
com.            172800  IN  NS  g.gtld-servers.net.
com.            172800  IN  NS  l.gtld-servers.net.
com.            172800  IN  NS  d.gtld-servers.net.
com.            172800  IN  NS  j.gtld-servers.net.

第二段内容显示了.com域名的13条NS记录和IP地址。然后DNS服务器向这些顶级域名服务器发出查询baidu.com的次级域名baidu.com的NS记录的请求。

baidu.com.      172800  IN  NS  dns.baidu.com.
baidu.com.      172800  IN  NS  ns2.baidu.com.
baidu.com.      172800  IN  NS  ns3.baidu.com.
baidu.com.      172800  IN  NS  ns4.baidu.com.
baidu.com.      172800  IN  NS  ns7.baidu.com.

接着的结果显示了baidu.com有5条NS记录,同时返回每一条记录的对应的IP地址。然后DNS服务器向这些NS服务器查询baidu.com的主机名。

baidu.com.      600 IN  A   111.13.101.208
baidu.com.      600 IN  A   123.125.114.144
baidu.com.      600 IN  A   180.149.132.47
baidu.com.      600 IN  A   220.181.57.217
baidu.com.      86400   IN  NS  ns2.baidu.com.
baidu.com.      86400   IN  NS  ns4.baidu.com.
baidu.com.      86400   IN  NS  ns3.baidu.com.
baidu.com.      86400   IN  NS  ns7.baidu.com.
baidu.com.      86400   IN  NS  dns.baidu.com.
;; Received 272 bytes from 180.76.76.92#53(ns7.baidu.com) in 45 ms

查询结果如上,baidu.com有4条A记录,即这四个IP地址都可以访问baidu.com。并且显示了最先返回结果的是ns7.baidu.com。

七、DNS的记录类型

域名和IP之间的对应关系,称为“记录”(record)。根据使用的目的不同,又分为不同的类型,常见的DNS记录类型如下:

  1. A:地址记录(Address),返回域名指向的IP地址。
  2. NS:域名服务器记录(Name Server),返回保存下一级域名信息的服务器地址。该记录只能设置为域名,不能设置为IP地址。
  3. MX:邮件记录(Mail eXchange),返回接收电子邮件的服务器地址。
  4. CNAME:规范名称记录(Canonical Name),返回另一个域名,即当前查询的域名是另一个域名的跳转,详见下文。
  5. PTR:逆向查询记录(Pointer Record),只用于从IP地址查询域名。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值