网络技术人员必掌握的四大应用协议:DNS协议的基础知识点

一、报文格式

DNS承载于UDP之上,在特殊情况下也可以使用TCP,端口都是53,当报文大小超过512字节时,DNS报文会进行截取,并将DNS首部的TC置位,这个时候客户端将向服务器发起TCP连接来进行DNS查询。报文包括12字节的首部和可变长的问题、回答、授权、额外信息五部分,其中回答、授权、额外信息都是由RRs组成。

RR是Resource Records的意思,是DNS中记录的各种域名与主机信息,也就是DNS系统所提供的核心信息。

1、标识(2字节):标识字段由客户程序设置,服务器在返回结果携带。客户程序通过它来确定响应与查询是否匹配。

2、标志(2字节):

a.QR:0表示查询,1表示响应;

b.Opcode:0表示标准查询,1表示反向查询,2表示服务器状态查询,3-15保留;

c.AA(Authoritative ): 0表示非授权域名服务器应答,1表示为授权域名服务器应答;

d.TC(Truncated): 如果DNS报文大小超过512字节,则报文会进行截取,这个时候TC需要置位,表示报文被截断;

e.RD(Recursion desired): 1表示期望递归,0表示不期望递归;这个标志位决定了internet上DNS的查询与响应方式,后面将详细介绍;

f. RA(Recursion available): 1表示服务器具备递归查询的能力,大多数服务器提供递归查询,但根DNS服务器不提供此服务;

g. Zero(reserved):保留位,必须为0;

h.Rcode(Reply Code):0表示没有差错,1格式错误,2服务器失败,3表示域名错误,4无法执行;

3、问题数(2字节):"问题"域中的问题的数量。

4、资源记录数(2字节):"回答"域中的RR的数量。

5、授权资源数(2字节):"授权"域中的RR的数量。

6、附加资源数(2字节):"附件信息"域中的RR的数量。

7、查询问题:

由3部分组成,NAME、Type和Class;

a.NAME:为可变长的,可以为多个;

b.Type:请求类型;

A:主机地址

AAAA:IPV6主机地址;

NS:NAME的授权域名服务器;

CNAME:别名;

PTR:部分域名空间的指针;

HINFO:主机;

MX:邮件服务器记录;

c.Class:基本只有IN(Internet系统),另外有CH(chaos);

8.回答、授权、附加信息:

这三部分都是由RR(Resource Records)组成,都是变长,每条RR记录包括域名(可变长),资源数据与类型和类有关,所以也为变长。下图为RR的结构:

NAME:可变长;

Type(2字节):返回类型;

TTL:可以缓存的时间,单位为s;

资源数据长度:服务器提供的资源信息;

二、正常DNS查询和应答报文分析

1、DNS请求报文

2、DNS应答报文

3、DNS应答详细信息,含回答、授权、附加信息的报文

三、查询原理

DNS查询分为递归和迭代两种方式。递归查询是指服务器会替代源地址进行查询,类似于代理的工作方式。迭代查询是指服务器回给客户端的信息中,RA不置位,并携带有其他DNS服务器的信息,让客户端再向其他服务器发起查询,由于internet上的根服务器压力巨大,所以根服务器都是不接受递归查询的,因此internet上的查询过程基本上都是迭代的。

递归查询

工作步骤:

1、PC想要访问一个域名,首先会查自己的HOST文件和DNS Cache;

2、HOST文件和DNS Cache中如果有相应记录,则查询结束,否则继续;

3、PC会向自己配置的DNS服务器发送查询,RD置位(期待递归);

4、本地DNS服务器会查看本机上是否有相应的DNS区域,无此区域则查询DNS Cache;

5、如果本地DNS中有相应的区域,无论是否有这条记录,DNS都会直接返回结果给PC(授权应答)。如果没有这个区域,则会查询DNS Cache,如果Cache中有相应的记录则直接返回结果给PC(非授权应答),查询结束,否则继续;

6、本地DNS向上级DNS服务器(通常是配置的转发器)发送DNS请求,RD置位(期待递归);

g.上级DNS服务器将重复步骤4、5、6;

7、当本地DNS服务器收到上级的DNS应答后,将应答报文转发给PC;

这种逐级向上请求的方式就是递归查询,从缓存读取的记录都是非授权的,只有服务器上相应的区域是,回复的应答报文才是授权的。

迭代查询

工作步骤:

1、PC发送查询报文给DNS服务器192.168.207.207;

2、DNS服务器192.168.207.207进行递归查询,将查询转发给根服务器192.5.5.241;

3、根服务器192.5.5.241回应响应报文,携带授权DNS(.cn.)服务器的NS记录,指向DNS服务器203.119.27.1;

4、DNS服务器192.168.207.207再将查询报文转发给DNS(.cn.)服务器203.119.27.1;

5、DNS(.cn.)服务器203.119.27.1回应响应报文, 携带授权DNS(tianya.cn.)服务器的NS记录,指向DNS服务器221.11.172.10;

6、DNS服务器192.168.207.207再将查询报文转发给DNS(tianya.cn.)服务器221.11.172.10;

7、DNS(tianya.cn.)服务器221.11.172.10发现本机上有相应的区域,查询是否有对应的A记录,返回给DNS服务器192.168.207.207;

8、本地DNS服务器192.168.207.207,将DNS(tianya.cn.)服务器221.11.172.10返回到应答报文转发给PC;

下图为根服务器回应给本地DNS(第17个报文)服务器的内容:

DNS服务器发往根服务器的请求RD缺省未置位,如果将根服务器配置为转发器,则会发送RD置位的报文给根服务器,根服务器不支持递归,回应报文RA不置位,这时服务器会正常的向下一台服务器发送RD未置位的请求。

Windows只能发送RD置位的报文,当服务器的响应报文中RA未置位时,Windows无法像DNS服务器一样进行迭代查询,查询会失败,但是windows可以显示响应报文中的NS和A记录,在调试的时候,也可以手动进行迭代。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180212A0BOA000?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券