DNS完整解析流程

您所在的位置:网站首页 查看dns域名 DNS完整解析流程

DNS完整解析流程

2023-09-09 06:52| 来源: 网络整理| 查看: 265

一、DNS介绍

  域名(Domain Name)是一个标记主机或主机组的名称,相当于IP地址的别名。

  域名系统(Domain Name Server)是将域名解析成IP地址的互联网基础服务,提供该服务的服务器成为域名解析服务器。

二、域名结构

域名系统是一个分布式系统,Internat采用树状结构命名,结构如下图所示: 在这里插入图片描述

三、DNS解析过程

在这里插入图片描述

1、DNS域名解析服务器分类

本地域名服务器(Local DNS)

如果通过DHCP配置,Local DNS由ISP提供

根域名服务器(Root DNS)

当Local DNS解析不到时,第一步向Root DNS查询,并获得顶级域名服务器的IP地址。Root DNS本身并不直接用于域名解析,仅用于返回可供查询的顶级域名服务器IP地址。

顶级域名服务器(Top Level DNS)

负责管理在该顶级域名服务器下注册的二级域名

权威域名服务器(Authoritative DNS)

在特定区域内具有唯一性,负责维护该区域内的域名和IP地址映射关系,在DNS应答报文中,标识为AA标识本次DNS记录是否来自于权威域名服务器,否则可能来自于缓存。

2、DNS域名解析中添加的各项解析记录

​ DNS服务器会把一个域名解析到一个IP地址,然后在此IP地址的主机上将一个子目录与域名绑定。域名解析时会添加解析记录,包括:A记录、AAAA记录、CNAME记录、MX记录、NS记录、TXT记录、SRV记录、URL转发。

A记录:将域名指向一个IPv4地址,需要增加A记录CNAME记录:如果将一个域名指向一个域名,实现与被指向域名相同的访问效果,需要增加CNAME记录。这个域名一般是主机服务提供商提供的一个域名。MX记录:建立电子邮箱服务,将指向电子邮箱服务器地址,需要设置MX记录。建立邮箱时,一般会根据邮箱服务商提供的MX记录填写改记录。NS记录:域名解析服务器记录,如果要将子域名指定某个域名服务器来解析,需要设置NS记录。AAAA记录:将主机名或域名指向一个IPv6地址,需要添加AAAA记录SRV记录:添加服务器记录服务器服务器记录时会添加此项,SRV记录了那台计算机提供了那哪个服务,格式为:服务的名字.协议的类型SOA记录:SOA叫做起始授权机构记录,NS用于标识多台域名解析服务器,SOA记录用于在众多NS记录中那一台是主服务器DS记录:委托签发者,此记录用于鉴定DNSSEC已授权区域的签名密钥RRSIG记录:DNSSEC 证书,DNSSEC 安全记录集证书,与 SIG 记录使用相同的格式PTR记录:PTR记录是A记录的逆向记录,又称做IP反查记录或指针记录,负责将IP反向解析为域名现实URL转发记录:将域名指向一个http(s)协议地址,访问域名时,直接跳转至目标地址。隐士URL转发记录:将域名指向一个http(s)协议地址,访问域名时,直接跳转至目标地址,隐性转发会隐藏真实的目标地址(浏览器显示源域名)。

​ A记录是把域名解析到IP地址,二CNAME是把域名解析到另一个域名,而这个域名最终会指向一个A记录,在实现功能上A记录和CNAME没有区别。

​ CNAME记录在做IP变更时要比A记录方便。CNAME允许将多个域名映射到一台机器,当有多个域名需要指向同一服务器IP,此时可以将一个域名做A记录指向服务器IP,然后将其他的域名做别名(即:CNAME)到A记录的域名上。当服务器IP地址变更时,只需要更改A记录的那个域名到新IP上,其它做别名的域名会自动更改到新的IP地址上,而不必对每个域名做更改。

3、DNS解析流程

查询本地hosts文件映射

手动设置IP与域名的映射关系,保存在hosts文件中

windows:C:\Windows\System32\drivers\etc\hostslinux:/etc/hosts

查询浏览器或本地DNS缓存

浏览器或本机都会对DNS进行缓存

委托LSP-DNS查询(递归查询)

本机向LDNS查询一般都是采用递归查询:如果本机所询问的本地域名服务器不知道查询的IP地址,那么本地域名服务器就以DNS客户的身份,想其他根域名服务器继续发出查询请求报文,而不是让该主机自己进行下一步查询。因此递归查询的结果或者是所要查询的IP,或者报错。

LSP-DNS做迭代查询

本地域名服务器向根域名服务器查询通常采用迭代查询:当跟服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出查询对应的IP地址,要么告诉本地域名服务器下一步应该向哪个域名服务器查询。

然后本地域名服务器进行后续查询,根域名服务器通常把自己知道的顶级域名服务器告诉本地域名服务器,本地域名服务器再去顶级域名服务器查询。

LSP-DNS将查询结果返回到本机

4、DNS解析步骤

在这里插入图片描述

首先检查DNS缓存,如果缓存过期或未命中,客户端需要向Local DNS发起查询请求报文客户端向 Local DNS 发送查询报文 query www.baidu.com,Local DNS 首先检查自身缓存,如果存在记录则直接返回结果,查询结束;如果缓存老化或未命中,则下一步Local DNS 向根域名服务器发送查询报文 query www.baidu.com,返回 .com 顶级域名服务器的地址Local DNS 向 .com 顶级域名服务器发送查询报文 query www.baidu.com,返回baidu.com所在的权威域名服务器的地址Local DNS 向 baidu.com 权威域名服务器发送查询报文 query www.baidu.com,得到 IP地址,存入自身缓存并返回给客户端 5、实时跟踪解析过程 查询域名对应的IP地址 Nikolai:~ cow$ nslookup www.baidu.com Server: 114.114.114.114 //本地设置的Local DNS服务器 Address: 114.114.114.114#53 //本地设置的Local DNS服务器 Non-authoritative answer: // 非权威解答,即从上连DNS服务器的本地缓存中读取出的值,而非实际去查询到的值 www.baidu.com canonical name = www.a.shifen.com. #canonical name为CNAME Name: www.a.shifen.com Address: 36.152.44.96 Name: www.a.shifen.com Address: 36.152.44.95 追踪解析过程 Nikolai:~ cow$ dig +trace www.baidu.com # 第一步:请求 . 的IP,向Local DNS获取Root-DNS的13个NS的IP和名称[a-m].root-servers.net ; DiG 9.10.6 +trace www.baidu.com ;; global options: +cmd . 1308 IN NS k.root-servers.net. . 1308 IN NS c.root-servers.net. . 1308 IN NS g.root-servers.net. . 1308 IN NS b.root-servers.net. . 1308 IN NS a.root-servers.net. . 1308 IN NS f.root-servers.net. . 1308 IN NS l.root-servers.net. . 1308 IN NS h.root-servers.net. . 1308 IN NS m.root-servers.net. . 1308 IN NS e.root-servers.net. . 1308 IN NS i.root-servers.net. . 1308 IN NS d.root-servers.net. . 1308 IN NS j.root-servers.net. ;; Received 239 bytes from 114.114.114.114#53(114.114.114.114) in 43 ms #Local DNS返回 # 第二步:向某一台Root-DNS(h.root-servers.net)发送www.baidu.com域名解析请求,返回顶级域名.com的NS:IP(未显示)和名称 com. 172800 IN NS a.gtld-servers.net. com. 172800 IN NS b.gtld-servers.net. com. 172800 IN NS c.gtld-servers.net. com. 172800 IN NS d.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 h.gtld-servers.net. com. 172800 IN NS i.gtld-servers.net. com. 172800 IN NS j.gtld-servers.net. com. 172800 IN NS k.gtld-servers.net. com. 172800 IN NS l.gtld-servers.net. com. 172800 IN NS m.gtld-servers.net. com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766 com. 86400 IN RRSIG DS 8 1 86400 20210407050000 20210325040000 42351 . da9V1INes+/W51QLFwPi2KH4XxaNMsPxAJyDz1OucQPGYvqrtZOIg+/U se7ZNL44AzRNOWayiGQa2WENkdhHP//RfmORPtU0lJ5xL61Fk5J4Ufqg qLxm0ff1vq9IvJHDhDRpQc9Z8HHMexs9OgGnNUvw4ZIqZmh4J1ybkYFV gAK7H/WeBuIRvxrsoAvBaG21QARgYwnsML1JE5nlU0qaQYKXBA0pU8di LvfbM5XWPdZ1+mXvM0cI/5GY0lljsDE0IcrGQqV0kx+kb/COh0D2zQ4e IYJn2iwfqMcFqr0y9tdGR/LCX2Xn2I398fzkBo7EEg/RclMVldwOuyPT C4g8jg== ;; Received 1173 bytes from 198.97.190.53#53(h.root-servers.net) in 248 ms # 第三步:想某一台顶级域名服务器(e.gtld-servers.net)发送www.baidu.com域名解析请求,返回baidu.com的NS(IP和名称),这里可以看到有5台服务器 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 ns1.baidu.com. baidu.com. 172800 IN NS ns7.baidu.com. CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q1GIN43N1ARRC9OSM6QPQR81H5M9A NS SOA RRSIG DNSKEY NSEC3PARAM CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20210329044039 20210322033039 58540 com. u/fG/22hCyr5d7plovuOVw4cBVYARC3TpYD+/BFVwV/G9t3LsW2mCEza 2gNH2YWAPeaA5wA1K9Ma8C5SYDEvAm/G3EB7zwVjYFGJK2JshioJjK6Z OyryobM7iVOzOQdj1jljwoGkP9h0XD76dGedJ2+XTuYmmBunq2TbTsEp yK4YWPyxXit+kcwqslrTY6aZUeUaG8fL2FNdF++pOJwUWQ== HPVUSBDNI26UDNIV6R0SV14GC3KGR4JP.com. 86400 IN NSEC3 1 1 0 - HPVVN3Q5E5GOQP2QFE2LEM4SVB9C0SJ6 NS DS RRSIG HPVUSBDNI26UDNIV6R0SV14GC3KGR4JP.com. 86400 IN RRSIG NSEC3 8 2 86400 20210329061254 20210322050254 58540 com. DOFFQBEbHI3eie9mCVlBPLgouYOOy/U3Z6sPH/9WxtcuXXVxo0VgY0qC tA3Bnn+5VXb++NKcTl3NMbDRYL9nA1xWFEK/DFl18NIATp4t99FxJ7m2 CevCNOse6Znj+BwY4poNesVvLfA+njx0l8nI79tUPnYRde8E/Zjx0GaN UrK1mAISiqivR/m5+sN26+KFJkA3llX7WdnmwPjegxf+Zg== ;; Received 761 bytes from 192.12.94.30#53(e.gtld-servers.net) in 300 ms # 第四步:向其中一台百度权威域名服务器(ns2.baidu.com)发送www.baidu.com域名解析请求,返回a.shifen.com.和CNAME www.a.shifen.com.、IP和名称 www.baidu.com. 1200 IN CNAME www.a.shifen.com. a.shifen.com. 1200 IN NS ns4.a.shifen.com. a.shifen.com. 1200 IN NS ns3.a.shifen.com. a.shifen.com. 1200 IN NS ns2.a.shifen.com. a.shifen.com. 1200 IN NS ns1.a.shifen.com. a.shifen.com. 1200 IN NS ns5.a.shifen.com. ;; Received 239 bytes from 220.181.33.31#53(ns2.baidu.com) in 40 ms

​ 事实上,返回CNAME的同一个包中,也返回了www.a.shifen.com. 对应的NS列表,之后www.a.shifen.com.的解析流程没有跟踪到。 在这里插入图片描述

本机向Local DNS请求查询www.baidu.comLocal DNS向根域名服务器Root-DNS请求查询www.baidu.com,根域名服务器返回com.域的顶级域名服务器GTLS-DNS向com.域GTLS-DNS请求查询,com. 域返回baidu.com域的服务器IP名称列表(通过NS的方式)向baidu的权威域名解析服务器请求查询www.baidu.com,返回A记录a.shifen.com和CNAMEwww.a.shifen.com向Root-DNS请求www.a.shifen.com向com.域GTLS-DNS请求查询www.a.shifen.com向shifen.com域DNS查询向a.shifen.com域查询拿到www.a.shifen.com的A记录Local DNS返回www.baidu.com的CNAMEwww.a.shifen.com以及www.a.shifen.com的IP 6、DNS缓存

​ 一次完整的 DNS 查询过程需要访问多台 DNS 服务器才能得到最终的结果,这肯定会带来一定的时延。为了改善时延,DNS 服务并不是每次请求都要去访问 DNS 服务器,而是访问过一次后将 DNS 记录缓存在本地。具体来说,DNS 服务是一个多级的缓存:

​ 浏览器缓存 -> 操作系统缓存 -> 路由器缓存 -> Local DNS 缓存 -> DNS 查询

​ 缓存并不是永久有效的,前面提到过 DNS 应答报文中的 TTL(Time to Live)值,它决定了 DNS 记录在缓存中的有效时间。需要注意的是,TTL 只是一个参考值,实际使用的缓存有效时间不一定等于该值,甚至是固定值。

四、DNS存在的问题 1、DNS查询时延

​ 一次完整的 DNS 查询过程需要访问多台 DNS 服务器才能得到最终的结果,这肯定会带来一定的时延。从实践来看,这个时间还不容小觑。

2、缓存一致性

​ DNS 缓存的存在虽然减少了时延,却是以牺牲一致性(consistency)为代价的。具体来说:Local DNS 是分地区、分运营商的,在域名解析缓存的处理上,实现策略就不统一了。有时候 Local DNS 的解析结果可能不是最近、最优的节点,有的时候并不会遵从 TTL 的限制,而是设置一个固定时间。这就会导致域名指向新的 IP 地址后,一些客户端依然访问了缓存中 旧的 IP 地址。

3、DNS劫持

​ 由于 DNS 缺乏加密、认证、完整性保护的安全机制,容易引发网络完全问题。最常见的域名劫持攻击是针对 DNS 报文首部的事务 ID进行欺骗,由于事务 ID 在查询报文和应答报文中是匹配的,因此伪装 DNS 服务器可以提前将事务 ID 相同的伪造报文发送到客户端,以实现域名劫持(前提是合法的报文还未到达),把目标网站域名解析到错误的 IP 地址。

4、调度不精确

​ 由于存在缓存、转发、NAT 等问题,权威的 DNS 服务器可能会误判客户端所在的位置和运营商,从而导致解析出跨运营商访问的 IP 地址,用户的访问速度降低。

在这里插入图片描述 在这里插入图片描述 公众号:编程之蝉 专注后台开发、CDN、算法、大数据,欢迎关注,阅读最新更新 公众号:编程之蝉

五、参考

DNS域名解析中各项记录的作用

计算机网络 | 图解 DNS & HTTPDNS 原理

DNS解析和CDN加速



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3