DNS协议

 

DNS(domain name system)域名系统,是inter网上作为域名和IP地址相互映射的一个分布式数据库,这个分布式数据库采用树形结构。通过主机名得到对应IP地址的过程叫做域名解析。

DNS传输使用的是传输层的UDP协议,端口为53。

下图是DNS报文格式。

要想了解DNS,就先要了解域名结构。

为了达到唯一性的目的,inter网在命名的时候采用了层次结构的命名法。每一个域名都是一个标号序列(labels),用字母(A-Z,a-z,大小写等价),数字(0-9),连接符(-)组成,标号序列总长度不能超过255个字符,它由点号分割成一个个的标号(label),每个标号应该在63个字符之内,每个标号都可以看成一个层次的域名。级别最低的域名写在左边,级别最高的域名卸载右边。

有了域名还不行,必须得有东西去解析它。域名需要遍布全世界的域名服务器去解析,域名服务器实际上就是装有域名系统的主机。有高到低进行层次划分可以划分为几大类。

根域名服务器:最高层次的域名服务器,本地域名服务器如果解析不了就会像根域名服务器发送请求。全球共有13个不同IP地址根域名服务器,它们用一个英文字母命名,从a-m。每个根域名服务器都有镜像服务器,每个根域名服务器和镜像服务器共享一个IP,我们中国只有6组根域名服务器镜像(f,i三台,j,l)。当你对某个根域名服务器发出请求的时候,请求会被路由到该根域名服务器离你最近的镜像服务器。

顶级域名服务器:负责管理在该顶级域名服务器下注册的二级域名。当根域名服务器告诉查询者顶级域名服务器地址时,查询者紧接着就会到顶级域名服务器进行查询。

权限域名服务器:负责一个区的域名解析工作。

本地域名服务器:当一个主机发出DNS查询请求的时候,这个查询请求首先就是发给本地域名服务器的。

域名解析的过程如下。

域名解析总体可分为两大步骤,第一个步骤是本机向本地域名服务器发出一个DNS请求报文,报文里携带需要查询的域名;第二个步骤是本地域名服务器向本机回应一个DNS响应报文,里面包含域名对应的IP地址。注意:第二大步骤中采用的是迭代查询,其实是包含了很多小步骤的,详情见下面的流程分析。

(1)DNS客户机向本地域名服务器发送查询请求,查找域名www.abx.xyz.com的IP地址。本地域名服务器查询本地的缓存,如果有这个地址,则将地址返回给DNS客户机。

(2)如果本地域名服务器缓存没有这个地址,则发送查询请求到根域名服务器,询问www.abx.xyz.com的地址,根域名服务器会将子域com的域名服务器的地址返回给本地域名服务器。

(3)本地域名服务器再向.com域发送查询请求,com域服务器无法提供地址,但会把下一级的域名服务器xyz.com的地址发送给本地域名服务器。

(4)重复(2)、(3)的过程,最后xyz.com域名服务器把abc.xyz.com域名服务器地址发送给本地域名服务器。

(5)本地域名服务器再向abc.xyz.com域名服务器发送地址查询请求。abc.xyz.com找到了www.abc.xyz.com的地址就将这个地址发送给本地域名服务器。

(6)本地域名服务器把地址保存到缓存,同时返回给DNS客户机。

该解析过程用到了两种查询方式,分别是递归查询和迭代查询。

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

迭代查询:本地域名服务器向根域名服务器的查询通常采用迭代查询。只是通常,也有的采用递归查询。

下面是抓包分析。迭代查询的特点:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地服务器进行后续的查询。根域名服务器通常是把自己知道的顶级域名服务器的 IP 地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的 IP 地址,要么告诉本地服务器下一步应当向哪一个权限域名服务器进行查询。最后,本地域名服务器得到了所要解析的 IP 地址或报错,然后把这个结果返回给发起查询的主机。

 

阅读剩余
THE END