计算机网络:应用层 - 域名系统 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地址给顶级域名服务器。
但是也有可能这个地址归属于同一个域的另外一个权限域名服务器,于是权限域名服务器自己到另外一个权限域名服务器中查询。
当最后一个权限域名服务器查询完毕,此时返回给顶级域名服务器,再返回给根域名服务器,再返回给本地域名服务器。
当本地域名服务器查询到结果后,缓存一份在自己的数据库中,然后将其交给查询该域名的主机。