DNS的基本概念
DNS是什么?
DNS(Domain Name System)是Internet发展多年以来最重要的服务之一,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。
DNS使用TCP和UDP端口53
域名解析
简单来说,DNS就像是一个通讯录,AnyISalIn的电话是1829888****,有了通讯录,我们只需通过输入AnyISalIn这个名字就能够自动拨打其电话。DNS主要是用来定义IP地址和域名的关系。
-
A 记录(主机记录)
(1)什么情况下会使用到A记录?
如果需要将域名指向一个IP地址,就需要添加A记录。
(2)A记录的添加方式
- 记录类型为A。
- 主机记录处填子域名(比如需要添加www.abc.com的解析,只需要在主机记录处填写www即可;如果只是想添加 abc.com的解析,主机记录直接留空,系统会自动填一个“@”到输入框内)。
- 线路类型(默认为必填项,否则会导致部分用户无法解析)。
- 记录值为IP地址,只可以填写IPv4地址。
- TTL不需要填写,添加时系统会自动生成,默认为600秒(TTL为缓存时间,数值越小,修改记录各地生效时间越快)。
CNAME 记录(别名记录)
(1)什么情况下会用到CNAME记录?
如果需要将域名指向另一个域名,再由另一个域名提供IP地址,就需要添加CNAME记录。
(2) CNAME记录的添加方式
- 记录类型为CNAME。
- 主机记录处填子域名(比如需要添加www.abc.com的解析,只需要在主机记录处填写www即可;如果只是想添加abc.com的解析,主机记录直接留空,系统会自动填一个“@”到输入框内,@的CNAME会影响到MX记录的正常解析,添加时请慎重考虑)。
- 线路类型(默认为必填项,否则会导致部分用户无法解析;)。
- 记录值为CNAME指向的域名,只可以填写域名。
- MX优先级不需要填写。
- TTL不需要填写,添加时系统会自动生成,默认为600秒(TTL为缓存时间,数值越小,修改记录各地生效时间越快)。
NS 记录
(1)什么情况下会用到NS记录?
如果需要把子域名交给其他DNS服务商解析,就需要添加NS记录。
(2)NS记录的添加方式
- 记录类型为NS。
- 主机记录处填子域名(比如需要将opo.abc.com的解析授权给其他DNS服务器,只需要在主机记录处填写opo即可,NS记录的主机记录(RR值)不能为空,主机记录@不能作为NS记录使用,且NS记录不支持泛解析【将所有子域名解析到同一地址】,授权出去的子域名不会影响其他子域名的正常解析)。
- 线路类型(默认为必填项,否则会导致部分用户无法解析)。
- NS记录值,NS向下授权,请填写DNS域名记录值为要授权的DNS服务器域名,为了保证服务可靠性,建议您添加至少2组DNS服务(例如:ns1.alidns.com, ns2.alidns.com)。
- TTL不需要填写,添加时系统会自动生成,默认为600秒(TTL为缓存时间,数值越小,修改记录各地生效时间越快)。
MX 记录
(1)什么情况下会用到MX记录?
如果需要设置邮箱,让邮箱能收到邮件,就需要添加MX记录。
(2)MX记录的添加方式
- 记录类型为MX。
- 主机记录处填子域名(一般情况下是要做xxx@abc.com的邮箱,所以主机记录一般是留空的;如果主机记录填mail,邮箱地址会变为xxx@mail.abc.com)。
- 线路类型(默认为必填项,否则会导致部分用户无法解析,邮件无法收取;MX一般不需要做智能解析,直接默认即可)。
- 记录值请填写邮件服务商提供给您的域名。
- 如果您使用的是自己搭建的邮件服务器,则您必须需要有个邮件服务器域名,且该域名必须有A记录。
- MX优先级的数值越低,优先级别就越高。
- MX 优先级在只存在一条 MX 记录的时候没有意义。当您的域名解析记录中存在多条 MX 记录的时候,邮件发送方的服务器会优先把邮件投递到 MX 优先级数值最小的服务器。当此服务器出现故障无法接收邮件的时候,发送方的服务器会自动选择下一个优先级数值最小的服务器,直到邮件投递成功,或者所有服务器都无法投递产生无法投递的错误。
- TTL不需要填写,添加时系统会自动生成,默认为600秒(TTL为缓存时间,数值越小,修改记录各地生效时间越快)。
AAAA 记录(IPv6主机记录)
(1)什么情况下会用到AAAA记录?
当您希望访问者通过IPv6地址访问您的域名时,可以使用AAAA记录。
(2)AAAA记录的添加方式
- 记录类型为AAAA。
- 主机记录处填子域名(比如需要www.abc.com,只需要在主机记录处填写www即可;如果只是想添加abc.com的解析,主机记录直接留空,系统会自动填一个“@”到输入框内)。
- 线路类型(默认为必填项,否则会导致部分用户无法解析;)。
- 记录值为IP地址,只可以填写IPv6地址。
- TTL不需要填写,添加时系统会自动生成,默认为600秒(TTL为缓存时间,数值越小,修改记录各地生效时间越快)。
SRV 记录(服务位置记录)
(1)什么情况下会用到SRV记录?
SRV记录用来标识某台服务器使用了某个服务,记录了哪台计算机提供了哪个服务。
(2)SRV记录的添加方式
- 记录类型为SRV。
- 主机记录处格式为服务的名字.协议的类型(例如:_example-server._tcp)。
- 线路类型(默认为必填项,否则会导致部分用户无法解析)。
- SRV记录值格式为:优先级、空格、权重、空格、端口号、空格、目标地址,例如:3 0 2176 example-server.2.google.com。
- TTL不需要填写,添加时系统会自动生成,默认为600秒(TTL为缓存时间,数值越小,修改记录各地生效时间越快)
TXT 记录
(1)什么情况下会用到TXT记录?
如果希望对域名进行标识和说明,可以使用TXT记录,绝大多数的TXT记录是应用于SPF记录(反垃圾邮件)。
(2)TXT记录的添加方式
- 记录类型为TXT。
- 主机记录处填子域名(比如需要添加www.abc.com的TXT记录,只需要在主机记录处填写www即可;如果只是想添加abc.com的TXT记录,主机记录直接留空,系统会自动填一个“@”到输入框内)。
- 线路类型(默认为必填项,否则会导致部分用户无法解析;TXT记录不需要智能解析,直接默认即可)。
- 记录值可任意填写(可为空),通常用做SPF记录(反垃圾邮件)使用。
- 最典型的SPF格式的TXT记录例子为“v=spf1amx~all”,表示只有这个域名的A记录和MX记录中的IP地址有权限使用这个域名发送邮件。
- TTL不需要填写,添加时系统会自动生成,默认为600秒(TTL为缓存时间,数值越小,修改记录各地生效时间越快)。
DNS解析答案类型
肯定答案:正确解析了请求的内容
否定答案:请求的条目不存在等原因无法返回结果
权威答案:通过迭代的方式从所查询域名的所在域的DNS服务器返回的结果
非权威答案:请求的DNS服务器缓存的结果
域名, 根域、顶级域、二级域、子域
域名
如在浏览器地址栏输入的www.baidu.com,www.hao123.com等我们称之为域名,域名即网站名称。如果说互联网的本质是连接一切,域名则为“一切”提供了身份标识功能,而IP为“一切”提供了寻址功能。域名和IP的关系可类比每个人的姓名与住址。根域
、顶级域
、二级域
、子域
域名采用层次化的方式进行组织,每一个点代表一个层级。一个域名完整的格式为www.baidu.com. 最末尾的点代表根域,常常省略;com即顶级域(TLD);baidu.com即二级域。依次类推,还有三级域、四级域等等。子域是一个相对的概念,baidu.com是com的子域,www.baidu.com是baidu.com的子域。其他
正向解析
查找域名对应IP的过程。反向解析
查找IP对应域名的过程。解析器
即resolver,处于DNS客户端的一套系统,用于实现正向解析或者反向解析。
DNS结构
上图为当今Internet中的DNS的结构,最多可分达127层,朋友们别看上图中的www.anyisalin.com.和ns.anyisalin.com.相距很近,其实他们可能各自在天南地北。DNS的各层只是逻辑上的关系,不存在物理上的界定 。
在DNS各域中只包含其子域的信息,例如 “.”域中的解析库只包含全球所有顶级域对对应的NS服务器的信息、 并且不知道父域的位置,例如:www.anyisalin.com. 不知道anyisalin.com.的具体位置(NS服务器的IP)
域名解析
DNS(Domain Name System)是一个全球化的分布式数据库,用于存储域名与互联网 IP 地址的映射关系。DNS 分为两大类:权威 DNS,递归 DNS。
权威 DNS
权威 DNS 是特定域名记录(例如“example.com”)在域名注册商处所设置的 DNS 服务器,用于特定域名本身的管理(增加、删除、修改等)。
权威DNS 国内典型的代表是dnspod, 主要提供域名托管以及智能解析服务。智能解析主要解决这样一个问题:假设一个域名同时绑定了联通和电信的IP,当一个电信用户去访问时有可能会解析到一个联通的IP,从而产生跨网问题。使用智能解析后,系统将根据用户来源去智能的返回结果。
权威 DNS 服务器只对自己所拥有的域名进行域名解析,对于不是自己的域名则拒绝访问。比如,向“example.com”的权威 DNS 服务器查询“test.com”的域名肯定会查询失败。(权威DNS即通俗上“这个域名我说了算”的服务器。)
- CDN DNS 本质上讲也是一种权威DNS,主要在CDN的业务场景中提供流量调度功能。用户将域名CNAME或者直接NS托管到CDN DNS,CDN DNS进一步做智能调度返回一个离用户最近的接入节点。用户访问接入节点,享受CDN提供的缓存、加速、以及防攻击服务。
递归 DNS
递归 DNS(也称本地 DNS 或者缓存 DNS)用于域名查询。递归 DNS 会迭代权威服务器返回的应答,直至最终查询到的 IP 地址,将其返回给客户端,并将请求结果缓存到本地。
对用户发出的域名解析请求,递归 DNS 必须给出一个最终的 IP 地址结果。完整的递归DNS 查询流程需要 DNS 服务器从根域名 “.” 服务器,顶级域名服务器(例如“.com”),一级域名服务器(例如“example.com”)等一级一级递归查询,直到最终找到权威服务器取得结果,并返回给客户。同时,递归服务器根据域名 TTL,缓存查询结果,便于相同域名重复查询。递归 DNS 的访问过程如下图所示(递归 DNS 在图中表示为 Local DNS):
递归 DNS 服务器大多数在运营商端,负责网络接入终端的 DNS 查询,即网络访问设备上配置的 DNS 服务器 IP。
转发DNS 转发DNS是一种特殊的递归。如果本地的缓存记录中没有相应域名结果时,其将查询请求转发给另外一台DNS服务器,由另外一台DNS服务器来完成查询请求。
公共DNS 公共DNS属于递归DNS。其典型特征为对外一个IP,为所有用户提供公共的递归查询服务。公共DNS一般以一个或两个非常容易记住的IP方式(如百度公共DNS服务IP:180.76.76.76)给所有用户提供统一服务。公共DNS相对于运营商DNS的优势主要在无劫持、更快、更稳定、更安全等。
综上,
- 权威 DNS 由域名解析服务商建设,提供域名管理服务,维护域名解析记录。
- 递归 DNS 由网络运营商建设,提供域名查询解析服务。
阿里云解析记录冲突判断规则
在 RR值相同的情况下,同一条线路下,在几种不同类型的解析中不能共存(X为不允许):
X:在相同的RR值情况下,同一条线路下,不同类型的解析记录不允许共存。如:已经设置了www.example.com的A记录,则不允许再设置www.example.com的CNAME记录;
无限制:在相同的RR值情况下,同一条线路下,不同类型的解析记录可以共存。如:已经设置了www.example.com的A记录,则还可以再设置www.example.com的MX记录;
可重复:指在同一类型下,同一条线路下,可设置相同的多条RR值。如:已经设置了www.example.com的A记录,还可以再设置www.example.com的A记录;
NS | CNAME | A | MX | TXT | AAAA | SRV | |
---|---|---|---|---|---|---|---|
NS | 可重复 | X | X | X | X | X | X |
CNAME | X | X | X | X | X | X | X |
A | X | X | 可重复 | 无限制 | 无限制 | 无限制 | 无限制 |
MX | X | X | 无限制 | 可重复 | 无限制 | 无限制 | 无限制 |
TXT | X | X | 无限制 | 无限制 | 可重复 | 无限制 | 无限制 |
AAAA | X | X | 无限制 | 无限制 | 无限制 | 可重复 | 无限制 |
SRV | X | X | 无限制 | 无限制 | 无限制 | 无限制 | 可重复 |
DNS 负载均衡
在大型的网络应用中,多台服务器经常被用做提供同一个服务,从而减轻单台服务器所承受的访问压力。这样分散每台服务器上的压力,将访问流量分配到多台服务器的方法就是负载均衡。
原理
使用云解析来实现服务器流量的负载均衡,其原理是给网站访问者分配不同的 IP 地址。
例如:有 3 台服务器,对应 3 个 IP 地址,分别是 1.1.1.1、2.2.2.2、3.3.3.3,设置的 3 个 A 记录如下:
记录 | 类型 | 主机 | 线路 | 值 | 权重 |
---|---|---|---|---|---|
1 | A | www | default | 1.1.1.1 | 600 |
2 | A | www | default | 2.2.2.2 | 600 |
3 | A | www | default | 3.3.3.3 | 600 |
当 Local DNS 访问权威 DNS,权威 DNS 会将这 3 个解析记录全部返回给 Local DNS, Local DNS 会将所有的 IP 地址返回给网站访问者,网站访问者的浏览器会随机访问其中一个 IP。
这种方法用在无 DNS 负载均衡的权威 DNS 中,能够在一定程度上减轻单台服务器的压力,但它不能区分服务器的差异,不能反映服务器的当前运行状态。
轮循负载算法
DNS 负载均衡采用简单的轮循负载算法。
在有 DNS 负载均衡的权威 DNS 中,网站访问者的请求到来时,权威 DNS 会根据解析记录的权重轮询 3 个 A 记录(默认权重 1:1:1),依次返回 3 个 IP 地址。
User1 访问,返回 1.1.1.1 User2 访问,返回 2.2.2.2 User3 访问,返回 3.3.3.3 User4 访问,返回 1.1.1.1 ……
带权重的轮询负载算法
对于权重不同的 DNS 负载均衡,如 2:1:1,则返回如下:
User1 访问,返回1.1.1.1 User2 访问,返回 2.2.2.2 User3 访问,返回 3.3.3.3 User4 访问,返回1.1.1.1 User5 访问,返回1.1.1.1 User6 访问,返回 2.2.2.2 ……
应用
如果你有多台服务器,需要将流量分摊到各个服务器,那就可以利用 DNS 来做负载均衡。云解析支持用户手动开启或者关闭 DNS 负载均衡,并且针对不同的解析记录设置不同的权重值,负载均衡的默认权重值都是 1。
规则说明
DNS 负载均衡仅适用于相同主机记录值、相同线路下的多个 A 记录。具体使用规则如下:
- 支持 A 记录带权重的轮询,不支持其它记录。
- 不支持被暂停或者锁定的 A 记录,以及泛解析的 A 记录。
- 设置权重适用于在同一线路中,有多个具有相同主机记录的 A 记录。
- 在不同的线路中,其权重相互独立;在智能解析的前提下,可对默认线路配置带权重的 A 记录,也可以对具体的线路配置。
- 负载均衡的开关,不区分解析线路。
- 默认权重值比为 1:1:1…
域名查询过程
以用户在浏览器输入www.baidu.com为例,我们详细说明一下实际域名查询过程:
用户输入www.baidu.com,浏览器调用操作系统resolver发起域名查询,此处不考虑浏览器的域名缓存;resolver封装一个dns请求报文,并将其发给运营商分配的local dns地址(或者用户自己配置的公共dns);
local dns查询缓存,如果命中则返回响应结果;否则向根服务器发起查询;
根服务器返回com地址。每一层级的DNS服务器都有缓存,实际都是先查缓存,没有缓存才返回下级域,此处不再重复;
local dns查询com。com返回baidu.com地址;
local dns查询baidu.com,baidu.com返回www.baidu.com对应记录结果。
域名查询方式
理论上讲域名查询有两种方式:
迭代查询
A问B一个问题,B不知道答案说你可以问C,然后A再去问C,C推荐D,然后A继续问D,如此迭代…
递归查询
A问B一个问题,B问C,C问D… 然后D告诉C,C告诉B,B告诉A
上述过程中从resolver到递归DNS再到根的查询过程为递归查询,递归DNS到根、到com、到baidu.com的过程为迭代查询。
注意,递归查询需要从系统层面来看,很难单纯的说一台DNS实现了递归查询。
参考文档
http://www.ruanyifeng.com/blog/2016/06/dns.html
https://zh.wikipedia.org/wiki/%E5%9F%9F%E5%90%8D%E7%B3%BB%E7%BB%9F
https://dudns.baidu.com/support/knowledge/Theory/