【计算机网络笔记四】应用层(一)DNS域名解析

因特网的域名空间是一棵倒着生长的树,各级域名由其上一级域名管理机构管理

【计算机网络笔记四】应用层(一)DNS域名解析_第1张图片

这种按等级管理的命名方法便于维护名字的唯一性,并且容易设计出一种高效的域名查询机制。

注意:域名只是个逻辑概念,并不代表计算机所在的物理地点

域名分区管理

根域名服务器通常并不直接对域名进行解析,而是返回该域名所属顶级域名的顶级域名服务器的 IP 地址。

DNS 顶级域名服务器

【计算机网络笔记四】应用层(一)DNS域名解析_第2张图片

一个顶级域名下会有非常多的子域名,一台 DNS 服务器根本存储不下这些域名及其 IP 的映射关系。采用划分区的办法,一台 DNS 服务器负责管辖的范围叫做,管理一个区的 DNS 服务器称为权限域名服务器

DNS 权限域名服务器

每个区都有一个域名服务器,称为权限域名服务器,也有叫“权威域名服务器”的。

树状结构的 DNS 域名服务器

【计算机网络笔记四】应用层(一)DNS域名解析_第3张图片

根域名服务器是最高层次的域名服务器,也是最重要的域名服务器,根域名服务器都知道所有的顶级域名服务器的 IP 地址。

顶级域名服务器负责管理在该顶级域名服务器注册的所有二级域名,当收到 DNS 查询请求时,就给出相应的回答(可能是最后的结果,也可能是某个权限域名服务器的 IP 地址

当一个权限域名服务器还不能给出最后的查询回答时,就会告诉发出查询请求的 DNS 客户,下一步应当找哪一个权限域名服务器。

本地域名服务器

本地域名服务器并不属于域名服务器层次结构。

当一个主机发出 DNS 查询请求时,这个查询请求报文就发送给本地域名服务器。

域名的解析过程

递归查询

递归查询:如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向其他根域名服务器继续发出查询请求报文(即替该主机继续查询)

  • 主机向本地域名服务器的查询一般都是采用递归查询

  • 本地域名服务器向根域名服务器的查询通常是采用迭代查询

迭代查询

  • ① 主机先向其本地域名服务器进行递归查询。
  • ② 本地域名服务器采用迭代查询。它先向根域名服务器查询。
  • ③ 根域名服务器告诉本地域名服务器,下一次应查询的 com 顶级域名服务器的 IP 地址。
  • ④ 本地域名服务器向 com 顶级域名服务器进行查询。
  • ⑤ 顶级域名服务器告诉本地域名服务器,下一次应查询的权限域名服务器的 IP 地址。
  • ⑥ 本地域名服务器向权限域名服务器进行查询
  • ⑦ 权限域名服务器告诉本地域名服务器,所查询的主机的 IP 地址。
  • ⑧ 本地域名服务器最后把查询结果告诉主机

DNS 进程的请求在传输层使用 UDP 协议,默认端口号是 53 (熟知端口号),以上 8 个步骤总共需要使用 8 个 UDP 用户数据报的报文。

DNS 缓存

域名到 IP 的映射关系一般不经常变,所以我们可以使用缓存来优化 DNS 查询性能。

缓存可以减少根域名服务器的负荷,减少因特网上 DNS 查询报文的数量。

缓存中的每个项目也必须要有生命周期的,因为域名到 IP 的映射关系是会变的,比如可以 10 分钟清除下缓存,去拿取最新的域名映射的 IP。

主机中的 DNS 缓存

不但在本地域名服务器中需要缓存,在主机中也很需要。

许多主机在启动时从本地域名服务器下载名字和地址的全部数据库,维护存放自己最近使用的域名的缓存中,并且只在从缓存中找不到名字时才使用域名服务器。

维护本地域名服务器数据库的主机,应该定期地检查域名服务器以获取新的映射信息,而且主机必须从缓存中删掉无效的项。

由于域名改动并不频繁,大多数网点不需花太多精力就能维护数据库的一致性。

总结

  • 根域名服务器:是最高层次的域名服务器,根域名服务器都知道所有顶级域名服务器的 IP 地址, 根域名服务器通常不直接对域名解析,而是返回该域名所属的顶级域名服务器的 IP 地址

  • 顶级域名服务器:管理所有在该顶级域名服务器注册的二级域名,收到 DNS 请求时,可能返回解析结果也可能返回某个权限域名服务器的 IP 地址

  • 权限域名服务器:管理顶级域名下的不同划分区的域名映射,当一个权限域名服务器还不能给出最终结果时,会告诉客户端下一步应该找哪一个权限域名服务器

  • 本地域名服务器:本地服务器不属于域名服务器的层次结构,但是它对域名系统非常重要。当一个主机发出 DNS 请求时,请求报文就先发送给本地域名服务器。

域名解析过程:

  • 主机向本地域名服务器的查询一般都是采用递归查询。所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询的域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,继续向其它根域名服务器发出查询请求报文(即替主机继续查询)。因此,递归查询返回的查询结果或者是所要查询的 IP 地址,或者是报错,表示无法查询到所需的 IP 地址。

  • 本地域名服务器向根域名服务器的查询通常采用迭代查询。迭代查询的特点:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地服务器:“你下一步应当向哪一个域名服务器进行查询”,然后让本地服务器进行后续的查询。

一次域名查询请求的基本流程:

  1. 主机向本地域名服务器进行递归查询
  2. 本地域名服务器向根域名服务器进行迭代查询
  3. 根域名服务器告诉本地域名服务器,下一步要查询的顶级域名服务器的 IP 地址
  4. 本地域名服务器向顶级域名服务器查询
  5. 顶级域名服务器要么返回查询的 IP 地址,要么返回下一步要查询的权限域名服务器的 IP 地址
  6. 本地域名服务器向权限域名服务器进行查询
  7. 权限域名服务器要么返回查询的 IP 地址,要么返回下一步要查询的权限域名服务器的 IP 地址
  8. 本地域名服务器最后把查询结果返回给主机

DNS请求在传输层使用 UDP 协议,以上 8 步需要使用 8 个UDP报文。

DNS缓存:在主机以及本地域名服务器中都有域名缓存,当缓存命中时,直接读取缓存的结果,否则才真正的向根服务器发出 DNS 请求报文。

Android 可以在 ApplicationonCreate()方法中设置 DNS 缓存的时间,通过设置系统属性值"networkaddress.cache.ttl"来实现。

你可能感兴趣的:(计算机网络学习笔记,计算机网络,DNS域名解析,DNS域名服务器层次结构,DNS缓存)