DNS域名解析

DNS

为啥需要DNS?
DNS服务器: 说白了, 就是一台翻译 名字到IP 的 软件。

IP: IP就是IP, 不解释。

假设某设备(充当DNS客户端)需要解析域名a.b.c.d, 于是就可以向DNS服务器发起请求, 然后然后DNS服务器将解析的IP结果w.x.y.z返回给客户端。

1. DNS 是什么?

DNS是 Domain Name System 的缩写,也就是 域名解析系统,它的作用非常简单,就是根据域名查出对应的 IP地址。

你可以把它想象成一本巨大的电话本,比如当你要访问域名www.163.com,首先要通过DNS查出它的IP地址是112.48.162.8

2. 域名的层级

由于后面我会讲到 DNS 的解析过程,因此需要你对域名的层级有一些了解

  • 根域名 :.root 或者 . ,通常是省略的
  • 顶级域名,如 .com.cn
  • 次级域名,如 baidu.com 里的 baidu,这个是用户可以进行注册购买的
  • **主机域名,比如 baike.baidu.com 里的baike,这个是用户可分配的

域名的形式

域名可以划分为各个子域,子域还可以继续划分为子域的子域,这样就形成了顶级域、二级域、三级域等。

其中顶级域名分为:国家顶级域名、通用顶级域名、反向域名。

通用顶级域名 com公司企业,edu教育机构,gov政府部门,int国际组织,mil军事部门 ,net网络,org非盈利组织...
反向域名 arpa,用于PTR查询(IP地址转换为域名
分类 作用
根域名服务器 最高层次的域名服务器,本地域名服务器解析不了的域名就会向其求助
顶级域名服务器 负责管理在该顶级域名服务器下注册的二级域名
权限域名服务器 负责一个区的域名解析工作
本地域名服务器 当一个主机发出DNS查询请求时,这个查询请求首先发给本地域名服务器

注:一个域名服务器所负责的范围,或者说有管理权限的范围,就称为 区域 (Zone)
关于分层, 需要注意的是:

每个层的域名上都有自己的域名服务器,最顶层的是根域名服务器
每一级域名服务器都知道下级域名服务器的IP地址
为了容灾, 每一级至少设置两个或以上的域名服务器
域名的层级有关要点,说明如下:

(1)"www.baidu.com" 的一个最完整的形式应该是 "www.baidu.com."。

即在每个域名后面会有一个 "." ,"." 来表示根,我们统称这种域名叫绝对域名" Fully Qualified Domain Name "(FQDN),相当于Linux 系统中的文件绝对路径。可以通过在计算机中输入 "www.baidu.com." 或 "www.dianrong.com." 来确认是否可以打开网站。

不需要输入,不代表不存在。

"." 来表示根,通常我们不需要输入这个根 ,因为计算机和浏览器默认已帮我们输入了这个"." 根。

(2)域名体系,使用 逆向树 所示,树中的每一个分支,都称为域,一个域名可以属于多个域,如域名 www.baidu.com 属于baidu.com域的一部分,同时也是 com 域的一部分。

(3)"." 是最树状结构中最顶层的域名,统称为"根",即每个域名都是由根开始索引的,所有域名都属于根。

(4)域名体系是通过倒着来叙述一个域名,如 www.baidu.com 是先写最下面的 www,在写中间的 baidu ,接着写上面的 com ,最后写 "." ,只是根可以省略

(5)顶级域名下面的分支是二级域名,即我们平时通过阿里云、腾讯云购买的域名,如 baidu.comfastcp.cndianrong.com 等。

(6)二级域名下面的分支为三级域名,有时也可称为服务器名称,如 baidu下面的 www 代表了百度的网站服务名称,music 代表了百度的音乐网站服务器名称。

(7)由根分支出的域名叫 顶域域名(一般简称为 TLD ),一般分为国家地区顶级域名和通用顶级域名。

国家顶级域名如我们了解的 cn、jp等。

通用顶级域名如我们了解的 com、org、net、edu等,其中表示工商企业的是 .com;表示网络提供商的 .net,表示非盈利组织的 .org ;表示教育的 .edu 。

通常我们只能注册二级域名,如果需要注册顶级域名,比如注册类似 .com 这样的域名,在国内需要联系 CNNIC ,由他们进行代理注册,通常价格不菲。大多数情况下,二级域名已经可以完全满足当下的业务需求。

当然三级域名下还可以在分支四级域名出来,DNS 类似于 Unix 文件系统的结构,由根节点在上的反转树表示。最多分分支 127 层,每一层可以由最多 63 个字符组成,每层中间都以 "." 进行分隔,类似 Unix 文件中以 "/" 分隔每一个目录。域名的总长度不可超过255个字符,仅可使用字符、数字和连字符,不区分大小写。

3. DNS 解析过程

咱们以访问 www.163.com 这个域名为例,来看一看当你访问 www.163.com 时,会发生哪些事:

  1. 先查找本地 DNS 缓存(自己的电脑上),有则返回,没有则进入下一步
  2. 查看本地 hosts 文件有没有相应的映射记录,有则返回,没有则进入下一步
  3. 向本地 DNS 服务器(一般都是你的网络接入服务器商提供,比如中国电信,中国移动)发送请求进行查询,本地DNS服务器收到请求后,会先查下自己的缓存记录,如果查到了直接返回就结束了,如果没有查到,本地DNS服务器就会向DNS的根域名服务器发起查询请求:请问老大, www.163.com 的ip是啥?
  4. 根域名服务器收到请求后,看到这是个 .com 的域名,就回信说:这个域名是由 .com 老弟管理的,你去问他好了,这是.com老弟的联系方式(ip1)。
  5. 本地 DNS 服务器接收到回信后,照着老大哥给的联系方式(ip1),马上给 .com 这个顶级域名服务器发起请求:请问 .com 大大,www.163.com 的ip 是啥?
  6. .com 顶级域名服务器接收到请求后,看到这是 163.com 的域名,就回信说:这个域名是 .163.com 老弟管理的,你就去问他就行了,这是他的联系方式(ip2)
  7. 本地 DNS 服务器接收到回信后,按照前辈的指引(ip2),又向 .163.com 这个权威域名服务器发起请求:请问 163.com 大大,请问 www.163.com 的ip是啥?
  8. 163.com 权威域名服务器接收到请求后,确认了是自己管理的域名,马上查了下自己的小本本,把 www.163.com 的ip告诉了 本地DNS服务器。
  9. 本地DNS服务器接收到回信后,非常地开心,这下总算拿到了www.163.com的ip了,马上把这个消息告诉了要求查询的客户(就是你的电脑)。由于这个过程比较漫长,本地DNS服务器为了节省时间,也为了尽量不去打扰各位老大哥,就把这个查询结果偷偷地记在了自己的小本本上,方便下次有人来查询时,可以快速回应。

总结起来就是三句话

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

4. DNS的缓存时间

上面的几个步骤里,可以看到有两个地方会缓存 DNS 的查询记录,有了缓存,在一定程度上会提高查询效率,但同时在准确率上会有所损失。

因此我们在配置 DNS 解析的时候,会有一个 TTL 参数(Time To Live),意思就是这个缓存可以存活多长时间,过了这个时间,本地 DNS 就会删除这条记录,删除了缓存后,你再访问,就要重新走一遍上面的流程,获取最新的地址。

常见的 DNS 记录类型如下

类型 内容
A 将 DNS 域名映射到 IPv4 地址,基本作用是说明一个域名对应了哪些 IPv4 地址
NS 权威名称服务器记录,用于说明这个区域有哪些 DNS 服务器负责解析
CNAME 别名记录,主机别名对应的规范名称
SOA 6 起始授权机构记录,NS 记录说明了有多台服务器在进行解析,但哪一个才是主服务器,NS 并没有说明,SOA 记录了说明在众多 NS 记录里哪一台才是主要的服务器
PTR IP 地址反向解析,是 A 记录的逆向记录,作用是把 IP 地址解析为域名
MX 邮件交换记录,指定负责接收和发送到域中的电子邮件的主机
TXT 文本资源记录,用来为某个主机名或域名设置的说明
AAAA 将 DNS 域名映射到 IPv6 地址,基本作用是说明一个域名对应了哪些 IPv6 地址

域名解析中,A记录、CNAME、MX记录、NS记录的区别和联系?

联系:
都是区域(Zone)数据库文件都是由资源记录。

A记录: 又称IP指向

用户可以在此设置子域名并指向到自己的目标主机地址上,从而实现通过域名找到服务器。

说明:指向的目标主机地址类型只能使用IP地址;
附加说明:

泛域名解析即将该域名所有未指定的子域名都指向一个空间。在"主机名"中填入,"类型"为A,"IP地址/主机名"中填入web服务器的IP地址,点击"新增"按钮即可。 *
负载均衡的实现:负载均衡(Server Load Balancing,SLB)是指在一系列资源上面动态地分布网络负载。负载均衡可以减少网络拥塞,提高整体网络性能,提高自愈性, 并确保企业关键性应用的可用性。
当相同子域名有多个目标地址时,表示轮循,可以达到负载均衡的目的,但需要虚拟主机服务商支持。

CNAME : 通常称别名指向。

您可以为一个主机设置别名。
比如设置 test.mydomain.com用来指向一个主机www.rddns.com ,那么以后就可以用test.mydomain.com来代替访问www.rddns.com了。

说明:·

CNAME的目标主机地址只能使用主机名,不能使用IP地址;
主机名前不能有任何其他前缀,如:http://等是不被允许的
A记录优先于CNAME记录。即如果一个主机地址同时存在A记录和CNAME记录,则CNAME记录不生效。

MX记录 : 邮件交换记录。

用于将以该域名为结尾的电子邮件指向对应的邮件服务器以进行处理。如:用户所用的邮件是以域名mydomain.com为结尾的,则需要在管理界面中添加该域名的MX记录来处理所有以@mydomain.com结尾的邮件。

说明:

MX记录可以使用主机名或IP地址;
MX记录可以通过设置优先级实现主辅服务器设置,"优先级"中的数字越小表示级别越高。
也可以使用相同优先级达到负载均衡的目的;
如果在"主机名"中填入子域名则此MX记录只对该子域名生效

6. DNS 报文结构

  • 事务 ID:DNS 报文的 ID 标识。对于请求报文和其对应的应答报文,该字段的值是相同的。通过它可以区分 DNS 应答报文是对哪个请求进行响应的。
  • 标志:DNS 报文中的标志字段。
  • 问题计数:DNS 查询请求的数目。
  • 回答资源记录数:DNS 响应的数目。
  • 权威名称服务器计数:权威名称服务器的数目。
  • 附加资源记录数:额外的记录数目(权威名称服务器对应 IP 地址的数目)。

总体的三大步骤:

step1:缓存查找IP

第一步:检查浏览器缓存中是否缓存过该域名对应的IP地址

用户通过浏览器浏览过某网站之后,浏览器就会自动缓存该网站域名对应的IP地址,当用户再次访问的时候,浏览器就会从缓存中查找该域名对应的IP地址.

但是,浏览器的本地缓存,不仅是有大小限制,而且还有时间限制(域名被缓存的时间通过TTL属性来设置),所以存在域名对应的IP找不到的情况。

当浏览器从缓存中找到了该网站域名对应的IP地址,将进行下一步骤。

对于IP的缓存时间问题,不宜设置太长的缓存时间,时间太长,如果域名对应的IP发生变化,那么用户将在一段时间内无法正常访问到网站,如果太短,那么又造成频繁解析域名。

step2:本机的hosts文件查找IP

第二步:如果在浏览器缓存中没有找到IP,那么找本机的hosts文件中是否存在IP配置

如果第一个步骤没有完成对域名的解析过程,那么浏览器会去系统hosts文件中,查找系统是否配置过这个域名对应的IP地址,可以理解为系统也具备域名配置的基本能力。

在Windows系统中,hosts文件位置在C:\Windows\System32\drivers\etc\hosts。

在Linux或者Mac系统中,hosts文件在/etc/hosts 文件中。

对于开发者来说,通过hosts绑定域名和IP,可以轻松切换环境,可以从测试环境切换到开发环境,方便开发和测试。

step3:DNS服务器查找IP

第三步:向本地域名解析服务系统发起域名解析的请求

如果在本地无法完成域名的解析,那么系统只能请求域名解析服务系统进行解析,本地域名系统LDNS一般都是本地区的域名服务器。local dns (local name server)是客户端网络设置的一部分,要么是手工配置,要么从DHCP得到。一般local dns 在从网络上靠近客户端。

比如你连接的校园网,那么域名解析系统就在你的校园机房里;

如果你连接的是电信、移动或者联通的网络,那么本地域名解析服务器就在本地区,由各自的运营商来提供服务。

对于本地DNS服务器地址,Windows系统使用命令ipconfig就可以查看,在Linux和Mac系统下,直接使用命令cat /etc/resolv.conf来查看LDNS服务地址。

LDNS一般都缓存了大部分的域名解析的结果,当然缓存时间也受域名失效时间控制,大部分的解析工作到这里就差不多已经结束了,LDNS负责了大部分的解析工作。

DNS解析的总体过程

DNS总体过程总结起来就是三句话
  1. 从"根域名服务器"查到"一级域名服务器"的NS记录和A记录(IP地址)
  2. 从"一级域名服务器"查到"二级域名服务器"的NS记录和A记录(IP地址)
  3. 从"二级域名服务器"查出"主机名"的IP地址

DNS 查询类型

从客户端出发,完整的DNS 查找过程中,会出现三种类型的查询。

通过组合使用这些查询,优化的 DNS 解析过程可缩短传输距离。

递归查询

本机向本地域名服务器发出一次查询请求,就静待最终的结果。如果本地域名服务器无法解析,自己会以DNS客户机的身份向其它域名服务器查询,直到得到最终的IP地址告诉本机。

迭代查询

本地域名服务器向根域名服务器查询,根域名服务器告诉它下一步到哪里去查询,然后它再去查,每次它都是以客户机的身份去各个服务器查询。

迭代查询一般发生在 DNS Server 之间,当 Client 发出域名解析的请求后,DNS Server 需要给予最佳答案,这个最佳答案可能是"距离最近"的顶级域名服务器,也能是权威域名服务器。无论如何,Client 需要对返回结果再次发起请求,知道获得最终结果

非递归查询
可以理解为缓存查找或者一次搞定的查找。

非递归查询发生在 Client 和 DNS Server 之间,指的是,请求的 DNS Server 已经知道答案,直接返回。这里可能有两种情况,一种是 DNS Server 本机缓存了对应的 IP,或者是缓存了对应的域名的权威服务器。第二种情况只需要再发一次请求,即可拿到结果返回

当 DNS 解析器客户端查询 DNS 服务器以获取其有权访问的记录时通常会进行此查询,因为其对该记录具有权威性,或者该记录存在于其缓存内。

DNS 服务器通常会缓存 DNS 记录,查询到来后能够直接返回缓存结果,以防止更多带宽消耗和上游服务器上的负载。

从递归和迭代查询可以看出:

客户端-本地dns服务端:

这部分属于递归查询。递归查询时,返回的结果只有两种:查询成功或查询失败.

本地dns服务端---外网:

这部分属于迭代查询。迭代查询,又称作重指引,返回的是最佳的查询点或者主机地址.

相关推荐
Dynadot_tech8 分钟前
使用API有效率地管理Dynadot域名,列表形式查看账户whois联系人信息
网络·api·域名注册·dynadot
网安-轩逸1 小时前
【网络安全】身份认证
网络·安全·web安全
石牌桥网管1 小时前
OpenWrt广播DNS到客户端
网络·openwrt
想成为高手4991 小时前
网络基础概念与应用:深入理解计算机网络
网络·计算机网络
专注VB编程开发20年2 小时前
WebSocket和HTTP协议的性能比较与选择
websocket·网络协议·http
Aiden_SHU2 小时前
Wireshark中的length栏位
服务器·网络·wireshark
叫我龙翔3 小时前
【计网】实现reactor反应堆模型 --- 多线程方案优化 ,OTOL方案
linux·运维·网络
群联云防护小杜4 小时前
服务器被挂马怎么办?——解决服务器被挂马的方法和步骤
运维·服务器·网络协议·tcp/ip·安全·ddos
?crying4 小时前
蓝队基础4 -- 安全运营与监控
网络·安全·web安全
ascarl20104 小时前
生成自签名证书并配置 HTTPS 使用自签名证书
网络协议·http·https