域名的形式
域名例子:https://juejin.cn/
、https://www.baidu.com/
域名是一个有层次的结构,是一串用 .
分隔的多个单词,最右边的被称为“顶级域名”,然后是“二级域名”,层级关系向左依次降低;最左边的是主机名,通常用来表明主机的用途,比如“ www
”表示提供万维网服务、“ mail
”表示提供邮件服务。
域名本质上还是个名字空间系统,使用多级域名就可以划分出不同的国家、地区、组织、公司、部门,每个域名都是独一无二的,可以作为一种身份的标识。
域名的解析
就像IP地址要转换成MAC地址才能访问主机一样,域名也必须要转换成IP地址,这个过程叫“域名解析”。
DNS的核心系统是一个三层的、分布式服务,基本对应域名的机构:
- 根域名服务器(Root DNS Server):管理顶级域名服务器,返回“com”“net”“cn”等顶级域名服务器的 IP 地址;目前全世界共有 13 组根域名服务器,又有数百台的镜像,保证一定能够被访问到
- 顶级域名服务器(Top-level DNS Server):管理各自域名下的权威域名服务器,比如 com 顶级域名服务器可以返回 apple.com 域名服务器的 IP 地址
- 权威域名服务器(Authoritative DNS Server):管理自己域名下主机的 IP 地址,比如 apple.com 权威域名服务器可以返回 www.apple.com 的 IP 地址
有了这个系统以后,任何一个域名都可以在这个树形结构里从顶至下进行查询,就像是把域名从右到左顺序走了一遍,最终就获得了域名对应的 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”
DNS解析过程:
浏览器DNS缓存 -> 操作系统缓存 -> hosts文件 -> 非权威域名服务器 -> 根域名服务器 -> 顶级域名服务器 -> 权威域名服务器
域名“新玩法”
- 重定向;因为域名代替了IP地址,所以可以让对外服务的域名不变,而主机的IP地址任意变动
- 名字服务器;因为域名是一个命名空间,可以使用bind9等开源软件搭建一个在内部使用的DNS,作为名字服务器
- 基于域名实现的负载均衡;有两种可以混用的方式:
- 因为域名解析可以返回多个 IP 地址,所以一个域名可以对应多台主机,客户端收到多个 IP 地址后,就可以自己使用轮询算法依次向服务器发起请求,实现负载均衡
- 域名解析可以配置内部的策略,返回离客户端最近的主机,或者返回当前服务质量最好的主机,这样在 DNS 端把请求分发到不同的服务器,实现负载均衡
- 还有一些不怀好意的 DNS,也可以在域名这方面“做手脚”
- 域名屏蔽”,对域名直接不解析,返回错误,让你无法拿到 IP 地址,也就无法访问网站
- 域名劫持”,也叫“域名污染”,你要访问 A 网站,但 DNS 给了你 B 网站
小结
- 域名使用字符串来代替 IP 地址,方便用户记忆,本质上一个名字空间系统
- DNS 就像是我们现实世界里的电话本、查号台,统管着互联网世界里的所有网站,是一个“超级大管家”
- DNS 是一个树状的分布式查询系统,但为了提高查询效率,外围有多级的缓存
- 使用 DNS 可以实现基于域名的负载均衡,既可以在内网,也可以在外网