起序:本文摘录于《计算机网络(第七版)- 谢希仁》,里面也有自己对 DNS
的理解。
一、概述
域名系统DNS(Domain Name System) 是互联网使用的命名系统,用来把便于人们使用的机器名字转换为IP地址。域名系统其实就是名字系统。为什么不叫 名字
而叫 域名
呢?这是因为在这种互联网的命名系统中使用了许多的 域(domain)
,因此就出现了域名
这个名词。域名系统
很明确地指明这种系统是用在互联网中的。
总结:概述只摘录了这一段,意思就是讲解 域名系统的由来
。
二、域名结构
早期的互联网使用了 非等级
的名字空间,当时互联网上的用户数量不是很多,所以用户使用的域名都是较短的,肯定是因为简短,好记。但现在不行了,互联网上的用户太多了,简短的域名已经不满足当前用户的需求,域名太长的又不容易记住。因此,互联网后来就采用了层次树状结构的命名方法。采用这种命名方法,任何一个连接在互联网上的主机或路由器,都有一个唯一的层次结构的名字,即域名(domain name) 。这里,“域”(domain) 是名字空间中一个可被管理的划分。域还可以划分为子域,而子域还可继续划分为子域的子域,这样就形成了*域、二级域、三级域,等等。
从语法上讲,每一个域名都由 标号(label) 序列组成,而各标号之间用
点
隔开(请注意,是小数点 “.”,不是中文的句号“。”)。
原先的*域名
TLD(Top Level Domain)
共分为三大类
- 国家*域名
nTLD
( 又双叒(ruo)叕(zhuo)ccTLD
: cc 表示国家代码 country-code )
域名 | 国家 |
---|---|
cn | 中国 |
us | 美国 |
uk | 英国 |
de | 德国 |
- 通用*域名
gTLD
域名 | 代表 |
---|---|
com | 公司企业 |
net | 网络服务机构 |
org | 非盈利组织 |
int | 国际组织 |
edu | 教育机构 |
gov | *机构 |
mil | 军事部门 |
- 基础结构域名(infrastructure domain):这种*域名只有一个,即
arpa
,用于反向域名解析,因为又称为反向域名
。
注:这是简单举个栗子列出几个,知道怎么回事就行,网上百度百科是可以搜到的。
在国家*域名**册的二级域名均由该国家自行确定。我国把二级域名划分为
类别域名
和行政区域名
两大类。
- 类别域名:共 7 个
域名 | 类别 |
---|---|
ac | 科研机构 |
com | 工、商、金融等企业 |
edu | 中国的教育机构 |
gov | 中国的*机构 |
mil | 中国的国防机构 |
net | 提供互联网络服务的机构 |
org | 非盈利性的组织 |
- 行政区域名:共 34 个,设用于我国的各省、自治区、直辖市
域名 | 地区 |
---|---|
bj | 北京 |
js | 江苏 |
注:这就可以理解是地区名称拼音的首字母。
用域名树来表示互联网的域名系统是最清楚的。
一旦某个单位拥有了一个域名,它就可以自己觉得是否要进一步划分其下属的子域,并且不必由其上级机构批准。图中 cctv(*电视台)和 tsinghua(清华大学) 都分别划分了自己的下一级的域名 mail和www(分别是三级域名和四级域名)。
域名树的树叶就是单台计算机的名字,它不能再继续往下划分子域了。这句话的意思就是划分子域已经到达极限了,再往下划分也没有太大意义了。
三、域名服务器
一个服务器所负责管辖的(或有权限的)范围叫做 区(zone)
。各单位根据具体情况来划分自己管辖范围的区。但在一个区中的所有节点必须是能够 连通
的。每一个区设置相应的 权限域名服务器(authoritative name server) ,用来保存该区中的所有主机的域名到IP地址的映射。总之,DNS服务器的管辖范围不是以 域
为单位,而是以 区
为单位。区是 DNS服务器实际管辖的范围。区可能等于或小于域,但一定不能大于域。
但图表示 abc公司 划分了两个区(大的公司可能要划分多个区):abc.com和y.abc.com 。这两个区都隶属于域 abc.com ,都各设置了相应的权限域名服务器。不难看出,区是
域
的子集。
DNS域名服务器树状结构图 。这种DNS域名服务器树状结构图可以更准确地反映出 DNS的分布式结构 。在图中的每一个域名服务器都能够进行部分域名到IP地址的解析。当某个DNS服务器不能进行域名到IP地址的转换时,它就设法找互联网上别的域名服务器进行解析。
从图可看出,互联网上的DNS域名服务器也是按照层次安排的。每一个域名服务器都只对域名体系中的一部分进行管辖。根据域名服务器所起的作用,可以把域名服务器划分为以下 四种不同的类型。
- 根域名服务器
根域名服务器是最高层次的域名服务器,也是最重要的域名服务器。所有的根域名服务器都知道所有的*域名服务器的域名和IP地址。需要注意的是,在许多情况下,根域名服务器并不直接把待查询的域名直接转换成IP地址(根域名服务器也没有存放这种信息),而是告诉本地域名服务器下一步应当找哪一个*域名服务器进行查询。
- *域名服务器(即 TLD 服务器)
这些域名服务器负责管理在该*域名服务器注册的所有二级域名。当收到DNS查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步应当找的域名服务器的IP地址)。
- 权限域名服务器
这就是前面已经讲过的负责一个 区
的域名服务器。当一个权限域名服务器还不能给出最后的查询回答时,就会告诉发出查询请求的DNS客户,下一步应当找哪一个权限域名服务器。
- 本地域名服务器
本地域名服务器并不属于 域名服务器层次结构,但它对域名系统非常重要。当一台主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。由此可看出本地域名服务器的重要性。
为了提高域名服务器的可靠性,DNS域名服务器都把数据复制到几个域名服务器来保存,其中的一个是主域名服务器(master name server),其他的是辅助域名服务器(secondary name server)。当主域名服务器出故障时,辅助域名服务器可以保证DNS的查询工作不会中断。主域名服务器定期把数据复制到辅助域名服务器中,而更改数据只能在主域名服务器中进行。这样就保证了数据的一致性。
域名的解析过程
- 主机向本地域名服务器的查询一般都是采用 递归查询(recursive query) 。
- 本地域名服务器向根域名服务器的查询通常是采用 迭代查询(iterative query) 。
注:本地域名服务器也可以采用递归查询,这取决于最初的查询请求报文的设置是要求使用哪一种查询方式。
假定域名为
m.xyz.com
的主机想知道另一台主机(域名为y.abc.com
)的IP地址。例如,主机m.xyz.com 打算发送邮件给主机 y.abc.com。这时就必须知道主机 y.abc.com的IP地址。下面是图(a)的几个查询步骤:
- 主机
m.xyz.com
先向其本地域名服务器dns.xyz.com
进行递归查询。 - 本地域名服务器采用
迭代查询
。它先向一个根域名服务器查询
。 根域名服务器
告诉本地域名服务器,下一次应查询的*域名服务器dns.com的IP地址
。- 本地域名服务器向
*域名服务器dns.com
进行查询。 *域名服务器dns.com
告诉本地域名服务器,下一次应查询的权限域名服务器dns.abc.com的IP地址
。- 本地域名服务器向
权限域名服务器 dns.abc.com
进行查询。 权限域名服务器 dns.abc.com
告诉本地域名服务器,所查询的主机的IP地址。本地域名服务器
最后把查询结果告诉主机m.xyz.com
。
注意:这8个步骤总共要使用 8个UDP用户数据报的报文
。本地域名服务器经过三次迭代查询后,从权限域名服务器 dns.abc.com 得到了主机 y.abc.com 的IP地址,最后把结果返回给发起查询的主机 m.xyz.com。
高速缓存
为了提高DNS查询效率,并减轻根域名服务器的负荷和减少互联网上的DNS查询报文数量,在域名服务器中广泛地使用了 高速缓存(有时也称为高速缓存域名服务器)。高速缓存用来存放 最近查询过 的域名以及从何处获得域名映射信息的记录。
由于名字到地址的绑定并不经常改变,为保持高速缓存中的内容正确,域名服务器应为每项内容设置计时器并处理超过合理时间的项(例如,每个项目只存放两天)。当域名服务器已从缓存中删去某项信息后又被请求查询该项信息,就必须重新到授权管理该项的域名服务器获取绑定信息。当权限域名服务器回答一个查询请求时,在响应中都指明绑定有效存在的时间值。增加此时间值可减少网络开销,而减少此时间值可提高域名转换的准确性。
不但在本地域名服务器中需要高速缓存,在主机中也很需要。许多主机在启动时从本地域名服务器下载名字和地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到名字时才使用域名服务器。维护本地域名服务器数据库的主机自然应该定期地检查域名服务器以获取新的映射信息,而且主机必须从缓存中删掉无效的项。由于域名改动并不频繁,大多数网点不需花太多精力就能维护数据库的一致性。
总结一句话就是:高速缓存
就是存放已经访问过的 域名及 IP地址的映射
记录,这个记录也是定期更新的。本地域名服务器
和 主机(一般是个人主机)
都存在着 高速缓存
。目的就是提高访问速度,减少网络开销。