了解DNS服务器

Linux ginotang 1198℃ 0评论

什么是DNS

估计经常上网的人对它不会陌生,我们能上网,背后全靠它的支持,虽然很多时候我们都只是简单的使用它,而不会建立一台DNS服务器。

简单来说,DNS的作用是在我们上网的时候帮助我们完成从域名到IP地址之间的转换(即通过域名寻找ip地址)。例如当我们在浏览器输入www.google.com,敲下回车的时候,DNS系统就开始工作,他把www.google.com转换成IP地址:172.217.11.68。

hosts文件

对于当今社会,DNS似乎是必须的,但是,在很久以前(没有dns系统的时候),是怎样通过域名访问网站的呢?答案是hosts文件。无论是linux系统还是windows系统,都有一个hosts文件。Linux系统的hosts文件在/etc/hosts下,windows的则在C:\Windows\System32\Drivers\etc\hosts下。

hosts文件的作用是建立ip地址和域名之间的映射关系,下面是经典的hosts文件内容(Windows下):

第一行是ipv4地址和本地域名的映射关系,第二行是ipv6地址和本地域名的映射关系。意思是:如果访问localhost,则它的地址是127.0.0.1。

如果不使用dns系统,只使用hosts文件,则存在一个严重的弊端:每一个访问的域名都必须在hosts文件中存在ip地址映射关系,在域名数量不多的情况下,这个问题可能不明显,但是对于如今的社会来说,维护这些关系是一个不可能完成的任务,因为域名实在是数之不尽。

DNS查询流程

DNS系统的出现其中一个原因是为了解决hosts文件集中管理映射关系的缺陷,也就是说,DNS采用的管理手段是分治策略:每个上级管理自己下级的域名和IP映射关系。

以一间学校的管理方式来举例:

dns relation

假如外面有人要找某班级的王某某,只知道名字,那么他必须先通过门卫找到校长,然后校长一级级往下通报(校长也不知道这个人是哪个班的),这里校长是最高负责人。

DNS系统的查询流程和上图基本相同,以www.google.com为例子:

dns lookup

上图中的根(root)服务器相当于校长的职位,具体可以分为4个步骤:

  • 第一:客户机向dns server 查询www.google.com的地址,但是该dns server也不知道,便向上(root)查询,root只知道com主机的地址,于是返回com地址给dns server。
  • 第二:dns server拿到上一步返回的地址继续向com主机查询,同样地,com主机只知道它的直属下级,即google,于是返回google主机的地址
  • 第三:dns server拿到第二步返回的google主机地址向google主机查询www的地址,www主机是google的直属下级,所以它知道www的地址,便返回给dns server,由于www主机是客户端最终请求的地址,dns server结束查询,把它返回给客户端
  • 第四:客户端拿到最终的ip地址可以正确访问www.google.com。

主机名和域名

主机名和域名并没有一个明确的界限,以www.google.com为例子,www是一个主机名,它在google.com域名下面,但如果www下面还有主机,例如:a.www.google.com,则a是主机名,www.google.com是域名。

顶级域名(TLD)

即Top Level Domain,在域名最右边的部分即是顶级域名,例如www.google.com中的com就是顶级域名。常用的顶级域名分为两种:

  • 通用顶级域(Generic top-level domain,缩写为gTLD):com、edu、org、net、gov等
  • 国家和地区顶级域(Country code top-level domain,缩写ccTLD):cn、cc、tw等

当我们注册域名的时候,就会在顶级域名中添加一条记录。例如注册sharpcode.cn,就会在cn顶级域名中添加一条sharpcode主机的记录。

根域名服务器

根域名服务器是DNS系统中最高级别的域名服务器,它们分布在全球多个国家,根域名服务器地址的数量被限制为13个,但并不意味着全球只有13台根域名服务器,通过任播技术,截至2017年11月,全球共有800台根域名服务器在运行。参考:根域名服务器

在一个完整的DNS查询中,根域名服务器负责返回顶级域名的地址。

zone和zone file

每一个域名都可以划分为一个zone,例如sharpcode.cn就是一个zone。每一个zone都必须定义解析规则,这些解析规则都被保存在zone file里面,而这些规则是一系列资源记录的集合。

资源记录(resource records)

常见的资源记录有NS记录、A记录、SOA记录、MX记录、CNAME记录等。

NS(Name Server)记录:指定用那一台域名服务器进行ip地址的解析。

A记录:用于设置域名和IP地址之间的映射

SOA记录:为了确保DNS服务器的正常工作,通常都会有主服务器和从服务器。SOA有两个作用,第一个是指定主服务器,第二个作用是设置主从服务器的一些同步规则。

MX记录:用于指定接收邮件的服务器名称

CNAME记录: 主机别名(规范名称)

资源记录的书写格式

一个正确的RR格式通常应该包含下面的内容:

name:通常和zone的名称一致,如果不填,则继承自上一条记录的名称。

ttl:dns缓存时间,客户端超过这个时间必须再次向服务器查询DNS信息。留空则使用全局的ttl值。

record class:常用的是IN(Internet),其他不常用的有CH、HS。参考:RFC1035

record type:记录类型,即NS、A、SOA等

record data:和record type对应的数据,如A记录则填写一个IP地址

record data中最复杂的就是SOA记录,它对应有7个字段:

  1. 主域名服务器:解析域名的主服务器
  2. 管理员邮箱:管理域名服务器的管理员邮箱
  3. 序列号:如果主服务器的序列号比从服务器的序列号大,则从服务器向主服务器请求更新
  4. 刷新时间:从服务器应该多久向主服务器查询一次SOA记录,以便请求更新;通常为24小时
  5. 重试时间:如果主服务器没有响应,则从服务器多久后再向主服务器发出序列号查询请求;必须小于刷新时间,通常设置为2小时
  6. 过期时间:如果主服务器没有响应,则从服务器多久后不再响应客户端的请求;一般大于刷新时间+重试时间。
  7. 生存期(negative cache ttl):查询失败时(negative response)的缓存时间。

正向解析和反向解析

正向解析是通过域名寻找ip地址,反向解析则是通过ip地址寻找域名。反向解析一般不常用,除非你需要搭建一个邮件服务器。

PTR记录

反向解析使用的资源记录称为PTR记录,典型的反向解析例子如下:

将10.0.0.6地址解析到MULTICS.MIT.EDU

zone file文件中可以使用简写的形式,如果我们的zone定义为:

则PTR记录可以简写为:

权威服务器和非权威服务器

权威服务器是对指定域名具有完全管理权限的DNS服务器,也就是说,权威服务器对客户端的查询可以直接返回结果。例如我们的域名注册好之后需要绑定一个ns记录,那么这个ns记录对于我们的域名来说就是一个权威服务器。

例如下面的查询:

这个查询中经历了整个DNS查询流程:从root DNS服务器到权威服务器,最后通过本地dns返回结果给我们,即最后的结果是由本地dns响应的,因此,这是一个非权威应答。

假如使用下面的查询:

结果中没有显示这是一个非权威应答。由于n3073.ns.yunjiasu.com是与sharpcode.cn绑定的一个NS记录,它可以直接返回www主机的地址,在这个过程中并没有经过任何第三方dns服务器,因此它就是我们的权威服务器。

结论:root服务器是最顶层的权威服务器,任何父DNS服务器都是其下级子域名的权威服务器。

递归和迭代

任何非权威应答都是通过递归查询,任何权威应答都是迭代查询。它们的区别是:递归查询中返回的结果是从其他DNS服务器获取的;而迭代查询返回的结果必须是DNS服务器中的本地数据,即zone file中有定义对应域名的数据。recursion and iteration上图中,阶段1所产生的查询都是递归查询,这个阶段可能只有一台DNS服务器,也可能有更多的DNS服务器。如果阶段1只有一台DNS服务器,这台服务器通常称为本地DNS服务器,那么递归查询发生在客户端和本地DNS服务器之间。

在阶段2中,dns3直接和权威服务器对话,然后把获取的结果一层层往下传递,直到客户端那里结束。

什么时候需要搭建自己的DNS服务器

通常不需要,例如建立一个博客,我们只需要为注册好的域名设置一个NS记录(使用别人的DNS服务器即可),然后再通过DNS提供商提供的方法添加相关的资源记录,这样别人就可以访问我们的网站。

但是一些大型的互联网企业为了提供稳定的服务,通常都会建立自己的DNS服务器,例如百度,谷歌,163等。

当然,如果建立DNS服务器的成本不是很高,也可以自己建立一个,这样可以更好地控制自己的服务器。

转载请注明:Pure nonsense » 了解DNS服务器

喜欢 (0)
0 0 投票数
文章评分
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x
()
x