DNS域名系统概述

域名系统DNS(Domain Name System)是互联网使用的命名系统,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的系统,搭载域名系统的机器称之为域名服务器,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP地址数串。
那为什么不叫名字而是叫域名呢?因为在这种命名系统中使用了许多的“域”(域名(英语:Domain Name),简称域名、网域,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置))。

例如,www.baidu.com是一个域名,和IP地址180.76.76.76相对应。DNS就像是一个自动的电话号码簿,我们可以直接拨打baidu的名字来代替电话号码(IP地址)。我们直接调用网站的名字以后,DNS就会将便于人类使用的名字(如www.baidu.com)转化成便于机器识别的IP地址(如180.76.76.76)。


DNS域名系统的工作原理

当一个计算机应用进程需要把主机名解析为IP地址时:

  1. 调用解析程序,将带解析的域名放入DNS请求报文中。
  2. 以UDP的方式发送报文给本地域名服务器。
  3. 本地域名服务器在查找到域名后,就将其对应的ip地址放在回复报文中返回
  4. 应用程序通过回复报文获得目的主机的ip地址。

疑问点&解析

根据上面流程我们提出几个问题并解析:

1.解析程序是什么?它在哪儿?

书上网上并没有查到专门描述这个解析程序的内容。但是我们可以推测,这个解析程序就是一个能够发起DNS请求报文并能够接收DNS报文的一个内嵌在我们所使用程序上的一个进程。我们通常使用浏览器去访问某个网址,因此,在我们的浏览器中应当会运行一个DNS域名解析进程,通过这个进程与本地域名服务器进行域名解析来为浏览器提供域名解析服务。

2.为什么使用UDP的方式发送报问,而不是使用可靠的TCP?

因为UDP消耗的资源比较少。同时,由于域名解析服务只需要经历一个RTT时间(数据往返时间),并不存在多余的其他信息交互。因此,即便只使用UDP也可以保证数据的交付结果(进程一旦发现超时就可以认为报文丢失,可以再次发送,知道获得回复报文),并且如果使用TCP连接反而需要数倍的资源损耗(因为在交互前后需要三次握手+四次挥手)。

3.什么是本地域名服务器?它在哪?

本地域名服务器就是域名服务器。本地域名服务器非常重要,我们的计算机需要解析域名时,首先就需要发送解析请求给本地域名服务器。至于存在“本地”的前缀是因为它通常距离用户比较近,一般不超过几个路由器的距离。

该问题的具体描述我们放在后面的域名服务器这一部分进行详细的解答。

域名

在介绍具体介绍域名服务器之前我们需要先了解互联网的域名结构。

互联网采用了层次树状结构的命名方式。任何一个链接在互联网上的主机或路由器,都有一个唯一的层次结构名字,即域名。在这里,是名字空间里一个可被管理的划分。域还可以不断划分出子域。

从语法上,每个域名都由标号序列组成,而各标号之间用点隔开。比如下面的域名。

上面是中央电视台用于收发电子邮件的计算机的域名,它由三个标号组成,其中com是顶级域名,cctv是二级域名,mail则是三级域名

DNS并不限定一个域名包含多少个下级域名。但是各级的域名需要由上一级的域名管理机构管理,而顶级域名则由ICANN统一进行管理,这样就可以保证全球范围内域名的唯一性。换句话说,现在中央电视台向com的域名管理机构申请了cctv这个二级域名,当电视台获得这个域名时,它自己就可以决定是否要进一步划分其下属的子域,并且不必由上级机构批准。

注意:域名的层级结构与物理的网络无关,与IP地址中的子网也没有关系。它是按照机构的组织来划分的。

域名服务器

什么是域名服务器

域名服务器就是一个提供DNS域名解析服务的一个计算机服务进程。

域名服务器与域名结构的关系

前面我们讲述了域名的层次结构体系,它组成了一棵巨大的域名树,但是,这棵树是抽象存在的。具体的域名系统是通过分布在各地的域名服务器来实现的。换句话说,域名服务器是一个提供域名查询的分布式域名数据库。

理论上来说,可以让每一级的每个节点域名都由一个相对应的域名服务器,使所有的域名服务器构成一个与域名树对应的域名服务器树。但是这样只会使得域名服务器数量太多,从而降低这些服务器的使用率并造成没必要的使用成本。因此我们需要一种方式,既可以在一个域名服务器上管理多个域名,又可以并不因为一台计算机上的域名过多造成DNS域名服务器的负担。在这个问题的基础上,DNS采用划分的方式来解决这个问题。

我们将区定义为一个域名服务器所负责管辖的范围。但是这个范围不会大于域。理论上,如果有需要,我们可以在一个域内设立多个区,由多个DNS域名服务器去负责则自区内计算机的域名和映射服务。同时,我们将每一个区所对应的服务器被称为权限域名服务器,用来保存其所负责范围内所有主机的域名到IP地址的映射。

注意,由于区的划分是在一个域的基础之上进行的。因此,如果我们需要划分区,那我们首先就需要申请一个域名,但是再根据实际的需要进行划分,甚至不划分。但是,既是不划分,我们就默认将整个域看作一个区,并且需要为这个区(域)建立一个对应的DNS域名服务器。

举个例子,现在abc公司申请了一个abc.com的域名,并且abc公司现在有x和y两个服务部门,部门x下面又分三个部门u,v和w,而y下面还有其他下属部门t。假设abc公司现在只设置一个区,那么区abc.com和域abc.com指的就是同一件事。但是如果该公司规模很大,需要划分多个区,因此它可能会根据部门将域划分成两个区,并都设置了相应的权限域名服务器。两种划分方式如下图所示:

每个服务器都能够进行部分域名到IP地址的映射。当某个DNS服务器不能进行域名到IP地址的转换时,它就设法找互联网上别的域名服务器进行解析。

域名服务器的分类

从上图看出,互联网上的DNS域名服务器也是按照层次安排的。每一个域名服务器都只对域名体系中的一部分进行管辖。根据域名服务器起到的作用,可以将域名服务器分为以下四种类型:

  • 根域名服务器:最高层次域名服务器,所有的根域名服务器都知道所有顶级域名服务器的域名和IP。它是最重要的域名服务器,因为当我们的域名服务器无法解析域名时,就首先求助于根域名服务器。
  • 顶级域名服务器:这类服务器负责管理所有在该顶级域名服务器上注册的所有二级域名服务器。当收到DNS查询时,就给出相应回答。
  • 权限域名服务器:该服务器在前面已经有过解释。当一个权限域名服务器不能给出查询回复时,就会告诉发出查询请求的DNS客户,下一步应当找那个权限域名服务器。
  • 本地域名服务器:本地域名服务器并不属于常规的域名服务器层次结构。但是它 非常重要。当一台主机发出DNS查询请求,这个请求报文就会发给本地域名服务器。正常来说,每一个大学、本地ISP服务提供商都会拥有一个本地域名服务器。我们个人的电脑通常可以通过查看我们系统上的“网络和Internet” → “网络和共享中心” → “查看网络信息并设置连接” → “网络连接” → “属性” → “Internet协议版本4” → “属性”就可以看到我们的DNS服务器的信息,但是通常是自动获取的。这里的DNS服务器指的就是本地域名服务器。当所要查询的主机也属于同一个本地ISP,该本地域名服务器就能直接将其映射为对应的ip地址,而不需要询问其他域名服务器。

域名的解析过程

域名的查询方式通常分为以下两种:

  • 递归查询:主机向本地域名服务器通常采用的查询方式
  • 迭代查询:本地域名服务器向根域名服务器采用的查询方式

递归查询

所谓递归查询就是指:如果主机所询问的本地域名服务器并不知道被查询域名的ip地址,那么本地域名服务器就将向其他根域名服务器继续发出查询请求报文(即提该主机继续查询),而不是让该主机自己进行下一步查询。因此,递归查询的结果要么是要查询的ip地址,要么就是报错,查不到地址。

迭代查询

所谓迭代查询是指:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地域名服务器下一步应当向哪个域名服务器进行查询,然后由本地域名服务器进行后续的查询。根域名服务器通常是将自己知道的对应的顶级根域名服务器的ip告诉本地域名服务器,然后让它再向顶级域名服务器发起请求。当顶级域名服务器收到请求后,要么给出要查询的ip,要么告诉本地域名服务区下一步向哪个权限域名服务器继续请求。通过这样的迭代,最后获取到ip或是报错,将结果返回给发起查询的主机。

当然,本地域名服务器也可以是由递归查询方式,这取决于最初的查询请求报文设置的是哪一种查询方式
下面的图说明了两种查询的区别:

补充

下面是一些DNS为应当一些问题所采取的一些方法:

  • DNS在域名服务器中采用高速缓存来减少查询压力,服务器会临时存放最近的一些查询记录。
  • DNS采用分布式存储增加可靠性。只由主DNS域名服务器修改并定期同步数据到次DNS域名服务器来保证数据一致性
  • 为了减轻本地域名服务器的压力,许多计算机会在启动时就从本地域名服务器中下载所有域名库。能查到的记录就不会依赖于本地域名服务器。同时,为了数据一致性,本地主机也会定期检查本地域名服务器的信息更新情况。
  • 为了减轻根域名服务器的压力,以及提升根域名服务器的可靠性。通过一个根域名服务器会在许多地方拥有多个镜像根域名服务器,以防止服务器崩溃的时候导致网络的DNS系统无法工作。

TCP/IP协议之常见的应用层协议——DNS域名系统相关推荐

  1. OSI 模型 TCP/IP 各层的作用以及协议 vlan的三种端口 (交换部分二)

    目录 OSI模型 OSI各层的作用 各层的协议 数据通信 物理层的主要功能 网卡 中继器 集线器 数据链路层功能 数据链路层协议 以太网概述 以太网地址(MAC地址) 数制概念 网络层作用 协议 IP ...

  2. TCP/IP四层模型及各层协议首部详述(包含IOS7层)

    1. OSI七层和TCP/IP四层的关系 1.1 OSI引入了服务.接口.协议.分层的概念,TCP/IP借鉴了OSI的这些概念建立TCP/IP模型. 1.2 OSI先有模型,后有协议,先有标准,后进行 ...

  3. 又白又菜study:《TCP/IP 详解 :卷1 协议》

    Introduction: TCP/IP 协议族能够让电脑之间互相通信: TCP/IP 历史: 起源于20世纪60年代由政府出资研究的项目分组交换网络: 20世纪90年代,演变成计算机之间最广泛使用的 ...

  4. TCP/IP四层模型及各层协议首部详述

    1. OSI七层和TCP/IP四层的关系 1.1 OSI引入了服务.接口.协议.分层的概念,TCP/IP借鉴了OSI的这些概念建立TCP/IP模型. 1.2 OSI先有模型,后有协议,先有标准,后进行 ...

  5. 一文洞悉 OSI和TCP/IP模型,理通所有协议,再也不用似懂非懂了

    目录 为什么网络要分层? OSI模型 比对 TCP/IP模型 TCP/IP 模型 物理层 数据链路层 网络层 传输层 应用层 为什么网络要分层? 这其实很好理解,隋朝开始就有吏部.户部.礼部.兵部.刑 ...

  6. 《TCP/IP详解卷1:协议》第6章 ICMP:Internet控制报文协议-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  7. 《TCP/IP详解卷1:协议》第3章 IP:网际协议(2)-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  8. 《TCP/IP详解 卷1:协议》第4章 ARP:地址解析协议

    4.1 引言 本章我们要讨论的问题是只对TCP/IP协议簇有意义的IP地址.数据链路如以太网或令牌环网都有自己的寻址机制(常常为48 bit地址),这是使用数据链路的任何网络层都必须遵从的.一个网络如 ...

  9. 《TCP/IP详解卷1:协议》读书笔记

    <TCP/IP详解卷1:协议>读书笔记 - QingLiXueShi - 博客园 https://www.cnblogs.com/mengwang024/p/4425834.html &l ...

  10. 《TCP/IP详解卷1:协议》第5章 RARP:逆地址解析协议---读书笔记

    <TCP/IP详解卷1:协议>第5章 RARP:逆地址解析协议---读书笔记 1.引言 具有本地磁盘的系统引导时,一般是从磁盘上的配置文件中读取IP地址.但是无盘机,如X终端或无盘工作站, ...

最新文章

  1. 基于100,000篇演讲的分析数据科学家发现了最佳演讲者的特征——及时解释听众不懂的词语,必要时提高10%的音调,正确和恰当的手势,氛围的营造...
  2. Windows2012R2 Hyper-v3.0 高可用群集安装及配置(Live Migration)
  3. 上海民警这个方法让汽车提前“助跑”,路口通行效率提10%
  4. 《Oracle Life-DBA的一天》海报下载
  5. MySQL数据库表分区功能详解
  6. Ubuntu /CentOS 设置开机启动,添加自定义系统服务,自定义开机启动
  7. HashMap解决hash冲突
  8. Postman强大的接口的前置、后置处理教程
  9. 目前全网最详细的树莓派 Pico入门指南!
  10. topcoder java_Topcoder 练习小记,Java 与 Python 分别实现。
  11. 饥荒控制台输入没用_饥荒控制台使用教程
  12. tomcat jdbc数据库连接池详解之PoolCleaner
  13. (组合数+快速幂+lucas+费马小引理)acwing 887. 求组合数 III
  14. 我的世界神级种子Java_单机生存必备 我的世界神级种子推荐
  15. 入门c语言。(1建立开发环境)
  16. word2013 无法撤销解决方法-有效
  17. 微信公众平台停用服务器配置,1.微信公众号服务器配置启用
  18. c语言运行后tecplot云图,tecplot执行fluent后处理截面云图显示-20210327085801.docx-原创力文档...
  19. [Git] 配置Github Gitee reference加速
  20. 史上最全教程没有之一,微信小程序使用云开发解决微信支付问题,我走了几天几夜的弯路啊

热门文章

  1. Oracle导入dmp文件步骤
  2. 【人物志】美团技术委员会前端通道主席洪磊:爱折腾的斜杠青年
  3. 山石网科张凌龄:安全市场日新月异 初创公司不容小觑
  4. 原生JavaScript实现jQuery中的fadeIn和fadeOut淡入/出效果
  5. 技术人如何才能做好绩效管理提升团队绩效?
  6. 承认你的父母其实不那么爱你
  7. Deepin20.4系统中wine优化设置
  8. 2021最全财富密码,95个即将发币项目概览
  9. Linux之CentOS7.5安装及克隆
  10. JSDOM案例:猜字游戏