另一方面,DNS介绍域名(Domain Name )是标记主机或主机组的名称,相当于IP地址的别名。
域名系统(域名服务器)是将域名解析为IP地址的基于互联网的服务,提供该服务的服务器成为域名解析服务器。
二、域名结构域名系统为分布式系统,互联网以树形结构命名,结构如下图:
三. DNS分析流程
1、DNS名称解析服务器分类本地域名服务器(Local DNS ) )。
在DHCP上配置时,本地DNS由ISP提供
根域名服务器(Root DNS ) ) ) )。
如果无法解析Local DNS,则第一步是联系Root DNS以获取顶级域名服务的IP地址。 Root DNS本身并不直接用于域名解析,而是仅用于返回可查询的顶级域名服务IP地址。
顶级域名服务器(顶级域名服务器)。
负责管理在此顶级域名服务器上注册的辅助域名
授权域名服务器(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记录。 AAA记录指定主机名或域名为IPv6地址。 必须添加AAAA记录SRV记录。 服务器记录在添加服务器记录时添加。 SRV记录记录该计算机提供哪些服务。 格式是服务的名称。 协议类型SOA记录: SOA称为初始证书颁发机构记录,NS用于标识多个域名服务器。 当许多NS记录中的一个是主服务器DS记录时,将使用SOA记录。 委托发行人。 此记录使用与DNSSEC证书、DNSSEC安全记录集证书和SIG记录格式相同的PTR记录,DNSSEC授权区域的签名密钥RRSIG记录。 PTR记录是a记录的反向记录,也称为IP反向记录或指针记录,负责反向解析IP的dlddsURL传输记录:在http(s )协议地址中指定域名,访问域名在隐藏传输中,将隐藏实际的目标地址。 浏览器显示源域名。 a记录将域名解析为IP地址,二CNAME将域名解析为另一个域名。 这个域名最终指向一个a记录。 在实现功能方面,a记录与CNAME没有区别。
更改IP时,CNAME记录比a记录更有用。 CNAME允许将多个域名映射到一台计算机。 如果多个域名必须指向相同的服务器IP,则可以将一个域名指向服务器IP作为a记录,并将其他域名映射到别名(即a记录的域名)。 如果服务器的IP地址发生更改,则只要将a记录的域名更改为新IP,其他作为别名的域名就会自动更改为新IP地址。 不需要更改每个域名。
3、DNS解析流程查询本地主机文件映射
手动设置IP与域名的映射关系,并将其保存到hosts文件中
windows : c :windowssystem32driversetchosts Linux :/etc/hosts查询浏览器或本地DNS缓存
浏览器或本机缓存DNS
委托LSP-DNS查询(递归查询)
本地LDNS查询通常采用递归查询。 如果本地域名服务器不知道查询的IP地址,则作为DNS客户机,本地域名服务器希望继续向其他根域名服务器发送查询请求消息,而不是让主机自己进行下一次查询因此,递归查询的结果可以是要查询的IP,也可以报告错误。
基于LSP-DNS的迭代查询
本地域名服务器查询根域名服务器时,通常使用迭代查询。 当收到来自服务器和本地域名服务器的迭代查询请求消息时,告诉本地域名服务器该提供与查询对应的IP地址,然后联系哪个域名服务器。
然后,本地域名称服务器进行后续查询,根域名服务器通常将自己知道的顶级域名服务器告诉本地域名称服务器,而本域名服务器是顶级域名服务器
LSP-DNS本地返回查询结果
4、DNS分析步骤
首先检查DNS缓存。 如果缓存过期或未命中,客户端必须向Local DNS启动查询请求消息客户端,并将查询消息query www.baidu.com发送到Local DNS。 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.comServer:114.114.114.114//本地设置的Local DNS服务器Address:114.114.114.114#53//本地设置的Local DNS服务器Non-authoritative answer:// 非权威解答,即从上连DNS服务器的本地缓存中读取出的值,而非实际去查询到的值www.baidu.comcanonical name = mndym. #canonical name为CNAMEName:mndymAddress: 36.152.44.96Name:mndymAddress: 36.152.44.95 追踪解析过程 Nikolai:~ cow$ dig +trace www.baidu.com# 第一步:请求 . 的IP,向Local DNS获取Root-DNS的13个NS的IP和名称[dmdbks].root-servers.net; <<>> DiG 9.10.6 <<>> +trace www.baidu.com;; global options: +cmd.1308INNSk.root-servers.net..1308INNSc.root-servers.net..1308INNSg.root-servers.net..1308INNSb.root-servers.net..1308INNSa.root-servers.net..1308INNSf.root-servers.net..1308INNSl.root-servers.net..1308INNSh.root-servers.net..1308INNSm.root-servers.net..1308INNSe.root-servers.net..1308INNSi.root-servers.net..1308INNSd.root-servers.net..1308INNSj.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.172800INNSa.gtld-servers.net.com.172800INNSb.gtld-servers.net.com.172800INNSc.gtld-servers.net.com.172800INNSd.gtld-servers.net.com.172800INNSe.gtld-servers.net.com.172800INNSf.gtld-servers.net.com.172800INNSg.gtld-servers.net.com.172800INNSh.gtld-servers.net.com.172800INNSi.gtld-servers.net.com.172800INNSj.gtld-servers.net.com.172800INNSk.gtld-servers.net.com.172800INNSl.gtld-servers.net.com.172800INNSm.gtld-servers.net.com.86400INDS30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766com.86400INRRSIGDS 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.172800INNSns2.baidu.com.baidu.com.172800INNSns3.baidu.com.baidu.com.172800INNSns4.baidu.com.baidu.com.172800INNSns1.baidu.com.baidu.com.172800INNSns7.baidu.com.CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q1GIN43N1ARRC9OSM6QPQR81H5M9A NS SOA RRSIG DNSKEY NSEC3PARAMCK0POJMG874LJREF7EFN8430QVIT8BSM.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 RRSIGHPVUSBDNI26UDNIV6R0SV14GC3KGR4JP.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.和顺心的哈密瓜,数据线、IP和名称火星上的水池; Received 239 bytes from 220.181.33.31#53(ns2.baidu.com) in 40 ms 事实上,返回CNAME的同一个包中,也返回了mndym. 对应的NS列表,之后mndym.的解析流程没有跟踪到。
一次完整的 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加速