什么是DNS?
DNS(Domain Name System,域名系统)是互联网中用于将域名转换为相应IP地址的分布式命名系统。它充当了互联网的“电话簿”,将人类易于记忆的域名(比如www.example.com)转换为计算机更容易识别和处理的IP地址(比如192.168.1.1)。
虽然不是严格意义上的局域网协议,但它在中大型局域网起着至关重要的作用。它负责将域名映射为IP地址,使得用户可以使用易记的名称访问网络资源。
DNS的重要性
- DNS是互联网基础设施的核心之一。它使得用户可以通过易于记忆的域名来访问互联网资源,而无需记住复杂的IP地址。
- DNS对域名的解析速度和是否可靠运行至关重要,它直接影响到用户体验和网络服务的可用性。比如您打开一个网页,需要等待很长时间才能正常打开,那么您可能会中途关闭该网页,并去寻找其他类似的网页服务。
DNS的域名解析过程
域名解析包含两种查询方式,分别是递归查询和迭代查询。
递归查询
如果主机询问的本地域名服务器不知道被查询域名的 IP 地址,==本地DNS服务器会代表客主机进行整个查询过程,逐级向下级DNS服务器查询直至找到目标域名的IP地址,然后直接将结果返回给主机==。
迭代查询
当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP 地址,要么告诉本地服务器下一步应该找哪个域名服务器进行查询,然后让本地服务器进行后续的查询。
DNS解析失败怎么办?
- 检查您的互联网连接。很多时候域名解析失败的主要原因是你没有连接到互联网。
- 验证问题是否与 DNS 相关。在深入研究特定于 DNS 的解决方案之前,请确认该问题与一般连接无关。尝试使用 IP 地址而不是域名来访问该站点。如果有效,则问题可能出在 DNS 解析上。
- 自动 \ 手动获取DNS服务器地址。转到网络适配器并打开属性。然后搜索 Internet 协议版本 4 (TCP/IPv4) 并打开其属性进行配置,可以根据实际情况选择自动获取DNS服务器地址或者手动配置一个。如果手动配置,需要确忍主机可以正常访问该DNS服务器,国内推荐的public DNS:223.5.5.5 ,114.114.114.114 ,有些时候也可以尝试用Google DNS:8.8.8.8 。
- 解决可能的IP地址冲突问题。 由于 DHCP 服务器的原因,可能会出现 IP 地址冲突。您可以使用命令提示符中的命令来执行此操作:
ipconfig /release ipconfig /renew
- 刷新 DNS 缓存。您可以通过访问命令提示符(以管理员身份)并执行以下命令来完成此操作:
- 在 Windows 上,打开命令提示符并键入:
ipconfig /flushdns
- 在 macOS 上,打开终端并输入:
sudo Killall -HUP mDNSResponder
- 在 Linux 上,该命令因发行版而异,但常见的命令是:
sudo systemctl restart nscd
如果您以前的某个域的 IP 地址不再可用,那么您现在已将其删除。设备再次执行 DNS 解析,应该会获取新的 IP 地址。
- 禁用任何 VPN 或代理。VPN 和代理可以通过不同的服务器重定向您的网络流量,这可能会导致 DNS 解析问题。尝试禁用它们,看看是否可以解决问题。
- 检查您的主机文件。您计算机上的主机文件可以覆盖 DNS 并手动将域名映射到 IP 地址。确保没有可能导致冲突的错误条目。
- 在 Windows 上,此文件位于:C:\Windows\System32\drivers\etc\hosts
- 在 macOS 和 Linux 上,它位于:/etc/hosts
- 等待DNS同步。如果您访问的域名最近更改了 DNS 记录,那么只需耐心等待即可。一般同步只需要几分钟就可以完成,特殊情况下,DNS 同步最多可能需要 48 小时。
为什么DNS需要递归服务器?
为了提高DNS的查询效率,并减轻根域名服务器的负荷和减少因特网上的DNS查询报文数量,在域名服务器中广泛地使用了高速缓存。高速缓存用来存放最近查询过的域名以及从何处获得域名映射信息的记录。
由于域名到IP地址的映射关系并不是永久不变,为了减少负载并提高速度,由递归服务器(DNS 解析器)在定义的时间段内保留 DNS 记录以及访问特定网站所需的信息。这个时间称为TTL(生存时间),这个过程称为DNS缓存。
不但在本地域名服务器中需要高速缓存,在用户主机中也很需要。许多用户主机在启动时从本地域名服务器下载域名和IP地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到域名时才向域名服务器查询。
DNS为什么用UDP?
当客户端向 DNS 服务器查询域名 ( 域名解析) 的时候,一般返回的内容不会超过 UDP 报文的最大长度,即 512 字节。用 UDP 传输时,不需要经过 TCP 三次握手的过程,从而大大提高了响应速度,但这要求域名解析器和域名服务器都必须自己处理超时和重传从而保证可靠性。
但有一些情况,DNS也会选择采用TCP:
- 如果DNS响应超过了512字节,服务器可能会选择使用TCP来发送较大的响应,因为TCP允许更大的数据包传输。
- 当进行DNS区域传输时,需要传输较大量的数据(例如完整的区域数据)。这种情况下,通常使用TCP来保证数据的可靠性和完整性。
- 有些网络设备或防火墙可能会阻止UDP流量,强制使用TCP协议来进行DNS查询和响应。