DNS协议

1.DNS

1.1 DNS起源

         在整个以TCP/IP为核心的互联网中,计算机之间进行互联通信就必须拥有唯一的IP地址,所有的数据通信都是基于IP地址。对机器而言,只需要知道IP地址转化的二进制地址,对于用户而言,因为IP地址这样一连串的数字,却不方便记忆,带来了诸多的不便。

   为了实现主机到IP地址的映射,每台主机上都会存有一个hosts的数据库文件,用来存储主机名到IP地址的映射关系。如图1-1

图1-1

但是随着网络规模的不断扩大,接入网络的计算机数量也越来越多。而且当某台计算机的IP地址更新等因素都会使hosts文件内容改变。这样每台计算机的hosts文件也必须定期更新才能正常使用网络。后来,DNS开始派上用场。

1.2 DNS结构

      DNS(Domain Name System)域名系统,是网络中的域名服务器,提供域名和IP地址相互映射的分布式数据库,可以将主机名翻译成IP地址,也可以将IP地址翻译成主机名。这就是我们所说的域名解析。在域名系统中一个域名对应一个IP地址,一个IP地址可以对应多个域名。在每一个局域网或者组织内部都会有一个DNS服务器,用来管理本区域的主机和IP地址的映射关系。彼此之间,又会有一个高一级的DNS服务器来进行管理不同区域的主机,这样就形成了域名的分层结构。域名一般由几个英文字母(或英文字符序列)用点号连接构成。例如:pku.edu.cn,表示北京大学的域名。“pku”表示北京大学,“edu”表示高等教育组织机构,“cn”则代表中国。见图1-2
  

图1-2

   根域名服务器是域名服务器的最高一级服务器,全球共有13台。负责管理各个组织和国家互联网。根域名服务器下管理着顶级域名服务器,顶级域名服务器下管理权威域名服务器。如下图所示

图1-3

1.3 DNS查询过程

         大多数主机之间通信都是通过DNS查询来实现的。图中kusa.ac.jp域中的计算机想要访问网站www.ietf.org。此时的DNS查询流程如图所示。

图1-4

计算机pepper要访问www.ietf.org

①向DNS服务器查询地址。

②由于kusa的DNS服务器并不知道www.ietf.org的IP地址,它向根域名服务器请求进行查询。

③由于根域名服务器知道www.ietf.org的IP地址,因此将地址返回。

④向ietf.org的域名服务器查询www.ietf.org的IP地址。

⑤将查到的IP地址返回给客户端。

⑥pepper开始与www.ietf.org进行通信。

   解析器为了调查IP地址,向域名服务器进行查询处理。接收这个查询请求的域名服务器首先会在自己的数据库进行查找。如果有该域名所对应的IP地址就返回。如果没有,则域名服务器会再向上一层根域名服务器进行查询处理。因此,如果所示,从根开始对这棵树按照顺序进行遍历,直到找到指定的域名服务器,并由这个域名服务器返回想要的数据。

   这里介绍一下DNS查询的两种方法,递归查询和迭代查询。

递归查询:本机向本地域名服务器发出一次查询请求,就静待最终的结果。如果本地域名服务器无法解析,自己会以DNS客户机的身份向其它域名服务器查询,直到得到最终的IP地址告诉本机

迭代查询:本地域名服务器向根域名服务器查询,根域名服务器告诉它下一步到哪里去查询,然后它再去查,每次它都是以客户机的身份去各个服务器查询

1.4 DNS的正向解析与反向解析

         DNS的正向解析指的是通过域名查找出IP地址。DNS的反向解析指的是通过IP地址查找出域名。正向解析也是现实生活中最常用的,通常我们用浏览器上网都是通过DNS的正向解析。

   正向解析:通过主机名获取广域网对应的IP地址。

图1-5

114.114.114.114是DNS名字服务器信息,218.93.250.18不是要请求的DNS服务器,是之前访问过的或者直接在上一级查找的给予的回应。

   反向解析:通过IP地址查找出对应的主机名。我们经常使用到得DNS服务器里面有两个区域,即“正向查找区域”和“反向查找区域”,正向查找区域就是我们通常所说的域名解析,反向查找区域即是这里所说的IP反向解析,它的作用就是通过查询IP地址的PTR记录来得到该IP地址指向的域名,当然,要成功得到域名就必需要有该IP地址的PTR记录。PTR记录是邮件交换记录的一种,邮件交换记录中有A记录和PTR记录,A记录解析名字到地址,而PTR记录解析地址到名字。地址是指一个客户端的IP地址,名字是指一个客户的完全合格域名。通过对PTR记录的查询,达到反查的目的。由于在域名系统中,一个IP地址可以对应多个域名,因此从IP出发去找域名,理论上应该遍历整个域名树,但这在Internet上是不现实的。为了完成逆向域名解析,系统提供一个特别域,该特别域称为逆向解析域in-addr.arpa。这样欲解析的IP地址就会被表达成一种像域名一样的可显示串形式,后缀以逆向解析域域名"in-addr.arpa"结尾。例如一个IP地址:222.211.233.244,其逆向域名表达方式为:244.233.211.222.in-addr.arpa
两种表达方式中IP地址部分顺序恰好相反,因为域名结构是自底向上(从子域到域),而IP地址结构是自顶向下(从网络到主机)的。实质上逆向域名解析是将IP地址表达成一个域名,以地址做为索引的域名空间,这样逆向解析的很大部分可以纳入正向解析中。

查看反向解析信息:
   命令行输入 nslookup -qt=ptr yourIP  
   从返回的信息中您可以看到反向解析的结果。

图1-6

1.5 DNS应用协议与报文

         DNS域名系统作为一个应用层的协议,只有两种报文,请求报文和响应报文,使用UDP作为传输协议,长度8字节,端口号为53,由于使用的是UDP协议,所以整个解析过程更加快速。


DNS报文结构如下:

Header

0                     15 16                        31

图1-7

头部

1.会话标识(2字节):是DNS报文的ID标识,对于请求报文和其对应的应答报文,这个字段是相同的,通过它可以区分DNS应答报文是哪个请求的响应

2.标志(2字节)

Flags

QR

opcode

AA

TC

RD

RA

(zero)

rcode

1     4      1       1     1      1       3      4

图1-8


 

图1-9

3.数量字段(总共8字节):Questions、Answer RRs、Authority RRs、Additional RRs 各自表示后面的四个区域的数目。Questions表示查询问题区域节的数量,Answers表示回答区域的数量,Authoritative namesversers表示授权区域的数量,Additional recoreds表示附加区域的数量

4.Queries区域

0                      15 16                     31

图1-10

Name(查询名)长度不固定,且不使用字节填充,一般就是需要查询的域名。

图1-11

Class(查询类)通常为1,表明是Internet。

资源记录(RR)区域(包括回答区域,授权区域和附加区域)


 

0                       15  16                       31

Name(域名,2字节或长度不固定)

Type(查询类型)

Class(查询类)

Time to live(生存时间)

Data Length(资源数据长度)

                Data(资源数据,长度不固定)

图1-12

该区域有三个,但格式都是一样的。这三个区域分别是:回答区域,授权区域和附加区域

域名(2字节或不定长):它的格式和Queries区域的查询名字字段是一样的。有一点不同就是,当报文中域名重复出现的时候,该字段使用2个字节的偏移指针来表示。比如,在资源记录中,域名通常是查询问题部分的域名的重复,因此用2字节的指针来表示,具体格式是最前面的两个高位是 11,用于识别指针。其余的14位从DNS报文的开始处计数(从0开始),指出该报文中的相应字节数。一个典型的例子,C00C(1100000000001100,12正好是头部的长度,其正好指向Queries区域的查询名字字段)。

查询类型:表明资源纪录的类型,见1.2节的查询类型表格所示 

查询类:对于Internet信息,总是IN

生存时间(TTL):以秒为单位,表示的是资源记录的生命周期,一般用于当地址解析程序取出资源记录后决定保存及使用缓存数据的时间,它同时也可以表明该资源记录的稳定程度,极为稳定的信息会被分配一个很大的值(比如86400,这是一天的秒数)。

资源数据:该字段是一个可变长字段,表示按照查询段的要求返回的相关资源记录的数据。可以是Address(表明查询报文想要的回应是一个IP地址)或者CNAME(表明查询报文想要的回应是一个规范主机名)等

5.下面给出Wireshake抓包记录

请求报文

响应报文如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值