DNS递归和迭代过程详解

DNS递归和迭代过程详解目录DNS原理解析DNS进化史DNS结构DNS查询流程DNS服务搭建DNS相关软件的安装服务器搭建规划手把手教你搭建基本DNS服务器搭建主DNS服务器搭建从DNS服务器参考文献DNS原理解析DNS进化史etc/hosts–>NIS–>DNS起初域名和ip地址之间的解析都是完全存放在一个名为hosts的文件当中…

大家好,又见面了,我是你们的朋友全栈君。

目录

DNS原理解析

DNS进化史

etc/hosts –> NIS –>DNS
起初域名和ip地址之间的解析都是完全存放在一个名为hosts的文件当中,在这个文件当中我们建立了ip和域名的一一对应的关系,在互联网初期,这样做完全是没有问题的,但是随着网络的发展,网络内的主机越来越多,这个文件会变得越来越大,而且为了保证每台主机都能有这样的解析功能,我们不得不让每台主机都有同样的文件,那么每次我们更新文件的时候,互联网每台主机都需要更新自己的hosts文件,这是一件工作量极其大的事情。

后期,人们采用了一种名为NIS的解决方式,实现的方法是把所有ip地址和网络域名之间的对应存放在一个服务器上,每次有主机需要进行域名解析的时候,我们就让该台主机去访问这台名为NIS的服务器,后来随着网络的扩展,互联网上的主机上百亿,这样对NIS服务器的负载极大,NIS不得不退出了历史舞台。

现在,我们使用DNS协议,来实现分布式、阶层式的系统来管理ip地址和域名之间的对应关系。

DNS结构

这里写图片描述
从上图中,我们可以知道,DNS利用类似树状目录的架构,将主机名的管理分配在不同层级的DNS服务器当中,经由分层管理,所以每一部DNS服务器记忆的信息就不会很多,而且若有IP 异动时也相当容易修改!因为你如果已经申请到主机名解析的授权,那么在你自己的DNS服务器中,就能够修改全世界都可以查询到的主机名了!

DNS是以树状目录分阶层的方式来处理主机名,我们知道树状结构的好处就是,父节点只关注他的子节点的内容,而不关注他的孙子节点的内容,这样就在很大程度上实现了分治,根节点只需要管理它的子节点.com .cn .edu等域名和ip地址之间的关系即可,再往下的baidu.com,qq.com域名就完全和他无关了。

DNS查询流程

我们以客户端第一次查询百度为例子解释DNS的查询流程
这里写图片描述
递归和迭代的区别?
所谓 递归查询过程 就是 “查询的递交者” 更替, 而 迭代查询过程 则是 “查询的递交者”不变。

在需要DNS解析的客户端,比如说笔记本,当我们解析www.baidu.con时我们会先进行下面的操作:
操作系统会先检查自己本地的hosts文件—>查找本地DNS解析器缓存(笔记本的缓存)
如果以上两步都没有找到会执行上图所示的步骤:

1.如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,进入windows下的命令行窗口输入ipconfig/all,即可查到你当前的DNSsever.如图
这里写图片描述
箭头一是DHCP服务器,箭头二是DNS服务器。
此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。

2.如果本地DNS没有该条记录,那么本地DNS就把请求发至 “根DNS服务器”,“根DNS服务器”收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。基于本例子,根服务器会发送.com服务器ip地址。(对应图中的2、3条信息记录)。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(baidu.com)给本地DNS服务器。(对应途中4、5条信息记录),以此类推下去,直至最后本地DNS得到了www.baidu.com服务器的IP地址

3.最后一步,本地DNS把查询到的记录进行缓存并且将该条记录返回给客户端。对应图中的第10步。

我们把该过程画成流程图则如下所示:
这里写图片描述

DNS服务搭建

DNS相关软件的安装

我们使用主流的提供DNS服务的软件,bind.下面我们先查询一下该软件的相关信息
这里写图片描述
安装方法:[root@CentOs7 /etc/named]# yum -y install bind

服务器搭建规划

规划自己搭建的局域网的域名为xiaomi.com。由于我们搭建的DNS是不接上互联网的,所以此处域名是可以随意取得,我就使用xiaomi的域名了。

  • 两台安装了CentOs7.4的虚拟机,利用这两台主机搭建Master/Slave结构的DNS服务
  • 涉及到的配置文件:
    • named.conf(主要配置文件)
    • named.xiaomi.com(涉及到xiaomi.com这个域的正解配置文件)
    • named.ca (bind软件提供的能够解析根服务器的正解配置文件)

手把手教你搭建基本DNS服务器

搭建主DNS服务器

第一步:安装bind软件包,修改/etc/named.conf文件,对全局配置options修改如下:
这里写图片描述
第二步:在/etc/named.conf配置文件中加入一段有关xiaomi.com的zone文件。具体配置如下:
这里写图片描述
第三步:新建文件/var/named/xiaomi.com.zone,编辑正向解析区域文件,配置内容如下:
这里写图片描述
第四步:重启服务,并设置为开机自启动服务。

搭建从DNS服务器

步骤较为简单,连正解zone文件都不需要写,你只需要写个zone文件的类似于声明一样的东西,写在主配置文件/etc/named.conf尾部。如下所示
这里写图片描述
当你主配置文件的SOA记录的serial变大时,从配置文件会自动更新收到主配置文件的变化并努力保持一致。

参考文献

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/134835.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Dubbo服务降级

    Dubbo服务降级dubbo降级服务使用dubbo在进行服务调用时,可能由于各种原因(服务器宕机/网络超时/并发数太高等),调用中就会出现RpcException,调用失败。服务降级就是指在由于非业务异常导致的服务不可用时(上面举得例子),可以返回默认值,避免异常影响主业务的处理。官方dubbo3.0-给出的服务降级RegistryFactoryregistryFactory=ExtensionLoader.getExtensionLoader(RegistryFactory.class)

    2022年4月30日
    52
  • 计算机分子模拟聚乙烯,用“分子模拟”软件构建聚乙烯分子、全同立构聚丙烯分子,并计算它们末端的直线距离-高分子物理-实验1-01…

    计算机分子模拟聚乙烯,用“分子模拟”软件构建聚乙烯分子、全同立构聚丙烯分子,并计算它们末端的直线距离-高分子物理-实验1-01…高分子物理实验。实验一用“分子模拟”(MP)软件构建聚乙烯分子、全同立构聚丙烯,并计算它们末端的直线距离一、实验目的1.了解用计算机软件模拟大分子的“分子模拟”新趋势。2.学会用“分子模拟”软件构造聚乙烯、聚丙烯大分子。3.计算主链含100个碳原子的聚乙烯、聚丙烯分子末端的直线距离。二、实验原理已经知道,C-C单键是σ键,其电子云分布具有轴对称性。因此,σ键相连的两个碳原子可…

    2022年5月16日
    42
  • idea常用快捷键大全_idea的快捷键设置

    idea常用快捷键大全_idea的快捷键设置文章目录一.快速生成main二.快速生成System.out.print三.文件保存四.删除一行五.新添,新建,添加的快捷键六.切换java程序七.目录显示与关闭八.运行九.提示方法的参数十.切换窗口一.快速生成main输入psvm二.快速生成System.out.print使用sout三.文件保存IDEA是自动保存的,不需要我们去Ctrl+S保存。四.删除一行Ctrl+Y五.新添,新建,添加的快捷键Alt+lnsert六.切换java程序

    2025年9月23日
    8
  • stripslashes()函数的作用_strip和strap的区别

    stripslashes()函数的作用_strip和strap的区别我们在向mysql写入数据时,比如:

    2022年8月30日
    4
  • 获取的string转JSONArray或JSONObject

    获取的string转JSONArray或JSONObject² 返回值:JSON格式字符串{“serviceId”:”3c.park.queryparkstandard”,”resultCode”:0,”message”:”成功”,”dataItems”:[{“objectId”:””,”operateType”:”READ”,”attributes”:{“parkCode”:”park01″,

    2022年6月20日
    33
  • java 二维数组 数据库_java 二维数组如何存入数据库

    java 二维数组 数据库_java 二维数组如何存入数据库usingSystem;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Xml;usingSystem.Xml.Serialization;usingSystem.IO;namespaceWindowsFormsApplication1{publicpartialclassForm…

    2022年5月16日
    37

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号