§2.2 应用层协议之域名系统DNS

前言:
域名系统协议(DNS),所谓DNS呢,其实说白了就是一个巨大的分布式目录系统。对于这个名词我们需要解释一下。还记得最初的时候对比计算机网络和分布式系统的区别吗?

所谓分布式系统,由多台主机组成的一个集合。对用户透明,用户不知道系统是如何运行的,只把要求告诉分布式系统,分布式系统寻找合适的主机在进行处理,之后系统将数据结果返回给用户。

目录系统:可以为用户提供查询功能。

而域名系统协议是由一个分布式系统进行提供目录服务。那么域名系统提供了什么查询功能呢?在逻辑上是什么样子的呢?

根据DHCP协议可以知道,在主机启动之后,就会运行DHCP协议,该协议会为主机获取IP地址。基本上所有的主机都有IP地址,在主机之间通信时,也是以IP地址进行通信。通信的双方都要知道IP地址。那么问题来了,你在上网访问一些网页或者是访问一些特定的资源时,你并没有输入过IP地址。比如上网找资源的时候,你先去百度搜索那个页面,之后进行搜索。那么你是如何去到百度的页面的呢?百度这个页面肯定依托在某个或者某几个服务器上面,那么你域这个服务器进行通信必定是访问这个服务器的IP地址。你只知道你在浏览器中输入了www.baidu.com。之后你能到达百度的服务器,就是域名系统在发挥作用,你的主机会问域名系统,www.baidu.com的IP地址是多少,域名系统回答后,你就知道了百度的服务器的32位的点分十进制IPv4地址。 下面就介绍一下DNS。

DNS:

提需求

应用层协议的出现基本上都是为了解决一些需求,DNS也是为了解决特定的要求。为什么会出现这个需求呢?我们回顾计算机网络的始祖。当arpanet出现时,为了方便各个主机相互通信,各个主机都有一个文件,hosts文件。这个文件列出来了本网络内所有的主机的名字以及其对应的IP地址。对于一个几百人,几千人的网络,这是可以接受的。但是随着网络的发展,网络覆盖了全球,那么这种方法很明显就不合适了。因为主机过多,会使得文件异常的大。另外,主机的名字不是你想叫什么就可以叫什么,要避免重名(这里你可以想象出来两个www.baidu.com的网址,一个提供搜索服务,一个买东西,你登录这个网址,之后你并不知道会被定向到哪个网站去)。

之后DNS服务就被设计了出来。提供层次的,基于域的命名方案。同时又为了避免各个主机上hosts文件过于巨大,DNS成为了一个主机,专门的为客户机进行提供域名和IP地址转换的用途。

工作模式:

DNS服务的模式仍然是C/S模式,客户机和服务器不是对等的。服务器端不会哪一天去向客户机咨询域名解析的情况。
功能:提供域名与IP地址间的映射关系,实现域名到 IP 地址的解析。这个功能是由多个服务器共同实现的。这些服务器被统称为DNS服务器。

下面解释一下DNS所谓的层次的基于域的是什么

所谓层次性,这里又参考了现实中的邮政系统。你给一个人寄一封信,那么你要写出来这个人的地址。地址提到了收信者的国家–省份–城市–街道–某一户。想象一下,如果没有这种层次性的设计,那么寄信这件事可能会出现很多问题。并且十分可能找不到收信者。

域名系统也是类似,找特定的资源使用就要按照层逐步的找到目标。一个国际组织对域名进行了划分,不过这个国际组织仅仅负责最顶层的域名划分(参考国家的名字)。某个国家/组织申请了域名,他们就会为这个国家/组织分一个域名。这个域名被称为顶级域名。顶级域名交付后,后面域名继续往下划分就不是国际组织管的事情了。

域名的格式结构:
在这里插入图片描述
图片来自网络
在这里插入图片描述
图片来自计算机网络谢希仁版

从上面可以看出来域名是一个树状结构。且域名本身是从后往前读的。拿www.baidu.com作为例子。com是公司和企业的顶级域名,baidu是百度这家公司申请的二级域名,www是则是对应着web服务。这就是一个基本的域名结构了

了解了基本的域名结构之后来看看域名的特点

1、首先对于域名系统来说,它是不区分大小写的。BAIDU和baidu域名系统里是一样的。
2、如果新建一个域,必须得到其所属域同意。
3、域名系统是个逻辑上的观点,跟物理网络几乎没有关系
4、域名中的标号长度是有限制的。各个组成部分的名字最多63个字符,整个路径名字不得超过255个字符。

上面就是域名系统。下面开始看看域名服务器是如何工作的。

这个分布式系统是什么样的?

域名系统是一个分布式系统。理论上来说有一个无限算力的计算机其实也可以供应支撑其域名系统。不过现实中并没有这样的机器。如果只有一个机器撑起来整个域名系统就会有很大的不便:首先是整个机器会被潮水般的数据淹没,然后死机,最后全球域名系统崩溃,大家找不到网页了。其次,如果只有一台,那么这一台放在哪里呢?放在A国那么A国不高兴了把域名系统一关,大家就呵呵了。进而域名系统被设计成了多层次分布式系统。

那么域名服务器是如何分布呢?域名服务器一般不按照域进行分配。而是按照“区”进行分配。有的时候呢,一个区是等于一个域的(比如这个域里的主机比较少),也有情况这个域比较大,那么就分区了。现实中域名服务器分为四种类型:分别是根域名服务器、顶级域名服务器、权限域名服务器(也被称为权威域名服务器)、本地域名服务器。

根域名服务器:最重要的域名服务器。但是并不意味着根域名服务器知道所有的域名数据。而是根域名服务器知道所有的顶级域名服务器的域名和IP。它重要的另一个方面是因为,当本地的域名服务器在查询不到一个域名的时候,会向根域名服务器进行求助,根域名服务器会替其想办法,找到可能知道域名的顶级域名服务器。互联网的根域名服务器总计有13个域名(理解为13个名字)但是他们的实体机有数百台,他们的名字分别是 a.rootservers.net,b.rootservers.net, … ,m.rootservers.net。如果只有13台服务器,它根本扛不起全球的流量。比如根域名服务器a,在全球各地都有实体机。方便各地的人们需要查询域名时找到最近的根域名服务器。

顶级域名服务器:一个顶级域名服务器管理该顶级域名下所有的二级域名。当然,一个服务器肯定是扛不住的,这又是分布在各地的数百台服务器组成的。当这些服务器收到请求时图个本地有记录,那么就会给出直接的最终结果。如果本地没有记录,它可能会给出下一步应当找的域名服务器的IP地址。

权限域名服务器:一个权限域名服务器负责一个“区”,当一个权限域名服务器收到请求之后,要么给出最终结果,要么给出可能知道最终结果的权限服务器地址。

本地域名服务器:本地域名服务器其实和上述的服务器不在同一个层次。本地域名服务器一方面为客户机接入域名系统,另一方面也可以进行域名的查询。各个公司/机构都可以自行搭建。本地域名服务器一般是离客户最近的域名服务器。

模式:

域名系统服务器一般情况下都是采用主备的模式。即一个主要的域名服务器搭配多个备用的域名服务器(也被称为辅助域名服务器)。这么做是防止域名服务器出故障导致DNS服务中断。为了在出现情况的时候,备用域名服务器能够及时的顶上去,主域名服务器会定期的把本地的数据复制到备用的域名服务器里。但是备用的域名服务器不得进行数据的更改。仅由主域名服务器可以进行更改。

域名系统解释了,域名服务器也解释了,下面就是最重要的域名解析过程。

比如你现在需要上网,你要区baidu.com。这个时候首先第一步,你的主机会查看本机的hosts文件里有没有百度的地址,有就会直接前往。没有就会求助于DNS服务器。这里DNS服务器是自己指定或者通过DHCP获取的。一般来说是本机构自己搭建的服务器,或者本地电信运营商搭建的服务器。这个就是本地域名服务器。

本地域名服务器会检查自己的数据,查看自己的数据是否有该域名的记录,如果有则返回结果。没有本地域名服务器会向根域名服务器进行求助。

当根域名服务器收到本地域名服务器来的查询请求时,本地域名服务器会看一下域名,然后返回给本地域名服务器可能知道该域名的顶级域名服务器。即根域名服务器告诉本地域名服务器:你去找x.x.x.x,它是这个域名的顶级域名服务器,他应该是知道的。

本地域名服务器收到根域名服务器的消息后,会按照根域名服务器的建议,去找对应的顶级域名服务器。顶级域名服务器如果有该域名的记录,那么就会返回消息,如果没有,就会找到对应的区域名服务器的地址,告诉本地域名服务器:你去找e.e.e.e。他负责那个区,他应该是知道的。(本地域名服务器在这种情况下也被称为转发域名服务器,其上游的服务器也被称为转发器)

本地域名服务器得到结果之后,会再去访问权限域名服务器,权限域名服务器看看自己有没有域名的记录。有则会告诉其结果,没有就会说没有。

本地域名服务器根据从权限域名服务器得到的结果,再返回至客户机。客户机得以正常访问网页或者报dns解析错误。

这里涉及到了两种查询:因为本地域名服务器涉及到的客户机不多,有能力去提客户机寻找各个服务器。所有这个查询相对于客户机来说,发出请求,返回的数据一定是最终结果。被称为递归查询

而根域名服务器给本地域名服务器的结果一般都是一部分答案,移动到下一个操作。引导本地域名服务器进行下一步查询,被称为迭代查询

上述那么复杂的情况是建立在最糟糕的情况下。因为现代的主机是有缓存的,如果自己本来就知道baidu.com的地址,那么根本不需要向本地域名服务器求助。本地域名服务器有可能知道结果的区域域名服务器的地址,那么就不需要去询问根域名服务器以及权限域名服务器了。但是这种回答被称为非权威应答。因为域名的主人可能会改变域名与地址的对应关系。故而其是不权威的,因此缓存也是有时间限制的。到了一定时间,缓存就会消失。甚至有的主机会在开机后从本地域名服务器下载全部dns记录。有时候为了方便查询部分地区会建立专门的缓存域名服务器。这个专门用于存储缓存。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值