DNS服务(一):由域名解析出IP

    xiaoxiao2021-03-25  85

    DNS简介

    DNS,就是Domain Name System的缩写,翻译过来就是域名系统,是互联网上作为域名和IP地址相互映射的一个分布式数据库。DNS能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过域名,最终得到该域名对应的IP地址的过程叫做域名解析(或主机名解析)。 - 根域名服务器:最重要的域名服务器,因为不管是哪一个本地域名服务器,若要对因特网上任何一个域名进行域名解析,只要自己无法解析,就首先要求助于根域名服务器。假定所有的(共有13个不同IP地址的装置,每一套装置使用一个域名,,每一套装置在世界多个地点安装了根域名服务器,每一个地点的根域名服务器还可以有多台机器组成)根域名服务器都瘫痪了,那么整个DNS系统就无法工作。

    根域名服务器并不直接把待查询的域名装换成IP(它的机器里也没有存放这种信息),而是告诉本地域名服务器下一步应该找哪一个顶级域名服务器进行查询。 - 顶级域名服务器(TLD服务器):负责管理在该服务器注册的所有二级域名。当收到DNS查询请求是,就给出响应的回答(可能是最后的结果,也可能是下一步应该查找的域名服务器的IP地址).顶级域名服务器被分为三个部分:1.arpa是一个用作地址到名字转换的特殊域。 2.普通域或组织域(7个,每个3字符长) 3. 国家域 - 权限域名服务器:负责一个区的域名服务器。当一个权限域名服务器还不能给出最后的查询回答时,就会告诉发出查询请求的DNS客户(这里一般是本地域名服务器扮演DNS客户的角色),下一步应该找哪一个权限域名服务器 - 本地域名服务器:不属于树状图中的某个层次。当一个附近发出DNS请求是,这个请求报文的发送和响应报文的接收就交由本地域名服务器。每一个因特网服务提供者ISP,或一个大学,甚至大学里的某个系都可以拥有一个本地域名服务器,也叫默认域名服务器。在WINDOWS里,”属性” -> “网络” ->”Internet协议” -> “属性” ,就可以看到有关DNS地址的选项(自动获取或手动指定)。这里的DNS 服务器值得就是本地域名服务器,它里用户比较近,仅有几个路由的距离。当索要查询的主机也属于同一个本地ISP时,该本地域名服务器立即就能将查询的主机名转化为他的IP地址。

    采用协议

    简单来说: - DNS服务器间进行域传输的时候用TCP 53 - 客户端查询DNS服务器时用 UDP 53 - DNS查询超过512字节,TC标志出现 使用TCP发送

    解释说明: - DNS同时占用UDP和TCP端口53是公认的,这种单个应用协议同时使用两种传输协议的情况在TCP/IP栈也算是个另类,一种比较特殊的情况 - TCP与UDP的区别:

    - UDP和TCP协议的主要区别是两者在如何实现信息的可靠传递方面不同。TCP协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才继续传送其它信息,否则将一直等待直到收到确认信息为止。 - 与TCP不同,UDP协议并不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示。因此,通常人们把UDP协议称为不可靠的传输协议。 - 相对于TCP协议,UDP协议的另外一个不同之处在于如何接收突发性的多个数据报。不同于TCP,UDP并不能确保数据的发送和接收顺序。事实上,UDP协议的这种乱序性基本上很少出现,通常只会在网络非常拥挤的情况下才有可能发生。 - 既然UDP是一种不可靠的网络协议,那么还有什么使用价值或必要呢?其实不然,在有些情况下UDP协议可能会变得非常有用。因为UDP具有TCP所望尘莫及的速度优势。虽然TCP协议中植入了各种安全保障功能,但是在实际执行的过程中会占用大量的系统开销,无疑使速度受到严重的影响。反观UDP由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。

    DNS在进行区域传输的时候使用TCP协议,其它时候(如:域名解析)则使用UDP协议。

    DNS的规范规定了2种类型的DNS服务器,一个叫主DNS服务器,一个叫辅助DNS服务器。在一个区中主DNS服务器从自己磁盘上的数据文件中读取该区的DNS数据信息,而辅助DNS服务器则从区的主DNS服务器中读取该区的DNS数据信息。当一个辅助DNS服务器启动时,它需要与主DNS服务器通信,并加载数据信息,这就叫做区传送(zone transfer)。

    为什么既使用TCP又使用UDP?

    首先了解一下TCP与UDP传送字节的长度限制: 标识字段由客户程序设置并由服务器返回结果。客户程序通过它来确定响应与查询是否 匹配。 16 bit的标志字段被划分为若干子字段,如下图 • TC是1 bit字段,表示“可截断的 (truncated)”。使用UDP时,它表示当应答的总长度超 过512字节时,只返回前 512个字节。

    UDP报文的最大长度为512字节,而TCP则允许报文长度超过512字节。当DNS查询超过512字节时,协议的TC标志出现删除标志,如果使用UDP,512字节后的数据就无法接收到,这时则使用TCP发送。通常传统的UDP报文一般不会大于512字节。

    区域传送时使用TCP,主要有一下两点考虑:

    辅域名服务器会定时(一般3小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,则会执行一次区域传送,进行数据同步。区域传送将使用TCP而不是UDP,因为数据同步传送的数据量比一个请求和应答的数据量要多得多,肯定不止512个字节。 TCP是一种可靠的连接,保证了数据的准确性。

    域名解析时使用UDP协议: 客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。不用经过TCP三次握手,这样DNS服务器负载更低,响应更快。虽然从理论上说,客户端也可以指定向DNS服务器查询的时候使用TCP,但事实上,很多DNS服务器进行配置的时候,仅支持UDP查询包。

    查询方式:

    递归查询 主机向本地域名服务器的查询一般都是采用递归查询。所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS客户的身份。向其他根域名服务器继续发出查询请求报文(即替该主机继续查询),而不是让主机自己进行下一步的查询。因此,查询递归返回的查询结构或者是索要查询的IP地址,或者是报错表示无法查询到。

    迭代查询 本地域名服务器向根域名服务器的查询通常是迭代查询。迭代查询的特点是:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要买告诉本地域名服务器:“你下一步应当向哪一个域名服务器查询”。然后让本地域名服务器进行后续的查询(而不是替本地域名服务器进行后续查询)。本地域名服务器再想顶级域名服务器查询。顶级域名服务器收到请求后,要么给出对用的IP地址,㭉告诉本地域名服务器下一步应该想哪一个权限域名服务器请求,本地域名服务器就这样进行迭代查询。最后,自己得到IP地址,返回给客户主机。当然本地域名服务器也可以采用迭代查询。

    解析过程

    下面来详细解释DNS域名解析的过程:

    网络客户端就是我们平常使用的电脑,打开浏览器,输入一个域名。比如输入www.163.com,这时,你使用的电脑会发出一个DNS请求到本地DNS服务器。本地DNS服务器一般都是你的网络接入服务器商提供,比如中国电信,中国移动。

    查询www.163.com的DNS请求到达本地DNS服务器之后,本地DNS服务器会首先查询它的缓存记录,如果缓存中有此条记录,就可以直接返回结果。如果没有,本地DNS服务器还要向DNS根服务器进行查询。

    根DNS服务器没有记录具体的域名和IP地址的对应关系,而是告诉本地DNS服务器,你可以到域服务器上去继续查询,并给出域服务器的地址。

    本地DNS服务器继续向域服务器发出请求,在这个例子中,请求的对象是.com域服务器。.com域服务器收到请求之后,也不会直接返回域名和IP地址的对应关系,而是告诉本地DNS服务器,你域名的解析服务器(即前面说到的权限域名服务器)的地址。

    最后,本地DNS服务器向域名的解析服务器发出请求,这时就能收到一个域名和IP地址对应关系,本地DNS服务器不仅要把IP地址返回给用户电脑,还要把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问。

    高速缓存

    上面的过程是假设第一次查询,没有利用缓存的过程。 实际上为了提高DNS查询效率,减轻服务器负荷,在域名服务器和本机上都广泛的使用了高速缓存。高速缓存用来存放最近查询过的域名以及从何处获得域名映射的的记录。

    在不久前已经查询或www.163.com,那么本地域名服务器就可以直接把自己在告诉缓存中的结果取出来返回客户本机。

    如果本地域名服务器缓存没有对用IP地址,而缓存了顶级域名服务器地址,就可以跳过根域名服务器直接向顶级域名服务器发出请求,减少报文数量和根域名服务器的符合。

    每项都有一个缓存时间。权限域名服务器回答一个查询是,在响应中都指明绑定有效存在的时间值。增加此时间可减少网络开销,而减少此时间可提高域名转化的准确性。

    处理本地域名服务器,本机也有缓存。它在启动时从本地域名服务器下载名字和地址的全部数据库,维护存放自己最近使用的域名的高速缓存。查询域名时,在本机host文件和缓存中找不到时就会请求本地域名服务器。

    域名配置ZONE文件

    ZONE文件是DNS上保存域名配置的文件, 一个域名对应一个ZONE文件,现以abc.com的ZONE文件为 例展开,该==ZONE存在于权威DNS上==。

    $TTL 6h //第1行 $ORIGIN abc.com. //第2行 主权威DNS @ 3600 IN SOA ns1.ddd.com. root.ddd.com.( //第3行 929142851 ; Serial //第4行 1800 ; Refresh //第5行 600 ; Retry //第6行 2w ; Expire //第7行 300 ; Minimum //第8行 ) @ 2d IN NS ns1.ddd.com. //第9行 权威DNS 解析:域名->IP @ 2d IN NS ns2.ddd.com. //第10行 权威DNS @ 2d IN NS ns3.ddd.com. //第11行 权威DNS @ 3600 IN A 120.172.234.27 //第12行 a 3600 IN A 120.172.234.27 //第13行 b 3600 IN CNAME a.abc.com. //第14行 @ 3600 IN MX a.abc.com. //第15行 @ 3600 IN TXT "TXT" //第15行 第1行,这行内容给出了该域名(abc.com)各种记录的默认TTL值,这里为6小时。即如果该域名的记录没有特别定义TTL,则默认TTL为有效值。这的TTL是指该域名对应的IP可以被其他主机缓存的时间。第2行,这行内容标识出该ZONE文件是隶属那个域名的,这里为abc.com。第3行,从这行开始到第8行为该域名的SOA记录部分,这里的@代表域名本身。==ns1.ddd.com表示该域名的主权威DNS==。root.ddd.com表示该主权威DN S管理员邮箱,等价于root@ddd.com。

    第4行,Serial部分,这部分用来==标记ZONE文件更新==,如果发生更新则Serial要单增,否则MASTER不会通知SLAVE进行更新。

    第5行,Refresh部分,这个标记SLAVE服务器多长时间主动(忽略MASTER的更新通知)向MASTER复核Serial是否有变,如有变则更新之。

    第6行,Retry部分,如Refresh过程不能完成,重试的时间间隔。

    第7行,Expire部分,如SLAVE无法与MASTER取得联系,SLAVE继续提供DNS服务的时间,这里为2W(两周时间)。Expire时间到期后SLAVE仍然无法联 系MASTER则停止工作,拒绝继续提供服务。Expire的实际意义在于它==决定了MASTER服务器的最长下线时间(如MASTER迁移,DOWN机等)==。

    第8行,Minimum部分,这个部分定义了DNS对否定回答(NXDOMAIN即访问的记录在权威DNS上不存在)的缓存时间。

    第9-11行,定义了该域名的3个权威DNS服务器。通常NS记录的TTL大些为宜,这里为2天。设置过小只会增加服务器无谓的负担,同时解析稳定性会 受影响。这的TTL这的是其他主机对查询域名所属的权威DNS服务器的地址的缓存时间。第12-15行,比较简单,是两个A(对应有IP),CNAME,MX记录,不再讨论了。

    名词解释: SOA记录:权威记录从这里开始,它定义了3-8行这些重要的参数。 A记录:记录域名到IP之间的关联。 CAME记录:让域名B指向域名A,两个域名指向同一个IP,这时访问A或B结果都跟直接访问A时一样的效果。 MX记录:定义了发往XXX@ABC.COM邮箱的邮件服务器地址。 TXT记录:这个记录的内容是文本格式如126.COM的TXT为”v=spf1 include:spf.163.com -all”,TXT通常用于邮件服务器来标识自己的身份避免被认 为是垃圾邮件服务器。这里不再深入讨论。 其他不常用记录类型没有列出!

    转载请注明原文地址: https://ju.6miu.com/read-224114.html

    最新回复(0)