DNS
概述
Domain Name System(DNS) 是一个用于计算机,服务以及其他资源连接到 Iternet 的分布式分层系统。DNS 是一个数据库,它保存了域名以及 IP 地址的映射。可以将域名转化成对应的 IP。
用户与互联网上的某台机器进行交互时,需要知道对方机器的 IP 地址,不论是 32 位还是点十分制的 IP 地址都不容易记忆,因此需要有一个容易记住的主机名称(域名),并且有一个对映的翻译系统(DNS),将主机名称翻译成对映的 IP 地址。
DNS 是一个联机分布式数据库,采用 C/S 架构。大多数的 DNS 解析都在本地进行,只有当本地没有相关记录时才会通过互联网进行通信,解析。
DNS 解析
一次域名解析的过程可以概括为以下几个步骤:
- 程序 A 需要解析 example.com, A 调用解析程序 Resolver
- 解析程序将域名放入 DNS 请求报文中,以 UDP 数据报方式发给本地域名服务器
- 本地域名服务器中有相关记录,将 IP 放在回答报文中返回,如果没有,进行 4
- 本地域名服务器向其他域名服务器发起请求,获取到 IP 地址,然后返回
域名的解析方法有两种,
一是递归查询(recursive query),这种查询发生在本地域名服务器没有相关的域名记录时,他会成为域名查询的一个客户,向其他根域名服务器发起请求,而不是让主机进行下一次请求。所以,递归查询的结果要么是查询到对应的 IP,要么返回一个错误值,即指定的域名不存在。
二是迭代查询(iterative query),对根域名来说,当根域名服务器收到查询请求时,要么给出对应的 IP,要么返回本地域名服务器进行下一步查询的服务器的地址,之后本地域名服务器再进行后续的查询,通常返回的是一个顶级域名服务器。对于顶级域名服务器来说,要么返回 IP,要么返回进行下一步查询的权限域名服务器。
通过 dig 工具可以查看到具体的解析过程。
域名结构
域名的数据结构是一棵树,根节点没有名字,根域名的子节点为顶级域名,如 com,org,net等。
1 |
|
域名由 label 序列组成,每个 label 之间使用“ . ”隔开,如 www.example.com,级别最低的域名写在最左边,级别最高的域名写在最右边。
域名由字母数字以及连字符组成,不区分大小写,EXAMPLE 与 example 是等效的。
域名服务器
根域名服务器
最高层次的域名服务器,记录了所有顶级域名服务器的域名和IP地址,当本地域名服务器无法解析时,首先向根域名服务器发起查询请求。
根域名服务器只使用 13 个不同 IP 地址的域名,分别是 a.rootservers.net,b.rootservers.net … m.rootservers.net。
顶级域名服务器
负责管理在该顶级域名服务器注册的所有二级域名
权限域名服务器
负责一个区的域名服务器。
本地域名服务器
又称默认域名服务器,离用户近,一般不超过几个路由的距离。