DNS(Domain Name System), 也叫网域名称系统,是互联网的一项服务。它实质上是一个 域名 和 IP 相互映射的分布式数据库,有了它,我们就可以通过域名更方便的访问互联网。
DNS 有以下特点:
-
分布式的
-
协议支持 TCP 和 UDP,常用端口是 53
-
每一级域名的长度限制是 63
-
域名总长度限制是 253
DNS解析的工作原理
当你在浏览器中输入一个域名并尝试访问时,Windows系统会首先查询DNS以获取该域名对应的IP地址。这个查询过程可能涉及多个DNS服务器之间的交互和查询,但客户端通常只需要向本地DNS服务器发送一次查询请求,就可以获得目标域名的IP地址。
-
本地缓存检查:系统会首先检查本地缓存中是否已经有该域名的IP地址记录。如果缓存中存在该域名的IP地址,则直接使用该IP地址进行访问。
-
Hosts文件检查:如果本地缓存中没有找到对应的IP地址,系统会检查本地的Hosts文件。Hosts文件是一个包含域名和IP地址映射关系的文件,通常用于手动指定某些域名的IP地址。
-
本地DNS服务器查询:如果本地缓存和Hosts文件中都没有找到对应的IP地址,客户端会向本地配置的DNS服务器发送查询请求。本地DNS服务器可能是由ISP(互联网服务提供商)提供的,也可能是企业或组织内部部署的。
-
递归或迭代查询:本地DNS服务器收到查询请求后,会进行递归查询或迭代查询来解析域名。递归查询是指本地DNS服务器代替客户端向其他DNS服务器发送查询请求,直到找到对应的IP地址并将结果返回给客户端。迭代查询是指本地DNS服务器向客户端返回一个或多个指向其他DNS服务器的引用,客户端再依次向这些服务器发送查询请求,直到找到对应的IP地址。
-
根域名服务器查询:如果本地DNS服务器无法解析域名,它会向根域名服务器发送查询请求。根域名服务器是DNS系统中的最高层次,它知道所有顶级域名服务器的地址。根域名服务器会返回顶级域名服务器的地址给本地DNS服务器,然后本地DNS服务器再逐级向下查询,直到找到权威域名服务器并获取对应的IP地址。
-
返回结果并缓存:本地DNS服务器将查询到的IP地址返回给客户端,并将该结果缓存起来以便后续使用。
Windows系统中的DNS配置方法
在Windows系统中,你可以通过以下步骤来配置DNS服务器地址:
- 点击左下角的开始按钮,然后在弹出的菜单中选择“控制面板”。
- 在控制面板中,选择“网络和Internet”选项。
- 接着,选择“网络和共享中心”。
- 在左侧菜单中,选择“更改适配器设置”。
- 在弹出的窗口中,找到你当前使用的网络连接(通常显示为本地连接或者以太网),右键点击它,然后选择“属性”。
- 在属性窗口中,找到“Internet协议版本4(TCP/IPv4)”,双击打开它。
- 在弹出的窗口中,选择“使用下面的DNS服务器地址”,然后在对应的栏目中输入你想要使用的DNS服务器的IP地址。
- 输入完毕后,点击“确定”按钮保存你的设置。
DNS查询类型
DNS递归查询和迭代查询过程是域名解析的两种主要方式,它们在查询过程中扮演的角色和方式有所不同。
DNS递归查询过程:
客户端(如浏览器)发起一个DNS查询请求,通常是通过ISP提供的递归DNS服务器进行的。
递归DNS服务器接收请求后,会代替客户端进行后续的所有查询工作,直到找到正确的IP地址并返回给客户端。
递归DNS服务器可能会查询根DNS服务器、顶级域名服务器(TLD)、以及权威DNS服务器,以逐级解析域名到最终的IP地址。
如果递归DNS服务器在其缓存中找到匹配的记录,则会直接返回结果给客户端,否则会进行一系列的查询直到找到答案。
DNS迭代查询过程:
客户端向本地DNS服务器发起查询请求。
本地DNS服务器不直接提供答案,而是告诉客户端下一个应该查询的DNS服务器的地址。
客户端然后向这个新的DNS服务器发送查询请求,这个过程可能会重复多次,直到找到答案或者确定没有匹配的记录。
迭代查询过程中,客户端和DNS服务器之间的角色不变,客户端负责发起请求并跟踪下一个查询的DNS服务器地址。
总结一下:客户端发起的请求默认是递归查询,DNS服务器之间默认是迭代查询。也就是说我们向DNS提出请求后,会给到最后结果,不会再去反复查询。而域名服务器之间会反复多次查询。
下面做个测试:
1.递归查询:
使用nslookup命令查询某域名:nslookup so.com
使用Wireshark抓包,并过滤展示:
基本上一个请求一个应答,就会得到解析结果,更多的交互内容由DNS服务器完成。其他的反向查询和ipv6查询先忽略。
2.迭代查询:
使用Linux的dig命令加trace参数可以设置迭代查询:
通过抓包也可以看到反复查询的过程,感兴趣自己测试一下,可以看到世界上的13个根域名服务的ip地址。可以看到逐个会向顶级域名服务器、二级域名服务器、NS服务器请求解析的过程。
1.3 DNS解析过程
当我们访问一个网站时,域名解析的过程是这样的:Client(客户端)–> hosts文件 –> DNS Service Local Cache(自己的本地缓存) –> DNS Server(recursion递归) –> Server Cache(缓存) –> iteration(迭代) –>根 –> 顶级域名DNS –> 二级域名DNS…
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/imtech/article/details/140653546
常见的DNS错误及解决方法
1. 检查网络连接
首先,我们应该检查我们的网络连接是否正常。确保我们的设备连接到可靠的网络,并且网络连接稳定。如果我们使用的是Wi-Fi连接,可以尝试重新连接或重启路由器来解决潜在的网络问题。
2. 清除DNS缓存
DNS缓存可能会导致解析错误或过期的IP地址。我们可以尝试清除设备上的DNS缓存来解决这个问题。具体步骤可能因操作系统而异,但通常可以通过在命令提示符或终端中运行特定命令来清除DNS缓存。
3. 更改DNS服务器
我们的设备通常会自动获取DNS服务器的设置,但有时这些服务器可能出现问题。我们可以尝试手动更改DNS服务器,使用其他可靠的公共DNS服务器,如Google Public DNS或Cloudflare DNS。这样做可以解决由于DNS服务器故障或不稳定导致的问题。
4. 检查防火墙和安全软件设置
有时,防火墙或安全软件可能会阻止设备与DNS服务器的通信,导致DNS异常。我们应该检查我们的防火墙和安全软件设置,确保它们不会干扰DNS解析。如果需要,我们可以暂时禁用防火墙或安全软件,然后再次尝试访问网站或应用程序。
DNS解析是互联网访问的基础,了解DNS的工作原理和配置方法对于解决网络问题至关重要。希望本文能够帮助你更好地理解和使用Windows系统中的DNS功能。