DNS详解

前言

DNS:因特网的目录服务
因特网的主机和人类一样都有标识信息,主机的标识信息就是主机名,比如:www.facebook.nom。
这个名字比较容易记。但因为主机名可能由不定长的字母组成,路由器难以处理,主机也可以用IP地址标识。
所以识别主机由两种方式;主机名和IP地址。人们喜欢记忆主机名,路由器喜欢ip地址,便于处理。为了这种不同的偏好,我们需要一种能进行主机名和IP地址转换的目录服务,这就是**域名服务(DNS)**的主要任务。

一、DNS提供的服务

1、主要服务

DNS:
(1)一个由分层的DNS服务器实现的分布式数据库;
(2)一个由使用主机名查询到分布式数据库的应用层协议;
(3)DNS协议运行在UDP之上,使用53号端口。
DNS不是一个直接和用户打交道的应用,而是通过采用网络边缘的的客户和服务器模式实现了关键的主机名到地址转换功能

2、请求URL页面会发生什么现象?(重点)

(1)同一台用户主机上运行着DNS应用的客户端
(2)浏览器从URL中获取主机名,并将主机名传到DNS的客户端
(3)DNS客户向DNS服务器发送一个包含主机名的请求
(4)DNS应用的客户端会受到一份回答报文,其中含有此主机名的ip地址
(5)一旦浏览器知道了来自DNS的该ip地址,就会和该ip地址的80端口的http服务器建立tcp连接
(6)此时客户端发送HTPP请求
(7)服务器处理请求 
(8)服务器响应请求
(9)断开tcp连接
(10)浏览器展示HTML

3、其他重要服务:

主机别名:
一个复杂的主机可能会有别名,别名比较简单,容易记忆,此时主机全名就被叫做规范主机名。应用程序可以调用DNS来获得主机别名对应的规范主机名和ip地址。
邮件服务器别名
人们也非常希望邮件地址好记忆,所以电子邮件程序可以通过调用DNS,对提供的主机别名进行解析,以获得规范主机名和ip地址。
负载分配
DNS也用用于冗余的服务器之间进行负载分配,繁忙的站点被冗余分布在多台服务器上,每台服务器在不同的端系统上,每个都有着不同的ip地址。由于这些冗余的web服务器,一个ip地址集合因此与同一个规范主机名相联系。DNS数据库中存储这这些集合。当客户对映射到某地址集合的名字发送一个DNS请求时,该服务器用整个IP地址的整个集合进行响应,但在每个循环这些地址次序。因此客户通常向ip地址最前面的服务器发送http请求报文,所以DNS就在这些冗余的服务器之间循环得实现了负载分配。

二、DNS工作机理概述

1.工作过程:

假设运行在用户主机上的某些应用程序( 如Web浏览器或邮件阅读器)需要将主机名转换为IP地址。这些应用程序将调用DNS的客户端,并指明需要被转换的主机名(在很多基于UNIX的机器上,应用程序为了执行这种转换需要调用函数gethostbyname())用户主机上的DNS接收到后,向网络中发送一个DNS查询报文。所有的DNS请求和回答报文使用UDP数据报经端口53发送。经过若干毫秒到若干秒的时延后,用户主机上的DNS接收到一个提供所希望映射的DNS回答报文。这个映射结果则被传递到调用DNS的应用程序。因此,从用户主机上调用应用程序的角度看,DNS是一个提供简单、直接的转换服务的黑盒子。但事实上,实现这个服务的黑盒子非常复杂,它由分布于全球的大量DNS服务器以及定义了DNS服务器与查询主机通信方式的应用层协议组成。

2.集中式DNS带来的问题:

单点故障:如果该DNS服务器崩溃,整个因特网崩溃。
通信容量:单个服务器不得不处理所有的dns查询。
远距离的集中式数据库:假如单台DNS服务器在纽约,客户端在澳大利亚,这中间会经过低速和拥塞的链路,造成严重的时延。
维护困难:单个服务器保留全部的记录,数据库巨大,难以维护。

3.分布式,层次数据库

根DNS服务器:有400多个根名字服务器遍布世界,根名字服务器提供TLD服务器的IP地址。
顶级域服务器(TLD):对于每个顶级域(如:com,org,net,edu,gov)和所有的国家顶级域(如:uk,ca,jp),都有TLD服务器(或集群)。TLD服务器提供了权威DNS服务的IP地址。
权威DNS服务器:每个组织机构的用权威服务器保存DNS记录。
本地DNS服务器:每个ISP都有一个本地dns服务器
在这里插入图片描述

4.分布式dns的查询方式:

**递归查询:**如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其它根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。因此,递归查询返回的查询结果或者是所要查询的IP地址,或者是报错,表示无法查询到所需的IP地址。
在这里插入图片描述
迭代查询:
当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地服务器:“你下一步应当向哪一个域名服务器进行查询”。 然后让本地服务器进行后续的查询。根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。 顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的IP地址,要么告诉本地服务器下一步应当向哪一个权限域名服务器进行查询。 最后,知道了所要解析的IP地址或报错,然后把这个结果返回给发起查询的主机。
在这里插入图片描述

5.DNS缓存

原理:在一个请求链中,当DNS服务器接收到一个DNS回答,它能将映射缓存到本地存储器中。
注意:由于主机和主机名,p地址之间的映射并不是永久的,DNS服务器在一段时间后,通常设计为两天,将丢弃缓存的信息。
优点:改善了时延性能,减少了传输的DNS报文。
例子:假定主机apricot. nyu. edu向dns. nyu. edu查询主机名cnn. com的IP地址。
此后,假定过了几个小时,纽约大学的另外一台主机如kiwi. nyu. edu也向dns. nyu. edu查询
相同的主机名。因为有了缓存,该本地DNS服务器可以立即返回cnn. com的IP地址,而不
必查询任何其他DNS服务器。本地DNS服务器也能够缓存TLD服务器的IP地址,因而允
许本地DNS绕过查询链中的根DNS服务器。事实上,因为缓存,除了少数DNS查询以
外,根服务器被绕过了。

三、DNS记录和报文

1.资源记录(RR)

提供了主机名到ip地址的映射
4元组:

(Name,Value,Type,TTL)

TIL是该记录的生在时间,它决定了资源记录应当从缓存中删除的时间,在下面给出的记录例子中,我们忽略掉Tn字段。Name 和Vale的值取决于Type
●如果Type=A, 则Name是主机名,Valte 是该主机名对应的P地址。因此,一条类型为A的资源记录提供了标准的主机名到IP地址的映射。例如(relay1.bar. foo. com, 145.37.93.126, A)就是一条类型A记录。
111)
TIL是该记录的生在时间,它决定了资源记录应当从缓存中删除的时间,在下面给出
的记录例子中,我们忽略掉Tn字段。Name 和Vale的值取决于Type
●如果Type=A, 则Name是主机名,Valte 是该主机名对应的P地址。因此,条
类型为A的资源记录提供了标准的主机名到IP地址的映射。例如(relay1.
bar. foo. com, 145.37.93.126, A)就是一条类型A记录。
●如果Type=NS,则Name是个域(如foo.com),而Value是个知道如何获得该域中主机IP地址的权威DNS服务器的主机名。这个记录用于沿着查询链来路由DNS查询。例如(foo. com, dns. foo. com, NS)就是一条类型为 NS的记录。
●如果Type=CNAME,则Value是别名为Name的主机对应的规范主机名。该记录能够向查询的主机提供一个 主机名对应的规范主机名,例如(foo. com, relay1.bar. foo. com, CNAME)就是一条CNAME类型的记录。
●如果Type=MX, 则Value是个别名为Name的邮件服务器的规范主机名。举例来说,(foo. com, mail. bar. foo. com, MX)就是一条MX记录。MX记录允许邮件服务器主机名具有简单的别名。值得注意的是,通过使用MX记录,一 个公司的邮件服务器和其他服务器(如它的Web服务器)可以使用相同的别名。为了获得邮件服务器的规范主机名,DNS客户应当请求一条MX记录;而为了获得其他服务器的规范主机名,DNS 客户应当请求CNAME记录。

2.DNS报文

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值