DNS域名系统有哪些门道?

1,211 阅读4分钟

域名的形式

域名例子:https://juejin.cn/https://www.baidu.com/

域名是一个有层次的结构,是一串用 . 分隔的多个单词最右边的被称为“顶级域名”,然后是“二级域名”,层级关系向左依次降低;最左边的是主机名,通常用来表明主机的用途,比如“ www ”表示提供万维网服务、“ mail ”表示提供邮件服务。

域名本质上还是个名字空间系统,使用多级域名就可以划分出不同的国家、地区、组织、公司、部门,每个域名都是独一无二的,可以作为一种身份的标识。

域名的解析

就像IP地址要转换成MAC地址才能访问主机一样,域名也必须要转换成IP地址,这个过程叫“域名解析”。

DNS的核心系统是一个三层的、分布式服务,基本对应域名的机构:

  1. 根域名服务器(Root DNS Server):管理顶级域名服务器,返回“com”“net”“cn”等顶级域名服务器的 IP 地址;目前全世界共有 13 组根域名服务器,又有数百台的镜像,保证一定能够被访问到
  2. 顶级域名服务器(Top-level DNS Server):管理各自域名下的权威域名服务器,比如 com 顶级域名服务器可以返回 apple.com 域名服务器的 IP 地址
  3. 权威域名服务器(Authoritative DNS Server):管理自己域名下主机的 IP 地址,比如 apple.com 权威域名服务器可以返回 www.apple.com 的 IP 地址

image

有了这个系统以后,任何一个域名都可以在这个树形结构里从顶至下进行查询,就像是把域名从右到左顺序走了一遍,最终就获得了域名对应的 IP 地址

除了核心DNS系统外还有两种手段来减轻域名解析的压力,基本思路是“缓存”:

  • 非权威域名服务器:大公司、网络运行商自己建立的DNS服务器,作为用户DNS查询的代理,代替用户访问核心DNS系统,可以缓存之前的查询结果,有记录时无需向根服务器发起查询,直接返回对应的IP地址,如Google的'8.8.8.8',Microsoft的'4.2.2.1'等
  • 操作系统也会对DNS解析的结果做缓存,之前访问过的网址可以直接在操作系统里拿到IP地址;如果缓存里找不到,还可以去'**hosts'**文件里面查找,它是一个特殊的“主机映射”文件,位置在“C:\WINDOWS\system32\drivers\etc\hosts”

image

DNS解析过程

浏览器DNS缓存 -> 操作系统缓存 -> hosts文件 -> 非权威域名服务器 -> 根域名服务器 -> 顶级域名服务器 -> 权威域名服务器

域名“新玩法”

  • 重定向;因为域名代替了IP地址,所以可以让对外服务的域名不变,而主机的IP地址任意变动
  • 名字服务器;因为域名是一个命名空间,可以使用bind9等开源软件搭建一个在内部使用的DNS,作为名字服务器
  • 基于域名实现的负载均衡;有两种可以混用的方式:
  1. 因为域名解析可以返回多个 IP 地址,所以一个域名可以对应多台主机,客户端收到多个 IP 地址后,就可以自己使用轮询算法依次向服务器发起请求,实现负载均衡
  2. 域名解析可以配置内部的策略,返回离客户端最近的主机,或者返回当前服务质量最好的主机,这样在 DNS 端把请求分发到不同的服务器,实现负载均衡
  • 还有一些不怀好意的 DNS,也可以在域名这方面“做手脚”
  1. 域名屏蔽”,对域名直接不解析,返回错误,让你无法拿到 IP 地址,也就无法访问网站
  2. 域名劫持”,也叫“域名污染”,你要访问 A 网站,但 DNS 给了你 B 网站

小结

  • 域名使用字符串来代替 IP 地址,方便用户记忆,本质上一个名字空间系统
  • DNS 就像是我们现实世界里的电话本、查号台,统管着互联网世界里的所有网站,是一个“超级大管家”
  • DNS 是一个树状的分布式查询系统,但为了提高查询效率,外围有多级的缓存
  • 使用 DNS 可以实现基于域名的负载均衡,既可以在内网,也可以在外网