DNS域名解析详解
目录
1、什么是DNS协议?
- IP地址:一长串能够唯一标记网络上的计算机的数字。IP便于机器直接读取,但是不方便记忆,且不能显示出组织的名称和性质。
- 域名:由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时对计算机的定位标识。域名便于记忆。
域名解析协议(DNS,Domain Name System)来将域名和IP地址相互映射。
✨域名与网址,www.gitee.com/veal98是一个网址,而www.gitee.com是一个域名
✨DNS协议可以使用UDP或TCP传输,使用的端口号都为53.但大多数情况下DNS都是用UDP。
2、域名的结构
域名具有一定的层次结构,从上到下依次为:根域名、顶级域名(top level domain,TLD)、二级域名、(三级域名)
顶级域名
顶级域名是域名的最后一个部分,例如www.baidu.com
的顶级域名就是.com
。顶级域名可以分为两类:
- 通用顶级域名,比如
.com
、.net
、.edu
、.org
、.xxx
等等 - 国家顶级域名,代表不同的国家和地区,比如
.cn
(中国)、.io
(英属印度洋领地)、.cc
(科科斯群岛)等。
每个顶级域名有一个托管商,托管商负责管理该顶级域名的所有事项。
二级域名
二级域名在通用顶级域名和国家顶级域名下具有不同的意义:
- 通用顶级域名下的二级域名:一般指域名注册人选择使用的网上名称,如
yahoo.com
、baidu.com
。 - 国家顶级域名下的二级域名:一般指类似于通用顶级域名的表示注册人类别和功能的标识。例如
.com.cn
域名中,.com
是置于国家顶级域名.cn
下的二级域名,表示中国的商业性组织。
三级域名是形如www.baidu.com
的域名,可以当作是二级域名的子域名,特征为域名包含两个.
。对于域名所有者/使用者而言,三级域名都是二级域名的附属物而无需单独费用。三级域名甚至不能称为域名,一般称之为域名下的“二级目录”。
根域名
有时,www.xxx.com
被写成www.xxx.com
,即最后还会多出一个点,这个点就是根域名。
3、域名服务器
根域名服务器
根域名服务器保存所有顶级域名服务器的地址。
顶级域名服务器
顶级域名服务器用来管理注册在该顶级域名下的所有二级域名,记录这些二级域名的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服务器。
4、DNS的查询方式
DNS查询方式有两种:
- 递归查询。
- 迭代查询
一般来说域名服务器之间的查询使用迭代查询方式,以免根域名服务器的压力过大。主机与本地域名服务器的查询方式使用递归查询。
(1)递归查询
(2)迭代查询
5、域名缓存
为了减轻域名服务器的压力。主机会使用缓存保存域名和IP地址的映射。计算机中DNS记录在本地有两种缓存方式:浏览器缓存和操作系统缓存
- 浏览器缓存:浏览器在获取网站域名的实际IP地址后会对其进行缓存,减少网络请求的损耗。
- 操作系统缓存:操作系统的缓存是用户自己配置的hosts文件
6、完整域名解析系统
- 首先搜索浏览器中的
DNS缓存
,缓存中维护一张域名与IP地址的对应表 - 若没有命中,则继续搜索
操作系统的DNS缓存
。 - 若仍然没有命中,则操作系统将域名发送至
本地域名服务器
,本地域名服务器查询自己的DNS缓存,查找成功则返回结果。(主机和本地域名服务器之间的查询方式是递归查询) - 若本地域名服务器的DNS缓存没有命中,则本地域名服务器向上级域名服务器进行查询,通过以下方式
迭代查询
(防止根域名服务器压力过大)- 首先本地域名服务器向
根域名服务器
发起请求,根域名服务器是最高层次的,它并不会直接指明这个域名对应的IP地址,而是返回顶级域名服务器的地址。 - 本地域名服务器拿到这个
顶级域名服务器
的地址后,就向其发起请求,获取权限域名服务器的地址。 - 本地域名服务器拿到这个
权限域名服务器
的地址后,就向其发起请求,最终得到该域名对应的IP地址。
- 首先本地域名服务器向
- 本地域名服务器将得到的IP地址返回给操作系统,同时自己将IP地址缓存起来
- 操作系统将IP地址返回给浏览器,同时自己也将IP地址缓存起来
- 至此,浏览器就得到了域名对应的IP地址,并将IP地址缓存起来。