1.域名的形式

域名是一个有层次的结构,是一串用“.”分隔的多个单词,最右边的被称为“顶级域名”,然后是“二级域名”,层级关系向左依次降低。

最左边的是主机名,通常用来表明主机的用途,比如“www”表示提供万维网服务、“mail”表示提供邮件服务,不过这也不是绝对的,名字的关键是要让我们容易记忆。

2.域名的解析

2.1DNS核心系统

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

  • 根域名服务器(Root DNS Server):管理顶级域名服务器,返回“com”“net”“cn”等顶级域名服务器的 IP 地址;
  • 顶级域名服务器(Top-level DNS Server):管理各自域名下的权威域名服务器,比如 com 顶级域名服务器可以返回 apple.com 域名服务器的 IP 地址;
  • 权威域名服务器(Authoritative DNS Server):管理自己域名下主机的 IP 地址,比如 apple.com 权威域名服务器可以返回 www.apple.com 的 IP 地址。

DNS域名解析 - 图1

在这里根域名服务器是关键,它必须是众所周知的,否则下面的各级服务器就无从谈起了。

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

例如,你要访问“www.apple.com”,就要进行下面的三次查询:

  • 访问根域名服务器,它会告诉你“com”顶级域名服务器的地址;
  • 访问“com”顶级域名服务器,它再告诉你“apple.com”域名服务器的地址;
  • 最后访问“apple.com”域名服务器,就得到了“www.apple.com”的地址。

2.2如何减轻域名解析的压力

缓存。

首先,许多大公司、网络运行商都会建立自己的 DNS 服务器,作为用户 DNS 查询的代理,代替用户访问核心 DNS 系统。这些“野生”服务器被称为“非权威域名服务器”,可以缓存之前的查询结果,如果已经有了记录,就无需再向根服务器发起查询,直接返回对应的 IP 地址。

其次,操作系统里也会对 DNS 解析结果做缓存,如果你之前访问过“www.apple.com”,那么下一次在浏览器里再输入这个网址的时候就不会再跑到 DNS 那里去问了,直接在操作系统里就可以拿到 IP 地址。

另外host文件,操作系统里还有一个特殊的“主机映射”文件,通常是一个可编辑的文本,在 Linux 里是“/etc/hosts”,在 Windows 里是“C:\WINDOWS\system32\drivers\etc\hosts”,如果操作系统在缓存里找不到 DNS 记录,就会找这个文件。

有了这些缓存,方便了用户,也减轻了各级 DNS 服务器的压力,效率就大大提升了。

3.基于域名的负载均衡

有两种实现方式:

第一种方式,因为域名解析可以返回多个 IP 地址,所以一个域名可以对应多台主机,客户端收到多个 IP 地址后,就可以自己使用轮询算法依次向服务器发起请求,实现负载均衡。

第二种方式,域名解析可以配置内部的策略,返回离客户端最近的主机,或者返回当前服务质量最好的主机,这样在 DNS 端把请求分发到不同的服务器,实现负载均衡。

4.思考:

在浏览器地址栏里随便输入一个不存在的域名,比如就叫“www. 不存在.com”,试着解释一下它的 DNS 解析过程。

如果因为某些原因,DNS 失效或者出错了,会出现什么后果

1:在浏览器地址栏里随便输入一个不存在的域名,比如就叫“www. 不存在.com”,试着解释一下它的 DNS 解析过程。

第一:拿着域名去浏览器缓存中查找,这里有些疑问,浏览器中缓存在哪里?过期时间大概多久?过期机制是什么?
第二:去操作系统缓存中去查找,同样的疑问,缓存在哪里?过期时间多久?过期机制是什么?怎么确认一下?
第三:去hosts文件中查找,这个文件还好进程修改,那么每个操作系统这个文件都必须在默认的路径下吗?否则就需要全部文件遍历一下啦?
第四:去非权威DNS服务器中查找,到此这些都可以认为是一种缓存思想的运用,把域名和IP的映射关系信息放在更快的存储设备之上,把这份信息放在离用户更近的地方,来加速用户通过域名获取IP的速度。
第五:去根域名DNS服务器中查找,管理顶级域名服务器,返回“com”“net”“cn”等顶级域名服务器的 IP 地址;注意,此时仅拿着根域名去查找,下面的查找过程有一定的层次结构,这样不仅查找的信息少存储的信息也会少,速度也会更快一些
第六:去顶级域名DNS服务器中查找,此时拿的信息是“com”,查找 “不存在.com” ,确实查不到,然后就抛出异常,逐级返回了,最后把找不到的提升信息给到用户——无法访问此网站,找不到www.不存在.com的服务器IP地址
第七:假设第六步找到了,则会继续去二级域名DNS服务器去查找,根据“不存在.com”找“ww.不存在.com”
第八:去权威DNS服务器中找到“ww.不存在.com”对应的IP地址
第九:然后返回,在返回的过程中会更新操作系统缓存,浏览器缓存,不知道非权威DNS服务器中的域名和IP映射信息是怎么进去的,是定时加载嘛?

综合:域名解析的过程

浏览器缓存 -> 操作系统缓存 -> hosts 文件 -> 本地域名服务器 -> 根域名服务器 -> 顶级域名服务器 -> 权威域名服务器
客户端向本地域名服务器获取,是递归查询
本地域名服务器向根域名服务器获取,可以是递归也可是迭代
递归就是你交给别人,让别人查到,在返回给你
迭代就是你找别人要,他叫你去别的地方找

2:如果因为某些原因,DNS 失效或者出错了,会出现什么后果?
会出现“无法访问此网站,找不到www.XXX.com的服务器IP地址”