1、DNS
定义:DNS(Domain Name System)即域名系统,是一个将域名和 IP 地址进行相互映射的分布式数据库,它能够使用户更方便地访问互联网,而无需记住难以理解的 IP 数串,通过主机名,最终得到该主机名对应的 IP 地址的过程叫做域名解析(或主机名解析)。
作用:DNS 的作用类似于一本巨大的电话本,将人们容易记忆的域名转换为机器能够识别的 IP 地址,方便人们在网络中快速定位和访问目标服务器。
2、域名层级结构
根域名服务器:是整个域名系统最上级的服务器,因特网上一共有 13 组根域名服务器,从 A.ROOTSERVERS.NET 一直到 M.ROOTSERVERS.NET,它们不存储具体的域名和 IP 地址映射关系,只记录哪个服务器管理哪个区域,例如负责 .com 域的顶级域名服务器、负责 .cn 域的顶级域名服务器等。
顶级域名服务器:对于每个顶级域名,如 .com、.net、.org、.edu 等,都有对应的顶级域名服务器,这些服务器知道其所管理的所有二级域名服务器的 IP 地址,比如负责 .com 域的顶级域名服务器知道负责 baidu.com 域的权威域名服务器的 IP 地址。
权威域名服务器:一个网站需要将其域名和 IP 地址注册到相应的权威域名服务器中,比如网站 www.baidu.com 的域名和 IP 地址就存储在负责 baidu.com 域的权威域名服务器中,当其他域名服务器查询该域名的 IP 地址时,如果该服务器是该域名的权威域名服务器,则直接返回对应的 IP 地址;如果不是,则告知查询者该域名的权威域名服务器的位置。
本地域名服务器:每个 ISP(如一个大学、一个公司)都有一个本地域名服务器,也称为默认域名服务器,它会缓存常用的域名 / IP 映射关系,并代替终端请求上级域名服务器,当终端向其发送 DNS 查询请求时,如果本地域名服务器有相应的缓存记录,就直接返回结果给终端;如果没有,则代表终端向上级域名服务器进行查询,直到得到答案为止。
3、DNS 查询过程
浏览器缓存:当用户输入一个域名后,首先会检查浏览器自身的缓存中是否有该域名对应的 IP 地址,如果有,则直接使用该 IP 地址访问目标网站,查询结束。
本地缓存:如果浏览器缓存未命中,操作系统会检查本地缓存,如 Windows 系统的 C:WindowsSystem32driversetchosts 文件,该文件中保存了本地静态的域名和 IP 地址映射关系,如果在 hosts 文件中找到了对应的解析结果,则直接使用该 IP 地址访问网站;如果没有找到,则继续下一步。
本地域名服务器:若前两步都没有得到结果,终端会向本地域名服务器发送 DNS 查询报文,询问目标域名的 IP 地址,本地域名服务器收到查询报文后,会先检查自身的缓存,如果缓存中有对应的记录,就直接返回结果给终端;如果没有,则会代表终端向上级域名服务器进行查询。
根域名服务器:如果本地域名服务器不知道目标域名的 IP 地址,它会代表客户端向根域名服务器发送查询请求,询问哪个顶级域名服务器负责该域名的解析,根域名服务器收到请求后,会根据域名的顶级域名部分,返回负责该顶级域名的顶级域名服务器的 IP 地址列表给本地域名服务器。
顶级域名服务器:本地域名服务器根据根域名服务器返回的顶级域名服务器的 IP 地址,向其中一个顶级域名服务器发送查询请求,询问该二级域名的权威域名服务器的 IP 地址,顶级域名服务器收到请求后,会返回负责该二级域名的权威域名服务器的 IP 地址列表给本地域名服务器。
权威域名服务器:本地域名服务器再向权威域名服务器发送查询请求,权威域名服务器在自己的数据库中查找该域名的 IP 地址,并将结果返回给本地域名服务器,本地域名服务器得到 IP 地址后,会将其缓存起来,并把结果返回给终端,终端也会根据 TTL(Time to Live)值将该 IP 地址缓存到本地系统缓存中,以便下次访问时可以直接使用。
4、DNS 查询类型
递归查询:客户端向 DNS 服务器发送查询请求后,DNS 服务器为客户机完全解析域名(直到获得最终的 IP 地址)的过程,DNS 服务器无法直接回答一个查询,它会代表客户端向其他 DNS 服务器进行查询,直到得到答案,然后将结果返回给客户端,这种查询方式对于客户端来说比较简单,但可能会增加 DNS 服务器的负担和查询时间。
迭代查询:每次客户端向 DNS 服务器发送查询请求后,DNS 服务器无法回答该查询,它会告诉客户端下一步应该向哪个 DNS 服务器进行查询,然后让客户端自己向其他 DNS 服务器进行查询,直到得到答案,这种方式下,DNS 服务器的压力相对较小,但客户端需要不断地向不同的 DNS 服务器发送查询请求,查询时间可能会较长。
5、DNS 协议及端口
协议:DNS 协议主要使用 UDP 协议进行通信,因为 DNS 报文通常较小,UDP 协议传输效率较高,但如果报文长度超过了 512 字节,或者在查询过程中出现了错误需要重传数据包时,则会使用 TCP 协议进行通信。
端口:DNS 协议使用的端口号是 53 号端口,无论是 UDP 还是 TCP 协议,在发送 DNS 请求和接收 DNS 响应时,都会使用这个端口号。
6、相关表格小编总结
名称 | 类型 | 描述 | 示例 |
DNS 查询类型 | 递归查询、迭代查询 | 递归查询:DNS 服务器为客户机完全解析域名;迭代查询:DNS 服务器告知客户端下一步查询的 DNS 服务器 | 查询 www.baidu.com 的 IP 地址,若本地 DNS 服务器无法直接回答,采用递归查询则会继续向其他 DNS 服务器查询直到得到答案后返回给客户端;采用迭代查询则返回下一个要查询的 DNS 服务器地址给客户端,由客户端继续查询 |
DNS 协议及端口 | UDP、TCP;53 端口 | UDP:用于一般的 DNS 查询请求和响应;TCP:用于大数据包或需要可靠传输的情况;53 端口:DNS 服务使用的端口号 | 查询 www.example.com 的 IP 地址,若使用 UDP 协议发送查询请求且无错误,可正常返回结果;若使用 TCP 协议则是在特殊情况下(如报文超过 512 字节或需要重传),通过 53 端口进行数据传输 |
7、相关问题与解答
问题一:为什么 DNS 要采用分层结构?
解答:DNS 采用分层结构主要有以下几个原因,分层结构可以提高域名解析的效率,通过将域名空间划分为不同的层次,每一层都有相应的域名服务器负责处理特定范围内的域名解析请求,这样可以将查询范围逐渐缩小,更快地找到目标域名的 IP 地址,分层结构有助于分散负载,根域名服务器只需维护顶级域名的信息,将大部分的查询压力分担到了各个顶级域名服务器和权威域名服务器上,避免了单一服务器的性能瓶颈,分层结构便于管理和扩展,当新的顶级域名或二级域名需要加入时,只需要在相应的层次上进行配置和管理,而不会影响到整个域名系统的正常运行。
问题二:如何提高 DNS 解析的速度?
解答:可以从以下几个方面来提高 DNS 解析的速度,一是优化本地缓存设置,适当增加本地缓存的时间和容量,这样在重复访问相同网站时可以直接从缓存中获取 IP 地址,减少对外查询的次数,二是选择合适的 DNS 服务器,优先使用响应速度快、稳定性高的公共 DNS 服务器,如 Google 的 8.8.8.8 和 Level 3 的 4.2.2.2 等,或者使用专业的 DNS 服务提供商提供的服务,三是启用多线程或异步查询功能,现代的操作系统和应用程序大多支持多线程或异步操作,可以在后台同时向多个 DNS 服务器发送查询请求,加快获取解析结果的速度,四是升级网络设备和带宽,确保网络连接的稳定性和高速性,避免因为网络延迟或丢包等问题影响 DNS 解析的速度。
来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/132991.html