谈一谈你所了解的 DNS 域名解析
时间:2023-01-31 16:28:01 | 来源:建站知识
时间:2023-01-31 16:28:01 来源:建站知识
问题描述:
谈一谈你所了解的 DNS 域名解析
解题思路:
1. 域名解析协议
将域名和 IP 地址相互映射,将域名映射成 IP 地址称为正向解析,将 IP 地址映射成域名称为反向解析。DNS 协议可以使用 UDP 或者 TCP 进行传输,使用的端口号都为 53。但
大多数情况下 DNS 都使用 UDP 进行传输。
2. 域名详解
- 根域名
ICANN 管理着所有的顶级域名,所以它是最高一级的域名节点,被称为根域名(root domain)。在有些场合,www.xxx.com
被写成 www.xxx.com.
,即最后还会多出一个点。这个点就是根域名。 - 顶级域名
顶级域名(TLD),即最高层级的域名。简单说,就是网址的最后一个部分。比如,网址www.baidu.com
的顶级域名就是 .com
。
- 通用顶级域名(gTLD),比如
.com
- 国家顶级域名(ccTLD),代表不同的国家和地区,比如
.cn
(中国)
- 二级域名
二级域名(Second Level Domain,SLD) 在通用顶级域名或国家顶级域名之下具有不同的意义:
- 通用顶级域名下的二级域名:一般是指域名注册人选择使用的网上名称,如
yahoo.com
(商业组织通常使用自己的商标、商号或其他商业标志作为自己的网上名称,如 baidu.com
) - 国家顶级域名下的二级域名:一般是指类似于通用顶级域名的表示注册人类别和功能的标志。例如,在
.com.cn
域名结构中,.com
此时是置于国家顶级域名 .cn
下的二级域名,表示中国的商业性组织,以此类推。
- 三级域名
三级域名是形如 www.baidu.com
的域名,可以当做是二级域名的子域名,特征为域名包含两个 .
。对于域名所有者/使用者而言,三级域名都是二级域名的附属物而无需单独费用。三级域名甚至不能称为域名,一般称之为域名下的 “二级目录”。
3. 域名服务器详解
- 根域名服务器
ICANN 维护着一张根域名列表,里面记载着顶级域名和对应的托管商,其实根域名列表的正式名称是 DNS 根区(DNS root zone),保存 DNS 根区文件的服务器,就叫做 DNS 根域名服务器(root name server)。根域名服务器保存所有的顶级域名服务器的地址
由于早期的 DNS 查询结果是一个 512 字节的 UDP 数据包。这个包最多可以容纳 13 个服务器的地址,因此就规定全世界有 13 个根域名服务器,编号从 a.root-servers.net
一直到 m.root-servers.net
。其中 10 台设置在美国,另外各有一台设置于荷兰、瑞典和日本。 - 顶级域名服务器
按照根域名服务器管理顶级域名的逻辑,顶级域名服务器显然就是用来管理注册在该顶级域名下的所有二级域名的,记录这些二级域名的 IP 地址。 - 权限域名服务器
权限域名服务器就是负责管理一个“区”的域名服务器。
什么是区?怎样划分区呢?
区和域其实是不同的,区可以有多种不同的划分方法。以百度为例,我们假设有 fanyi.baidu.com
、ai.baidu.com
、tieba.baidu.com
这三个三级域名。我们可以这样分区,fanyi.baidu.com
和 tieba.baidu.com
放在 baidu.com
权限域名服务器,ai.baidu.com
放在 ai.baidu.com
权限域名服务器中。并且 baidu.com
权限域名服务器和 ai.baidu.com
权限域名服务器是同等地位的,而具体怎么分区是百度公司根据域名多少、访问多少等情况去自己规定的。
- 本地域名服务器
除了上面三种 DNS 服务器,还有一种不在 DNS 层次结构之中,但是很重要的 DNS 服务器,就是本地域名服务器(也被称为权威域名服务器)。本地域名服务器是电脑解析时的默认域名服务器,即电脑中设置的首选 DNS 服务器和备选 DNS 服务器。常见的有电信、联通、谷歌、阿里等的本地 DNS 服务。
4. DNS 查询方式
- 递归查询
递归查询中,如果 A 请求 B,那么 B 作为请求的接收者一定要给 A 想要的答案;而迭代查询则是指,如果接收者 B 没有请求者 A 所需要的准确内容,接收者 B 将告诉请求者 A,如何去获得这个内容,但是自己并不去发出请求。 - 迭代查询
迭代就是,如果请求的接收者不知道所请求的内容,那么接收者将扮演请求者,发出有关请求,直到获得所需要的内容,然后将内容返回给最初的请求者。
一般来说,
域名服务器之间的查询使用迭代查询方式,以免根域名服务器的压力过大。
5. 域名缓存
- 浏览器缓存
浏览器在获取网站域名的实际 IP 地址后会对其进行缓存,减少网络请求的损耗。每种浏览器都有一个固定的 DNS 缓存时间,如 Chrome 的过期时间是 1 分钟,在这个期限内不会重新请求 DNS - 操作系统缓存
操作系统的缓存其实是用户自己配置的 hosts 文件。比如 Windows10 下的 hosts 文件存放在 C:/Windows/System32/drivers/etc/hosts
在浏览器中进行访问的时候,会优先查询浏览器缓存,如果未命中则继续查询操作系统缓存,最后再查询本地域名服务器,然后本地域名服务器会
递归的查找域名记录,最后返回结果。
主机和本地域名服务器之间的查询方式是递归查询,也就是说主机请求本地域名服务器,那么本地域名服务器作为请求的接收者一定要给主机想要的答案。
6. 完整域名解析过程
以
正向解析为例(域名解析成 IP 地址):
1)首先搜索
浏览器的 DNS 缓存,缓存中维护一张域名与 IP 地址的对应表;
2)若没有命中,则继续搜索
操作系统的 DNS 缓存;
3)若仍然没有命中,则操作系统将域名发送至
本地域名服务器,本地域名服务器查询自己的 DNS 缓存,查找成功则返回结果(注意:主机和本地域名服务器之间的查询方式是
递归查询);
4)若本地域名服务器的 DNS 缓存没有命中,则本地域名服务器向上级域名服务器进行查询,通过以下方式进行
迭代查询(注意:本地域名服务器和其他域名服务器之间的查询方式是迭代查询,防止根域名服务器压力过大):
- 首先本地域名服务器向根域名服务器发起请求,根域名服务器是最高层次的,它并不会直接指明这个域名对应的 IP 地址,而是返回顶级域名服务器的地址,也就是说给本地域名服务器指明一条道路,让他去这里寻找答案
- 本地域名服务器拿到这个顶级域名服务器的地址后,就向其发起请求,获取权限域名服务器的地址
- 本地域名服务器根据权限域名服务器的地址向其发起请求,最终得到该域名对应的 IP 地址
4)本地域名服务器将得到的 IP 地址返回给操作系统,同时自己将 IP 地址缓存起来
5)操作系统将 IP 地址返回给浏览器,同时自己也将 IP 地址缓存起来
6)至此,浏览器就得到了域名对应的 IP 地址,并将 IP 地址缓存起来
配合下图直观理解: