一.DNS出现1. 主机名引入背景TCP/IP 网络通信依赖 IP 地址但 IP 地址难记因此引入主机名作为易记的标识网络通信可直接使用主机名替代冗长的 IP 地址。2. hosts 文件本地静态解析方案核心功能通过本地文件存储主机名与 IP 地址的映射关系实现主机名到 IP 地址的本地转换。解析逻辑访问主机时系统优先查询本地 hosts找到对应 IP 则发送报文未找到则访问失败。特点本地文件查找响应速度快无需联网仅适配小型本地网络适合存储本地网络的主机映射信息。致命缺陷需单独手工更新每台主机的 hosts网络规模扩大后多主机同步更新几乎无法实现维护成本极高。3. DNS 域名系统分布式动态解析方案产生目的彻底解决 hosts 文件维护困难的问题。核心功能实现主机名域名与 IP 地址的双向转换适配大规模网络环境。核心优势无论网络规模多大均可在小范围内集中管理自动完成解析同步避免了逐台主机手动维护的弊端。4. 核心对比维度hosts 文件DNS 域名系统解析方式本地静态映射分布式动态查询维护方式单主机手动更新集中式管理、自动同步适用规模小型本地网络大型网络含互联网响应速度极快稍慢需访问 DNS 服务器扩展性差强二.DNS介绍DNS全称 Domain Name System域名系统。采用 client/server客户端 / 服务器模式DNS clientDNS 客户端发出查询请求DNS serverDNS 服务器响应请求。DNS client 通过查询 DNS server 获得主机的 IP 地址进而完成后续的 TCP/IP 通信过程。1.DNS域名域名本质是一种分层的名称用来识别主机或机构。分布式系统DNS 是分布式数据库单台服务器无法存全量信息解析由多台域名服务器共同完成。工作方式各站点维护自己的数据库并提供查询服务DNS 定义了客户端 - 服务器、服务器间的通信协议。高可用分布式设计让单个服务器故障不会影响整个系统避免了单点故障。2.DNS域名组成DNS 域的本质是一种管理范围的划分最大的域是根域向下可以划分为顶级域、二级域、三级域、四级域等。相对应的域名是根域名、顶级域名、二级域名、三级域名等。不同等级的域名使用点号分隔级别最低的域名写在最左边而级别最高的域名写在最右边。举个例子网站域名 http://www.tsinghua.edu.cn 中从右到左开始cn 是顶级域名代表中国edu 是二级域名代表教育机构tsinghua 是三级域名表示清华大学www 则表示三级域名中的主机并提供了 web 服务。除了 www 主机外常见的主机还有 arch、sm、mail域名如下每一级的域名都由英文字母和数字组成域名不区分大小写长度不能超过 63 字节一个完整的域名不能超过 255 个字节。根域名用 “.”点表示。1. FQDN完全合格域名定义能在互联网上唯一标识一台设备的完整域名格式上以点结尾比如 mail.tsinghua.edu.cn.末尾的点代表根域名。作用接入互联网的主机、服务器等设备都可以用一个唯一的 FQDN 来定位就像网络世界里的 “精确门牌号”。2. 非合格域名定义不完整的域名没有包含从根域名开始的所有层级比如只写 mail。解析逻辑系统会自动把当前所在的区域域名补到它后面把它变成完整的 FQDN。例子在 tsinghua 域内的主机上只输入 mail本地解析器会自动补全为 mail.tsinghua.edu.cn这就是 FQDN再去 DNS 服务器查询这个 FQDN 对应的 IP 地址3.DNS域名空间根域名域名空间结构像是一棵倒过来的树也叫做树形结构。根域名就是树根root域名空间表往下是这棵树的各层枝叶。根域名的下一层叫顶级域名顶级域名包括三大类顶级域名国家顶级域名国家顶级域名采用 ISO3166 的规定。比如.cn表示中国.us表示美国.uk表示英国等在使用的国家顶级域名大约在 200 个左右。国际顶级域名国际顶级域名采用.int。国际性的组织可以在.int下注册。通用顶级域名二级域名顶级域名下面是二级域名。国家顶级域名下注册的二级域名均由国家自行确定。我国二级域名分为类别域名和行政域名两大类类别域名如.com、.edu、.gov等分别代表不同的机构行政域名如.bj表示北京.sh表示上海代表我国各省、自治区及直辖市等。二级域名下面是三级域名、四级域名等。命名树上任何一个节点的域名就是从这个节点到最高层的域名串起来中间以 “.” 分隔。在域名结构中节点在所属域中的主机名标识可以相同但是域名必须不同。比如清华大学和新浪公司下都有一台主机的标识是mail但是两者的域名却是不同的前者为http://mail.tsinghua.edu.cn而后者为http://mail.sina.com.cn。三.DNS域名解析将域名转换为对应的 IP 地址的过程叫做域名解析。在域名解析过程中DNS client 主机将调用解析器Resolver向 DNS server 发出请求DNS server 完成域名解析。域名解析是按照 DNS 分层结构的特点自顶向下进行的。但是如果每一个域名解析都从根域名服务器开始那么根域名服务器有可能无法承载海量的流量。在实际应用中大多数域名解析都是在本地域名服务器完成。通过合理设置本地域名服务器由本地域名服务器负责大部分的域名解析请求提高域名解析效率。1.DNS解析器从应用程序的角度看访问 DNS 是通过一个叫解析器Resolver的应用程序来完成的。发送一个 TCP 或 UDP 数据包之前解析器必须将域名主机名转换为 IP 地址。一个解析器至少要注册一个域名服务器的 IP 地址。通常它至少包括本地域名服务器的 IP 地址。2.DNS域名服务器DNS 域名空间的层次结构允许不同的域名服务器管理域名空间的不同部分。域名服务器是指管理域名的主机及软件它可以管理所在分层的域。其所管理的分层叫做区域zone。一个 zone 是 DNS 域名空间的一棵子树它可以单独管理而不受其它 zone 影响。每层都设有一个域名服务器。根所设置的 DNS 叫做根域名服务器它对 DNS 的检索数据功能起着至关重要的作用。根域名服务器中注册了顶级域名服务器的 IP 地址。如果想要新增一个一级域名或者修改已有的顶级域名就要在根域名服务器中进行新增或变更。类似的顶级域名服务器中注册了二级域名服务器的 IP 地址。如果域名服务器下面没有其它分层就可以自由地指定主机名称。如果想重新设置域名服务器的 IP 地址或修改域名必须在上一层的域名服务器中进行修改。域名和域名服务器都需要按照分层进行设置。如果域名服务器出现故障那么针对这个域的 DNS 查询就无法正常工作。因此为了提高可用性至少设置两台域名服务器。一旦第一台域名服务器无法提供查询时就会自动转到第二个甚至第三个域名服务器上进行。3.DNS域名服务器类型本地域名服务器互联网接入服务运营商或者一个大的网络机构像公司、大学等都有一台或多台可以自行管理的域名服务器这类域名服务器称为本地域名服务器也称为默认域名服务器。本地域名服务器离客户端较近。当一个 DNS 客户端发出 DNS 查询时首先送到本地域名服务器。如果本地域名服务器数据库中有对应的域名信息会将查询的域名转换为 IP 地址返回客户端。如果没有它会以DNS 客户端的身份向根域名服务器进行查询。根域名服务器收到本地域名服务器的查询后会返回相关域名服务器的 IP 地址本地域名服务器再向相关域名服务器发送查询请求。根域名服务器通常根域名服务器用来管理顶级域本身并不对域名进行解析但它知道相关域名服务器的 IP 地址。IPv4 根域名服务器全球有 13 台主机名分别为 A~M。1 台为主根服务器在美国其余 12 个均为辅根服务器其中 9 个在美国2 个在欧洲位于英国和瑞典1 台在亚洲位于日本。所有的域名服务器都必须注册根域名服务器的 IP 地址因为 DNS 根据 IP 地址进行检索时需要按顺序从根域名服务器开始。授权域名服务器互联网上的主机在域名服务器上进行注册这个域名服务器就是主机的授权域名服务器。通常主机的授权域名服务器就是本地域名服务器。实际上主机会有两个授权域名服务器防止单点故障。授权域名服务器上有注册主机域名与 IP 地址的映射信息当查询注册主机域名时它会返回相应主机的 IP 地址。如果主机域名和 IP 地址需要进行变更只需要在授权域名服务器处理即可不用再向其它域名服务器进行申请或报告。主域名服务器主域名服务器是完成一个或多个区域域名解析工作的主要域名服务器通常也是一个或多个区域的授权域名服务器。主域名服务器有区域内主机地址信息的源数据文件并且是区域传送中区域数据的唯一来源。辅助域名服务器辅助域名服务器可以协助主域名服务器提供域名查询服务在主机很多的情况下可以有效分担主域名服务器的压力。辅助域名服务器也有冗余功能当主域名服务器故障时辅助域名服务器能够在数据有效期内继续为主机提供域名解析服务。一台主域名服务器可以有多台辅助域名服务器一台辅助域名服务器也可以是其它区域的主域名服务器。辅助域名服务器中包含区域内主机地址数据的授权信息通过区域配置文件副本的方式存储。辅助域名服务器也是区域的授权域名服务器可以完成本区域内域名查询的授权回答。辅助域名服务器并不建立数据文件它获得区域数据的唯一途径就是通过区域传送的方式从主域名服务器上获得区域数据的最新副本。获得数据副本的方式有两种第一种是辅助域名服务器定期主动获得主域名服务器的副本或更新副本中的数据。第二种是主域名服务器在区域数据发生变化时及时通知辅助域名服务器更新副本中的数据。4.DNS域名完整解析过程DNS 客户端进行域名 http://www.tsinghua.edu.cn 的解析过程如下DNS 客户端向本地域名服务器发送请求查询 http://www.tsinghua.edu.cn 主机的 IP 地址本地域名服务器查询数据库发现没有域名为 http://www.tsinghua.edu.cn 的主机于是将请求发送给根域名服务器根域名服务器查询数据库发现没有这个主机域名记录但是根域名服务器知道 cn 域名服务器可以解析这个域名于是将 cn 域名服务器的 IP 地址返回给本地域名服务器本地域名服务器向 cn 域名服务器查询 http://www.tsinghua.edu.cn 主机的 IP 地址cn 域名服务器查询数据库也没有相关记录但是知道 http://edu.cn 域名服务器可以解析这个域名于是将 http://edu.cn 域名服务器的 IP 地址返回给本地域名服务器本地域名服务器再向 http://edu.cn 域名服务器查询 http://www.tsinghua.edu.cn 主机 IP 地址http://edu.cn 域名服务器查询数据库也没有相关记录但是知道 http://tsinghua.edu.cn 域名服务器可以解析这个域名于是将 http://tsinghua.edu.cn 的域名服务器 IP 地址返回给本地域名服务器本地域名服务器向 http://tsinghua.edu.cn 域名服务器查询 http://www.tsinghua.edu.cn 主机的 IP 地址http://tsinghua.edu.cn 域名服务器查询数据库发现有主机域名记录于是给本地域名服务器返回 http://www.tsinghua.edu.cn 对应的 IP 地址最后本地域名服务器将 http://www.tsinghua.edu.cn 的 IP 地址返回给客户端整个解析过程完成。四.DNS传输层协议DNS 域名服务器使用的端口号是 53并且同时支持 UDP 和 TCP 协议。为什么同时使用两种协议呢因为 DNS 响应报文中有一个删减标志位用 TC 表示。当响应报文使用 UDP 封装且报文长度大于512 字节时那么服务器只返回前 512 字节同时 TC 标志位置位表示报文进行了删减。当客户端收到 TC 置位的响应报文后将采用 TCP 封装查询请求。DNS 服务器返回的响应报文长度大于 512 字节。UDP 报文的最大长度是 512 字节最多可以包含 13 台根域名服务器数据因此 IPv4 根域名服务器只能限制在 13 个且每个服务器使用单个字母命名也是 IPv4 根服务器是从 A~M 命名的原因。当辅助域名服务器启动时将从主域名服务器执行区域传送。正常运行过程中辅助域名服务器也会定时向主域名服务器进行查询以便了解主域名服务器数据是否发生变化。如果有变化将执行一次区域传送。因为区域传送的数据多所以传送的数据采用 TCP 封装。因此UDP 用于 client 和 server 的查询和响应TCP 用于主从 server 之间的传送。五.DNS查询方式DNS 域名解析包括两种查询query方式一种是递归查询另一种是迭代查询。1.递归查询DNS 服务器如果不能直接响应解析请求它将继续请求其它的 DNS 服务器直到查询域名解析的结果。查询的结果可以是域名主机的 IP 地址或者是域名无法解析。无论哪种结果DNS 服务器都会将结果返回给客户端。举个例子当本地域名服务器接收了客户端的查询请求本地域名服务器将代表客户端来找答案而在本地域名服务器执行工作时客户端只是等待直到本地域名服务器将最终查询结果返回客户端。2.迭代查询如果 DNS 服务器查不到相应记录会向客户端返回一个可能知道结果的域名服务器 IP 地址由客户端继续向新的服务器发送查询请求。对域名服务器的迭代查询只得到一个提示则继续查询。举个例子本地域名服务器发送请求到根域名服务器根域名服务器并没有相应记录它只是给本地域名服务器返回一个提示引导本地域名服务器到另一台域名服务器进行查询。客户端在查询 IP 地址时向本地域名服务器进行递归查询。如果本地域名服务器的数据库有相应数据则直接返回相应数据。如果没有则本地域名服务器向根域名服务器进行迭代查询。从根开始对这棵树按照顺序进行遍历直到找到指定的域名服务器并由这个域名服务器返回相应的数据。客户端和本地域名服务器会将收到的信息保存在缓存里这样可以减少每次查询时的性能消耗。3.DNS反向查询在 DNS 查询中客户端希望知道域名对应的 IP 地址这种查询称为正向查询大部分的 DNS 查询都是正向查询。与正向查询对应的是反向查询它允许 DNS 客户端通过 IP 地址查找对应的域名。为实现反向查询在 DNS 标准中定义了特色域 in-addr.arpa 域并保留在域名空间中以便执行反向查询。为创建反向域名空间in-addr.arpa 域中的子域是按照 IP 地址相反的顺序构造的。举个例子http://www.tsinghua.edu.cn 的 IP 地址是 166.111.4.100那么在 in-addr.arpa 域中对应的节点就是 100.4.111.166。六.DNS应用场景域名解析分为动态域名解析和静态域名解析。在解析域名时首先采用静态域名解析如果静态解析不成功再采用动态域名解析。1.静态域名解析静态域名解析是通过静态域名解析表进行的手动建立域名和 IP 地址之间的对应关系表该表的作用类似于 Windows 操作系统下的 hosts 文件可以将一些常用的域名放入表中。当 DNS client 需要域名所对应的 IP 地址时即到静态域名解析表中去查找指定的域名从而获得所对应的 IP 地址提高域名解析的效率。2.动态域名解析动态域名解析需要专用的域名服务器DNS server运行域名解析服务器程序提供域名到 IP 地址的映射关系负责接收客户端DNS client提出的域名解析请求。3.DNS代理在使用了DNS 代理DNS proxy功能的组网中DNS client 将 DNS 请求报文直接发送给 DNS proxy。DNS proxy 会先查找本地域名解析表如果未查询到对应的解析表项会将 DNS 请求报文转发给 DNS Server并在收到 DNS server 的应答报文后将其返回给 DNS client从而实现域名解析。因此当 DNS server 的地址发生变化时只需改变 DNS proxy 上的配置无需逐一改变域网内每个 DNS client 的配置从而简化了网络管理。