【重拾网络】DNS


title: 【重拾网络】DNS
date: 2017-07-20 21:55:21
tags: 网络
categories: 网络


DNS 是什么

了解网络的同学应该都是知道 DNS的,它提供最基本的从域名到 IP 地址的转换服务。简单可以把 DNS 理解成一个翻译官,这位翻译官每天默默地为我们处理上网请求时域名到 IP 的转换。

上网时每次对域名的请求使用的是 HTTP 协议,而作为翻译官 DNS 发生在HTTP 真实请求之前。尽管 DNS 协议执行在 HTTP 请求之前,但与 HTTP 一样,DNS 也是 TP/IP 协议模型中应用层协议。更具体一点默认使用的是 UDP 的传输方式,端口号为 53 。

补充一下,除了基本的域名到 IP 的转换服务, DNS 还可以提供主机别名,邮件服务器别名,负载均衡功能。

DNS 结构

从功能上来看,DNS 只提供了非常简单的字符串到字符串的转换服务。类似于程序语言中的字典结构就可以完成映射转换。所以在很多网络结构图中 DNS 服务往往被描述成一台服务器,在客户端与服务器请求之前,首先在 DNS 服务器上查询服务器对应的 IP 即可。我们日常的使用中 DNS 也确实扮演了这样一个默默无闻的角色,运行的过程对用户非常透明。

为了使 DNS 可以做到全球范围的高可用,一台简单的服务器肯定是无法满足的。实际上DNS 根据域名的层级也划分出不同的 DNS 层级。

域名层级

域名层级的划分示意:

name schema.jpg

域名的层级结构:

主机名.次级域名.顶级域名.根域名

host.sld.tld.root

以 www.example.com 域名为例,看看域名的划分:

域名 备注
使用的域名 www.example.com 日常真实使用的域名
真正的域名 www.example.com.root .root通常省略
根域名 .root 对所有域名
顶级域名 .com
次顶级域名 .example 用户可注册的
三级域名(主机名) www 用户在自己的域里面为服务器分配的名称

DNS 层级

域名层级结构对应的 DNS 服务结构划分:


structure DNS.jpg

上面 DNS 的层级结构很明显是一个树型的结构,解析的过程就是从根到叶子节点的访问过程。作为基础的网络服务,单节点肯定是不可靠的,所以上图的节点实际中不是孤立存在的,而是由一组服务器构成。例如根节点就对应了全世界 13 台根服务器。

DNS 查询过程

既然树型的 DNS 的结构不能一步获取到最终查询结果,这里就有两种方式处理处理查询过程了:

  • 递归查询

    客户端发出查询请求后,只接受一个准确的查询结果,而不能是查询的中间过程

  • 迭代查询

    客户端发出查询请求后,DNS 服务器不直接回复查询结果,而是告诉客户端另一台 DNS 服务器地址,客户端再向这台 DNS 服务器请求解析,依此循环直到返回查询的结果

两者各有利弊,通常是将两者结合在一起,一个 DNS 的解析大致可以分两个部分:

  1. 客户端向 Local DNS 的请求,通常这部分使用递归请求
  2. Local DNS 的请求,通常这部分使用迭代请求

按照上述规则一个基本的 DNS 解析过程:


dns sresolution.png
  1. 发出域名解析请求
  2. 本机的域名解析器 resolver 程序查询本地缓存和 host 文件中是否为域名的映射关系
  3. 本地解析器向 TCP/IP 参数中设置的首选 DNS 服务器(我们叫它 Local DNS 服务器)发起一个递归的查询请求
  4. 服务器收到查询时
    1. 如果要查询的域名由 Local DNS 服务器负责解析,则返回解析结果给客户机,完成域名解析,且此解析具有权威性
    2. 如果要查询的域名不由 Local DNS 服务器解析,则调用这个 IP 地址映射,完成域名解析,且此解析不具有权威性
  5. 根据 Local DNS 服务器的设置(是否递归)进行查询
    1. 如果是迭代查询,Local DNS 就把请求发至13台 Root DNS
    2. 如果是递归查询,Local DNS 就会把请求转发至上一级 DNS 服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根 DNS 或把转请求转至上上级,以此循环
  6. Root DNS 服务器收到请求后会判断这个域名是谁来授权管理,并会返回一个负责该顶级域名服务器的一个 IP
  7. Local DNS 服务器收到 IP 信息后,将会联系负责 .edu 域的这台服务器
  8. 负责 .edu 域的服务器收到请求后,如果自己无法解析,它就会找一个管理 .edu 域的下一级 DNS 服务器地址给 Local DNS 服务器
  9. 当 Local DNS 服务器收到这个地址后,就会找 googleplex.edu 域服务器
  10. 负责 googleplex.edu 域的服务器接收到请求后,如果自己无法解析,继续找管理 googleplex.edu 域的下一级 DNS 服务器地址给 Local DNS 服务器
  11. 当 Local DNS 服务器收到这个地址后,就会找 compsci.googleplex.edu 域服务器
  12. 最后 compsci.googleplex.edu 域服务器返回需要解析的域名的 IP 地址给 Local DNS 服务器
  13. Local DNS 服务器缓存这个解析结果(同时也会缓存,6、8、10返回的结果)
  14. Local DNS 服务器同时将结果返回给本机域名解析器
  15. 本机缓存解析结果
  16. 本机解析器将结果返回给浏览器
  17. 浏览器通过返回的 IP 地址发起请求

DNS 记录

资源记录:name, value, type, ttl

ttl:记录存活时间

type 分类:

  • A:name:主机域名,value:IP地址
  • NS:name:域,value:域的权威域名解析服务的主机域名
  • CNAME:name:真实域名的别名,value:真实域名
  • MX:value是与name相对应的邮件服务器

其他 DNS 相关

常见的 DNS 功能说明

  • 权威 DNS: 最终决定域名解析结果的服务器,可以在其上配置具体域名的对应解析结果信息
  • 递归 DNS 或本地 DNS:有域名解析结果的决定权,但代理了用户向权威DNS获取域名解析结果的过程,不属于 DNS 层次体系
  • 公共 DNS:全网开放的递归 DNS,不同于一般的本地 DNS 由 ISP 提供

DNS 相关命令

  • dig
  • host
  • nslookup

命令的参考:域名解析之dig,host,nslookup命令

你可能感兴趣的:(【重拾网络】DNS)