DNS篇之DNS协议详解


一、DNS原理

1、什么是DNS?

域名系统(Domain Name System缩写DNS,Domain Name被译为域名)是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。

D N S的一个基本特性是使用超高速缓存。即当一个名字服务器收到有关映射的信息(主
机名字到 I P地址)时,它会将该信息存放在高速缓存中。这样若以后遇到相同的映射请求,
就能直接使用缓存中的结果而无需通过其他服务器查询。
 

2、DNS顶级域

顶级域名被分为三个部分:
1) arpa是一个用作地址到名字转换的特殊域 。
2) 7个3字符长的普通域。有些书也将这些域称为组织域。
3) 所有2字符长的域均是基于ISO3166中定义的国家代码,这些域被称为国家域,或地理域

顶级域名(Top level domain,简称TLD)由美国的ICANN机构管理

描述
com商业组织
edu教育机构
gov其他美国政府部门
int国际组织
mil美国军事网点
net网络
org其他组织

3、DNS查询过程

由于 ICANN 管理着所有的顶级域名,所以它是最高一级的域名节点,被称为根域名(root domain)。在有些场合,www.example.com 被写成www.example.com. ,即最后还会多出一个点。这个点就是根域名。

理论上,所有域名查询都必须先查询根域名,因为只有根域名才能告诉你,某个顶级域名由哪台服务器管理。事实上也确实如此,ICANN 维护着一张列表,里面记载着顶级域名和对应的托管商。

比如,我要访问www.example.com ,就必须先询问 ICANN 的根域名列表,它会告诉我.com域名由 Verisign 托管,我必须去找 Verisign,它会告诉我example.com服务器在哪里。

由于根域名列表很少变化,大多数 DNS 服务商都会提供它的缓存,所以根域名的查询事实上不是那么频繁。

保存 DNS 根区文件的服务器,就叫做 DNS 根域名服务器(root name server)。

递归查询:客户端向本地 DNS 服务器(即首选DNS服务器)发出请求后,一直处于等待状态,直到本地名称服务器返回查询结果。当客户端向本地 DNS 服务器发出请求后,本地 DNS 服务器查询本机缓存,如果有记录,则直接返回;如果没有,则本地 DNS 服务器以客户端的身份将查询请求发给根域名服务器,这个过程是递归查询过程。如果递归查询未查出结果,则开始进行迭代查询。

迭代查询:本地 DNS 服务器以客户端的身份将查询请求发给根域名服务器后,根域名服务器通过查询返回给本地 DNS 服务器 .com 顶级名称服务器的IP地址;本地DNS服务器收到 .com 顶级名称服务器的IP地址后继续向.com顶级名称服务器发出请求,顶级名称服务器收到请求后查询缓存,如果有记录则直接返回本地DNS服务器,如果没有,则返回baidu.com二级名称服务器的IP地址;本地名称服务器继续发出请求,二级名称服务器同样查找缓存返回www.baidu.com的IP地址。(最多127级域)。本地 DNS 服务器向根服务器的查询就是迭代查询。

一次完整的查询请求经过的流程: Client -->hosts文件 -->DNS Service Local Cache --> DNS Server (recursion) --> Server Cache --> iteration(迭代) --> 根--> 顶级域名DNS-->二级域名DNS…

二、DNS包结构

1、

DNS查询响应的一般格式
标识标志
问题数资源记录数
授权资源记录数附加资源记录数
                                                    查询问题
                                         回答(资源记录数可变)
                                         授权(资源记录数可变)
                                        附加信息(资源记录数可变)

这个报文由12个字节的首部和4个可变的字段组成。

标识字段:由客户程序设置并由服务器返回结果。客户程序通过它来确定响应与查询是否匹配。

标志字段:16 bit的标志字段被划分为若干子字段

标志位字段含义
QR(1 bit)0表示查询报文, 1表示响应报文
opcode(4 bit)0表示标准查询,1表示反向查询,2表示服务器状态请求
AA(1 bit)授权回答 (authoritative answer)
TC (1 bit)可截断的 (truncated),使用UDP时,它表示当应答的总长度超过512字节时,只返回前512个字节
RD(1 bit)期望递归( recursion desired)。在一个查询中设置,并在响应中返回。这个标志告诉域名服务器必须处理这个查询,也称为一个递归查询。如果该位为 0,且被请求的名字服务器没有一个授权回答,它就返回一个能解答该查询的其他名字服务器列表,这称为迭代查询。
RA(1 bit)可用递归。如果域名服务器支持递归查询,则在响应中将该比特设置为 1。大多数域名服务器都提供递归查询,除了某些根服务器。
zero(3 bit)必须为0
rcode(4 bit)

0(没有差错)、3(名字差错)2(服务器错误)

名字差错只有从一个授权名字服务器上返回,它表示在查询中制定的域名不存在。


随后的 4个16 bit 字段说明最后 4个变长字段中包含的条目数。对于查询报文,问题( question )数通常是 1,而其他3项则均为0。类似地,对于应答报文,回答数至少是 1,剩下的两项可以是0或非0。

2、DNS查询报文中的问题部分

DNS查询报文中问题部分的格式
                                                        查询名
查询类型查询类

查询名:即要请求的域名,它是一个或多个标识符的序列。每个标识符以首字节的计数值来说明随后标识符的字节长度,每个名字以最后字节为 0结束,长度为0的标识符是根标识符。如下图报文06表示了teredo长度,04表示ipv6的长度,以此类推,最后以00结束。计数字节的值必须是 0 ~ 63的数,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。

最常用的查询类型是 A类型,表示期望获得查询名的 I P地址。一个P T R查询则请求获得一个I P地址对应的域名。

查询类通常是1(IN),指互联网地址

3、DNS响应报文中的资源记录部分
     DNS报文中最后的三个字段,回答字段、授权字段和附加信息字段,均采用一种称为资源记录RR( Resource Record)的相同格式。
 

DNS资源记录格式
                                                        域名(可变长度)
类型
                                                       生存时间
资源数据长度资源数据(可变长度)
                                                     资源数据(可变长度)

如下图抓包展示的回答字段的值

域名是记录中资源数据对应的名字。它的格式和前面介绍的查询名字段格式相同。

类型说明RR的类型码。它的值和前面介绍的查询类型值是一样的。类通常为internet数据。

生存时间字段是客户程序保留该资源记录的秒数。

资源数据长度说明资源数据的数量。该数据的格式依赖于类型字段的值。对于类型 1( A记录)资源数据是4字节的I P地址。

三、DNS类型-资源记录

我们已经见到了一些不同类型的资源记录(RR):IP地址查询为A类型,指针查询为类型PTR。也已看到了由名字服务器返回的资源记录:回答RR、授权RR和附加信息RR。现有大约20种不同类型的资源记录,下面将介绍其中的一些。

类型数值描述
A1域名的IPv4地址
AAAA34域名的IPv6地址
CNAME5域名的别名,可以理解为域名的重定向,主要方便IP地址的变更
NS2指定哪个域名服务器可以解析该域名的子域名
SOA6授权机构记录,记录ns中哪个是主服务器。
PTR12根据IP反向查找域名
HINFO13主机信息:包括说明主机CPU和操作系统的两个字符串。并非所有的站点均提供它们系统的HINFO记录
MX15mtp邮箱域名的IP地址。给client端指明某个域名的邮件服务器地址
AXFR252对区域转换的请求
ANY255对所有记录的请求

四、怎么发送不同请求?

DNS-nslookup与dig的使用,这是发送DNS请求两个常用的工具

CSDN

五、DNS服务器搭建

CSDN

备注:

RFC 1034 [Mockapetris 1987a] 说明了D N S的概念和功能, RFC 1035 [Mockapetris 1987b]详细说明了DNS 的规范和实现。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值