计算机网络:应用层 - 域名系统 DNS
互联网中的每台设备都有一个唯一的IP地址,但这些地址通常是复杂的数字组合,例如 172.217.160.142
,难以记忆和识别。域名系统将这些复杂的IP地址与易于记忆的文字名称(域名
)对应起来,例如 google.com
。这样,用户只需要记住域名,就可以访问相应的网站或服务,大大降低了记忆负担。
而DNS
就是用域将域名
转化为IP地址
。
域名结构
任何一个连接在互联网上的主机,都有一个唯一的层次结构的名字,即域名
。
互联网采用层次树状结构
的命名方法。
域名由若干标号
序列组成,各标号之间用点.
隔开,分别为不同级别的域名。
域名遵循如下规则:
- 域名中的标号都由英文字母和数字组成,每一个标号不超过
63
个字符,不区分大小写 - 标号中除连字符
-
外不能使用其他的标点符号 - 级别最低的域名写在最左边,而级别最高的顶级域名则写在最右边
- 由多个标号组成的完整域名总共不超过
255
个字符
域名是多层次的,如图:
域名中的每一个层次叫做域 (domain) 。最高层次的域可以划分子域,每一个子域还可继续划分子域,这样就形成了顶级域、二级域、三级域,等等。
域名树的叶子节点
就是一台计算机的名称了。此处区分一下名称
与域名,比如mail.cctv.com
是一个域名,而mail
这是这个域名对应主机的名称。
顶级域名 TLD
又分为三类:
国家顶级域名 nTLD
:如cn
表示中国,us
表示美国,uk
表示英国通用顶级域名 gTLD
:最常见的有七个:com
:公司企业net
:网络服务机构org
:非盈利性组织int
:国际组织edu
:美国教育机构gov
:美国政府部门mil
:美国军事部门
反向域 arpa
:用于反向域名解析,即把IP地址
反向解析为域名
在国家顶级域名下注册的二级域名
,由国家自行确定,我国划分为如下两类:
行政区域名
:共34
个,用于我国各个省份和自治区,直辖市等类别域名
:常见的有七个:ac
:科研机构com
:工,商,金融等企业edu
:教育机构gov
:政府部门net
:提高网络服务的机构mil
:军事机构org
:非盈利性组织
你会发现,gov
在一级域名中表示美国政府,在cn
下的二级域名中,表示中国政府。还有com
,org
等等。也就是说,名称相同的域,等级未必相同。
域名服务器
域名系统由分布在世界各地的域名服务器来实现。
域名系统不是以域
为管理单位,而是以区
(zone)为管理单位。每个域
根据自己的情况来划分区
,每个区有自己的权限域名服务器
,来保存该区
中所有IP地址
到域名
的映射。
如图所示:
对于图a
,域abc.com
只设置一个区abc.com
,此时区
和域
都是abc.com
。
对于图b
,域abc.com
划分了两个区
,分别是abc.com
和y.abc,com
。
域名服务器也是分层次的:
最顶端有一个根域名服务器
,随后是顶级域名服务器
,权限域名服务器
。而刚刚案例中abc.com
和y.abc.com
都有自己的权限域名服务器
。因为一个权限域名服务器
管辖一个区
,一个域
内可以有多个权限域名服务器
,也可以有多个区
。
根域名服务器
:最高层次的域名服务器,也是最重要的。根域名服务器知道所有顶级域名服务器的地址。顶级域名服务器
:管理在该顶级域名下注册的二级域名。权限域名服务器
:在一个域
内部负责一个分区
,知道自己分区中所有域名
到IP地址
映射关系。本地域名服务器
:其不属于域名层次结构
中,用户查询域名时,一般会(不全是)先通过本地域名服务器
,然后本地域名服务器
发起请求查询域名
,被查询到的域名会被缓存在本地域名服务器
中,如果下次查询时,有对应条目的缓存,就不会继续查询,而是直接返回结果了。
域名解析
域名解析分为两种:迭代查询
与递归查询
。
迭代查询
某主机想要查询y.abc.com
的地址:
首先查询本地域名服务器
,如果该服务器缓存了对应条目,则直接返回结果。否则查询根域名服务器
。
根域名服务器
知道所有顶级域名服务器
的地址,y.abc.com
的顶级域名是com
,于是把com
的顶级域名服务器
的地址给本地域名服务器
。本地域名服务器
再去顶级域名服务器
中查询。
顶级域名服务器
知道所有在自己下面注册的域名
的地址,这一步有可能直接就得到域名
对应的地址了,也有可能会得到该域名的权限域名服务器
的地址。本地域名服务器
再去权限域名服务器
中查询。
权限域名服务器
知道所有在自己下面注册的域名
的地址,此时y.abc.com
的地址就可以被解析出来了,返回IP地址
给本地域名服务器
。但是也有可能这个地址归属于同一个域
的另外一个权限域名服务器
,此时返回目的权限域名服务器
的地址给本地域名服务器
。随后本地域名服务器
再去对应的权限域名服务器
查询。
当本地域名服务器
查询到结果后,缓存一份在自己的数据库中,然后将其交给查询该域名
的主机。
递归查询
与刚刚同样的查询:
同样的,首先查询本地域名服务器
,如果该服务器缓存了对应条目,则直接返回结果。否则查询根域名服务器
。
根域名服务器
知道所有顶级域名服务器
的地址,y.abc.com
的顶级域名是com
,于是根域名服务器
自己到com
的顶级域名服务器
中查询。
顶级域名服务器
知道所有在自己下面注册的域名
的地址,这一步有可能直接就得到域名
对应的地址了,也有可能会得到该域名的权限域名服务器
的地址。于是顶级域名服务器
自己到权限域名服务器
中查询。
权限域名服务器
知道所有在自己下面注册的域名
的地址,此时y.abc.com
的地址就可以被解析出来了,返回IP地址
给顶级域名服务器
。
但是也有可能这个地址归属于同一个域
的另外一个权限域名服务器
,于是权限域名服务器
自己到另外一个权限域名服务器
中查询。
当最后一个权限域名服务器
查询完毕,此时返回给顶级域名服务器
,再返回给根域名服务器
,再返回给本地域名服务器
。
当本地域名服务器
查询到结果后,缓存一份在自己的数据库中,然后将其交给查询该域名
的主机。