域名的形式
域名是一个有层次的结构,是一串用“.”分隔的多个单词,最右边的被称为“*域名”,然后是“二级域名”,层级关系向左依次降低。
最左边的是主机名,通常用来表明主机的用途,比如“www”表示提供万维网服务、“mail”表示提供邮件服务,不过这也不是绝对的,名字的关键是要让我们容易记忆。
看一下极客时间的域名“time.geekbang.org”,这里的“org”就是*域名,“geekbang”是二级域名,“time”则是主机名。使用这个域名,DNS 就会把它转换成相应的 IP 地址,你就可以访问极客时间的网站了。
域名不仅能够代替 IP 地址,还有许多其他的用途。
在 Apache、Nginx 这样的 Web 服务器里,域名可以用来标识虚拟主机,决定由哪个虚拟主机来对外提供服务,比如在 Nginx 里就会使用“server_name”指令:
最左边的是主机名,通常用来表明主机的用途,比如“www”表示提供万维网服务、“mail”表示提供邮件服务,不过这也不是绝对的,名字的关键是要让我们容易记忆。
看一下极客时间的域名“time.geekbang.org”,这里的“org”就是*域名,“geekbang”是二级域名,“time”则是主机名。使用这个域名,DNS 就会把它转换成相应的 IP 地址,你就可以访问极客时间的网站了。
域名不仅能够代替 IP 地址,还有许多其他的用途。
在 Apache、Nginx 这样的 Web 服务器里,域名可以用来标识虚拟主机,决定由哪个虚拟主机来对外提供服务,比如在 Nginx 里就会使用“server_name”指令:
域名本质上还是个名字空间系统,使用多级域名就可以划分出不同的国家、地区、组织、公司、部门,每个域名都是独一无二的,可以作为一种身份的标识。
而 XML 里使用 URI 作为名字空间,也是间接使用了域名。
域名的解析
就像 IP 地址必须转换成 MAC 地址才能访问主机一样,域名也必须要转换成 IP 地址,这个过程就是“域名解析”。
域名服务器
如果采用上述的树状结构,每一个节点都采用一个域名服务器,这样会使得域名服务器的数量太多,使域名服务器系统的运行效率降低。所以在DNS
中,采用划分区的方法来解决。
一个服务器所负责管辖(或有权限)的范围叫做区zone
。各单位根据具体情况来划分自己管辖范围的区。但在一个区中的所有节点必须是能够连通的。每一个区设置相应的权限域名服务器,用来保存该区中的所有主机到域名IP地址的映射。总之,DNS
服务器的管辖范围不是以“域”为单位,而是以“区”为单位。区是DNS
服务器实际管辖的范围。区<=
域。
一般是有着:本地域名服务器 ->
权限域名服务器 ->
*域名服务器 ->
根域名服务器(从小到大)
域名解析过程
先看两个概念:
- 递归查询:本机向本地域名服务器发出一次查询请求,就静待最终的结果。如果本地域名服务器无法解析,自己会以 DNS 客户机的身份向其它域名服务器查询,直到得到最终的IP地址告诉本机
- 迭代查询:本地域名服务器向根域名服务器查询,根域名服务器告诉它下一步到哪里去查询,然后它再去查,每次它都是以客户机的身份去各个服务器查询。
具体的流程可描述如下:
- 主机
10.74.36.90
先向本地域名服务器10.74.1.11
进行递归查询 - 本地域名服务器采用迭代查询,向一个根域名服务器进行查询
- 根域名服务器告诉本地域名服务器,下一次应该查询的*域名服务器
dns.me
的IP
地址 - 本地域名服务器向*域名服务器
dns.me
进行查询 - *域名服务器
me
告诉本地域名服务器,下一步查询权限服务器dns.jocent.me
的IP
地址 - 本地域名服务器向权限服务器 ```dns.jocent.me`进行查询
- 权限服务器
dns.jocent.me
告诉本地域名服务器所查询的主机的IP
地址 - 本地域名服务器最后把查询结果告诉
10.74.36.90
。
一般 DNS 缓存放浏览器还是放系统
计算机中 DNS 记录在本地也有两种缓存方式:浏览器缓存和操作系统(OS)缓存。在浏览器中访问的时候,会优先访问浏览器缓存,如果未命中则访问 OS 缓存,最后再访问递归 DNS 服务器,然后递归 DNS 服务器会递归式的查找域名记录,然后返回结果。