DNS
为什么我们需要 DNS?
DNS服务器:简单来说就是将名称转换为IP的软件。
IP:IP就是IP,无需解释。
假设有一台设备(作为DNS客户端)需要解析域名abcd,那么它可以向DNS服务器发起请求,然后DNS服务器将解析后的IP结果wxyz返回给客户端。
1.什么是DNS?
DNS是Name的缩写,即域名解析系统,它的作用很简单,就是根据域名找到对应的IP地址。
你可以把它想象成一本巨型电话簿,比如你想访问一个域名,首先需要通过DNS找到它的IP地址,也就是112.48.162.8。
2. 域名层级
由于后面会讲到DNS解析过程,所以需要大家对域名层次有一定的了解。
域名格式
一个域名可以划分为多个子域名,子域名又可以进一步划分为子域名的子域名,从而形成顶级域名、二级域名、三级域名等。
顶级域名分为:国家顶级域名、通用顶级域名、反向域名。
通用顶级域名,edu教育机构,int国际组织,net网络,org非营利组织...
反向域名
arpa,用于PTR查询(IP地址转换为域名
分类
根 DNS 服务器
最高级别的域名服务器,当域名无法解析时会向本地域名服务器寻求帮助
顶级域名服务器
负责管理顶级域名服务器下注册的二级域名
权威域名服务器
负责某区的域名解析
本地域名服务器
当主机发送DNS查询请求时,该查询请求首先被发送到本地域名服务器。
注:域名服务器的范围,或者说管理权限的范围,称为区域(Zone)。
关于分层,需要注意的是:
域名每一层都有自己的域名服务器,最上层是根域名服务器
每一级域名服务器都知道下级域名服务器的IP地址
为了保证灾难恢复,每级至少设置两个或两个以上的域名服务器
关于域名层次结构的要点如下:
(1)“ ”的最完整形式应为“ ”。
也就是每个域名后面都会有一个“.”,“.”代表根。我们把这个域名称为绝对域名“Fully Name”(FQDN),相当于Linux系统中的绝对文件路径。你可以在电脑中输入“ ”或者“ ”来确认是否可以打开网站。
不需要输入并不代表它不存在。
“.”用来表示词根,通常我们不需要输入这个词根,因为电脑和浏览器已经默认帮我们输入了这个“.”词根。
(2)域名系统用一棵逆树来表示,树中的每个分支称为一个域,一个域名可以属于多个域,例如一个域名既属于 域的一部分,又属于 com 域的一部分。
(3)“ .”为树形结构中的顶级域名,统称为“根”。即每个域名都是从根开始索引的,所有域名都属于根。
(4)域名体系是按照倒序来描述一个域名的,比如先写最下方的www,再写中间的baidu,再写最上方的com,最后写“。”,只有词根可以省略。
(5)顶级域名下面分支为二级域名,也就是我们通常通过阿里云、腾讯云购买的域名,比如、、等等。
(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解析过程
我们以访问该域名为例,看看访问时会发生什么情况:
首先搜索本地DNS缓存(在自己的电脑上),如果找到则返回,如果没有则继续下一步。查看本地hosts文件中是否有对应的映射记录,如果找到则返回,如果没有则继续下一步。向本地DNS服务器(一般是你的网络接入服务器提供商提供的,比如电信,移动)发送请求进行查询。本地DNS服务器收到请求后会先查看自己的缓存记录,如果找到则直接返回,如果没有找到则本地DNS服务器会向DNS的根域名服务器发起查询请求:请问的IP地址是多少?根域名服务器收到请求后看到这是一个.com域名,就回复:这个域名是.com哥在管理的,你可以问问他。这是.com哥的联系方式(ip1)。本地DNS服务器收到回复之后,立刻根据大佬给出的联系方式(ip1)向.com的顶级域名服务器发起请求:请问.com大佬,的IP地址是多少? .com顶级域名服务器收到请求之后,看到这是的域名,便回复道:这个域名是 .com 大佬管理的,你问他就可以了,这是他的联系方式(ip2) 本地DNS服务器收到回复之后,按照前辈(ip2)的指引,再次向 .com 的权威域名服务器发起请求:请问 .com 的IP地址是多少? 权威域名服务器收到请求之后,确认是自己管理的域名,立刻查了一下自己的记事本,把 .com 的IP地址告诉了本地DNS服务器。 本地DNS服务器收到回复之后,非常开心,终于得到了 .com 的IP地址,它立刻告诉了请求查询的客户端是谁(也就是你的电脑)。由于这个过程比较长,为了节省时间,尽量不打扰大佬们,本地DNS服务器偷偷把查询结果记录在自己的笔记本里,以便下次有人来查询时能快速响应。总结起来就是三句话:从“根域名服务器”找到“顶级域名服务器”的NS记录和A记录(IP地址)从“顶级域名服务器”找到“次级域名服务器”的NS记录和A记录(IP地址)从“次级域名服务器”找到“主机名”的IP地址4.DNS缓存时间
在上面的步骤中,可以看到有两个地方会缓存DNS查询记录,有了缓存之后,查询效率会有一定的提升,但是同时也会有准确率的损失。
因此我们在配置DNS解析的时候,会有一个TTL参数(Time To Live),也就是缓存可以存活多久,超过这个时间本地DNS就会删除该记录,删除缓存之后如果再次访问,就要重新经过上面的流程才能获取到最新的地址。
常见的DNS记录类型如下
类型 内容
将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记录有什么区别和联系?
连接:
所有区域数据库文件均由资源记录组成。
A记录:又称IP指向
用户可以在这里设立一个子域名,并将其指向自己的目标主机地址,从而通过域名找到服务器。
注意:目标主机地址类型只能使用IP地址;
补充说明:
通配符域名解析会将域名下所有未指定的子域名都指向一个空格,填写“主机名”,“类型”为A,在“IP地址/主机名”中填写Web服务器的IP地址,点击“添加”按钮即可。*
负载均衡的实现:负载均衡(SLB)是指在一系列资源之间动态分配网络负载。负载均衡可以减少网络拥塞,提高整体网络性能,提高自愈能力,并确保关键企业应用程序的可用性。
当同一个子域名有多个目标地址时,就意味着循环调度,可以达到负载均衡的目的,但是需要虚拟主机服务商的支持。
CNAME:通常称为别名指向。
您可以为主机设置别名。
例如,如果你将其设置为指向某个主机,则可以稍后使用它来访问该主机。
阐明:·
CNAME的目标主机地址只能使用主机名,不能使用IP地址;
主机名不能有其他前缀,如:等都是不允许的;
A记录优先于CNAME记录,即如果一个主机地址同时存在A记录和CNAME记录,则CNAME记录不会生效。
MX记录:邮件交换记录。
用于将以域名结尾的邮件导向相应的邮件服务器进行处理,例如用户使用的邮件是以域名结尾的,则需要在管理界面添加该域名的MX记录,才能处理所有以@结尾的邮件。
阐明:
MX记录可以使用主机名或IP地址;
MX记录可以通过设置优先级来设置为主服务器和辅服务器,“优先级”中的数字越小,级别越高。
也可以使用相同优先级来实现负载均衡;
如果您在“主机名”中输入了子域名,则该MX记录只对该子域名有效。
6.DNS消息结构
总体分为三步:第一步:缓存搜索IP
步骤1:检查域名对应的IP地址是否缓存在浏览器缓存中
用户通过浏览器浏览某个网站后,浏览器会自动缓存该网站域名对应的IP地址,当用户再次访问时,浏览器会从缓存中查找该域名对应的IP地址。
但是浏览器的本地缓存不仅有大小限制,还有时间限制(域名被缓存的时间由TTL属性设置),所以存在找不到域名对应IP的情况。
当浏览器从缓存中找到该网站域名对应的IP地址时,就会进行下一步操作。
关于IP缓存时间问题,不建议设置过长的缓存时间,时间过长如果域名对应的IP发生变化,会导致用户一段时间内无法正常访问网站,时间过短又会造成域名频繁解析。
第二步:在本机的hosts文件中找到IP
第二步:如果在浏览器缓存中没有找到该IP,则查找本机hosts文件中是否存在该IP配置。
如果第一步没有完成域名解析过程,浏览器就会去系统hosts文件中查找系统是否配置了这个域名对应的IP地址。这就意味着系统也具备了配置域名的基本能力。
在系统中,hosts文件位于C:\\\\etc\hosts。
在 Linux 或 Mac 系统上,hosts 文件位于 /etc/hosts 文件中。
对于开发者来说,通过将域名和IP地址与主机绑定,可以轻松切换环境,从测试环境切换到开发环境,让开发测试更加便捷。
步骤3:DNS服务器查找IP
步骤3:向本地域名解析服务系统发起域名解析请求
如果本地无法完成域名解析,系统只能请求域名解析服务系统进行解析。本地域名系统LDNS一般是本地的域名服务器。本地dns(local name)是客户端网络设置的一部分,可以手动配置,也可以从DHCP中获取。一般来说,本地dns在网络上距离客户端较近。
比如你连接的是校园网,那么域名解析系统就在你的校园机房;
如果你连接的是中国电信、中国移动或者中国联通的网络,那么本地域名解析服务器就在当地,由各自的运营商提供服务。
对于本地DNS服务器地址,可以使用命令查看,在Linux、Mac系统下,直接使用cat /etc/.conf命令查看LDNS服务地址。
LDNS一般会缓存大部分域名解析结果,当然缓存时间也是受域名过期时间控制的,大部分解析工作到这里就差不多完成了,LDNS负责了大部分的解析工作。
DNS解析整体流程
整体的DNS流程可以用三句话来概括: 从“根域名服务器”中查找“主域名服务器”的NS记录和A记录(IP地址) 从“主域名服务器”中查找“辅助域名服务器”的NS记录和A记录(IP地址) 从“辅助域名服务器”中查找“主机名”的IP地址 DNS查询类型
从客户端来看,完整的 DNS 查找过程中会发生三种类型的查询。
通过组合这些查询,优化的DNS解析过程减少了传输距离。
递归查询
本机向本地域名服务器发送查询请求并等待最终结果,若本地域名服务器无法解析,则以DNS客户端的身份向其他域名服务器进行查询,直到得到最终的IP地址并告知本机。
迭代查询
本地域名服务器向根域名服务器查询,根域名服务器告诉它下一步去哪里查询,然后它再去查询。每次它都以客户端的身份向每个服务器进行查询。
迭代查询通常发生在DNS服务器之间,当发出域名解析请求时,DNS需要给出最佳答案,这个最佳答案可能是“最近的”顶级域名服务器,也可能是权威域名服务器,无论如何都需要对返回的结果再次进行请求,直到得到最终结果。
非递归查询
可以理解为缓存查找,或者一次性查找。
非递归查询发生在DNS服务器之间,也就是说请求查询的DNS服务器已经知道答案,直接返回。这里可能有两种情况,一种是DNS服务器已经缓存了对应的IP地址,或者已经缓存了对应域名的权威服务器,第二种情况只需要再次发送请求就可以得到结果。
此查询通常在 DNS 解析器客户端向 DNS 服务器查询其有权访问的记录时进行,这是因为它对该记录具有权威性,或者因为该记录存在于其缓存中。
DNS服务器通常会缓存DNS记录,当查询进来时,可以直接返回缓存的结果,以防止更多的带宽消耗和上游服务器的负载。
从递归和迭代查询我们可以看到:
客户端本地 DNS 服务器:
这部分属于递归查询,递归查询时返回的结果只有两种:查询成功或者查询失败。
本地DNS服务器-外部网络:
这部分属于迭代查询,迭代查询又称为重定向,返回最佳的查询点或主机地址。
扫一扫在手机端查看
-
Tags : 子域名部分域名解析服务器
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。