目录
首先了解一下什么是DNS协议吧
DNS(Domain Name System)是一个用于将域名(例如www.example.com)转换为对应 IP 地址的协议。它起到了"互联网电话簿"的作用,让我们可以使用简单易记的域名来访问网站,而不需要记住复杂的数字 IP 地址。
通俗地说,DNS 协议就像是一个大型的电话簿系统,它帮助我们找到互联网上的网站。假设你想要访问一个网站,比如谷歌(google.com),你会在浏览器中输入这个域名。然后,浏览器会向你所使用的网络提供商的 DNS 服务器发送一个请求,询问:"你们知道谷歌的 IP 地址吗?"
接下来,DNS 服务器会开始进行查找。它首先会检查自己的记录,看是否已经有谷歌的 IP 地址缓存。如果有,它会立即返回给浏览器。如果没有,它会向其他 DNS 服务器询问,直到找到能提供谷歌 IP 地址的服务器。
一旦 DNS 服务器找到了谷歌的 IP 地址,它会将这个信息返回给浏览器。然后,浏览器就知道了谷歌的真实地址,可以开始建立连接,并向该 IP 地址发送请求,获取网页内容。
域名的结构
域名具有一定的层次结构,从上到下依次为:根域名、顶级域名(top level domain,TLD)、二级域名、(三级域名)
顶级域名
顶级域名是域名的最后一个部分,例如www.baidu.com的顶级域名就是.com。顶级域名可以分为两类:
每个顶级域名有一个托管商,托管商负责管理该顶级域名的所有事项。
二级域名
二级域名在通用顶级域名和国家顶级域名下具有不同的意义:
- 通用顶级域名下的二级域名:一般指域名注册人选择使用的网上名称,如yahoo.com、baidu.com。
- 国家顶级域名下的二级域名:一般指类似于通用顶级域名的表示注册人类别和功能的标识。例如.com.cn域名中,.com是置于国家顶级域名.cn下的二级域名,表示中国的商业性组织。
三级域名 是形如www.baidu.com
的域名,可以当作是二级域名的子域名,特征为域名包含两个.
。对于域名所有者/使用者而言,三级域名都是二级域名的附属物而无需单独费用。三级域名甚至不能称为域名,一般称之为域名下的"二级目录"。
根域名
有时,www.xxx.com
被写成www.xxx.com
,即最后还会多出一个点,这个点就是根域名。
DNS的查询方式
DNS查询方式有两种:
- 递归查询
- 迭代查询
递归查询
-
客户端向本地DNS服务器发送查询请求,包含要解析的域名,比如"www.example.com"。
-
如果本地DNS服务器的缓存中已经有了对应的解析结果,它会直接返回解析结果给客户端,并结束查询过程。
-
如果本地DNS服务器的缓存中没有对应的解析结果,它会向根DNS服务器发送迭代查询请求。
-
根DNS服务器收到请求后,会根据请求的域名后缀(例如".com")告诉本地DNS服务器负责该域名后缀的顶级域名服务器的地址。
-
本地DNS服务器再向顶级域名服务器发送迭代查询请求。
-
顶级域名服务器收到请求后,根据请求的域名(例如"example.com")告诉本地DNS服务器负责该域名的权威域名服务器的地址。
-
本地DNS服务器再向权威域名服务器发送迭代查询请求。
-
权威域名服务器收到请求后,检查自己是否有该域名的解析记录。如果有,它会将解析结果返回给本地DNS服务器。
-
本地DNS服务器收到解析结果后,将其缓存,并将解析结果返回给客户端。
-
客户端接收到解析结果后,便可以使用该IP地址与目标服务器建立连接,并进行网站访问等操作。
迭代查询
-
客户端向本地DNS服务器发送查询请求,包含要解析的域名,比如"www.example.com"。
-
如果本地DNS服务器的缓存中已经有了对应的解析结果,它会直接返回解析结果给客户端,并结束查询过程。
-
如果本地DNS服务器的缓存中没有对应的解析结果,它会向根DNS服务器发送迭代查询请求。
-
根DNS服务器收到请求后,会根据请求的域名后缀(例如".com")告诉本地DNS服务器负责该域名后缀的顶级域名服务器的地址。
-
本地DNS服务器再向顶级域名服务器发送迭代查询请求。
-
顶级域名服务器收到请求后,根据请求的域名(例如"example.com")告诉本地DNS服务器负责该域名的权威域名服务器的地址。
-
本地DNS服务器再向权威域名服务器发送迭代查询请求。
-
权威域名服务器收到请求后,检查自己是否有该域名的解析记录。如果有,它会将解析结果返回给本地DNS服务器。
-
如果权威域名服务器没有该域名的解析记录,它会返回一个"域名不存在"的响应。
-
本地DNS服务器接收到解析结果或"域名不存在"的响应后,将其返回给客户端。
-
如果得到的是解析结果,客户端就可以使用该IP地址与目标服务器建立连接,并进行网站访问等操作。
完整域名解析系统
1、首先搜索浏览器中的DNS缓存,缓存中维护一张域名与IP地址的对应表
2、若没有命中,则继续搜索操作系统的DNS缓存。
3、若仍然没有命中,则操作系统将域名发送至本地域名服务器,本地域名服务器查询自己的DNS缓存,查找成功则返回结果。(主机和本地域名服务器之间的查询方式是递归查询)
4、若本地域名服务器的DNS缓存没有命中,则本地域名服务器向上级域名服务器进行查询,通过以下方式迭代查询(防止根域名服务器压力过大)
- 首先本地域名服务器向根域名服务器发起请求,根域名服务器是最高层次的,它并不会直接指明这个域名对应的IP地址,而是返回顶级域名服务器的地址。
- 本地域名服务器拿到这个顶级域名服务器的地址后,就向其发起请求,获取权限域名服务器的地址。
- 本地域名服务器拿到这个权限域名服务器的地址后,就向其发起请求,最终得到该域名对应的IP地址。
5、本地域名服务器将得到的IP地址返回给操作系统,同时自己将IP地址缓存起来
6、操作系统将IP地址返回给浏览器,同时自己也将IP地址缓存起来
7、至此,浏览器就得到了域名对应的IP地址,并将IP地址缓存起来。