协议案例
DNS查询原理与入方向负载均衡的实现
文档ID: 星级:★★★★
摘要 调试工具 RR 协议报文 DNS查询原理
如何配置DNS
入方向负载均衡的实现 参考资料
1. 摘要
本文介绍了DNS的工作原理,包括报文格式,各种记录的区别,查询原理,
Windows上的DNS调试工具,DNS服务器的部分常用配置,以及负载均衡设备在进行入方向负载均衡时的工作原理。
2. 调试工具
通常网络访问正常,DNS出现故障时,会出现很多奇怪的现象,比如QQ可以正
常登陆,却不能访问网页。绝大部分软件在访问Internet时,需要通过DNS将域名解析为IP地址,再进行IP寻址,所以很多软件在DNS不正常时是不能工作的,但是有些软件可以,比如QQ,这种软件不使用域名,而是直接使用IP通信。
通常在DNS出现故障时候,我们会使用ping “域名”来调试,比如要解析域名
www.h3c.com,可以直接ping www.h3c.com来尝试解析这个域名:
如果出现了www.h3c.com的IP,则说明主机可以解析到这个域名,但是并不代表
DNS工作正常。主机在ping www.h3c.com的时候,它首先会查自己的hosts文件,Windows
第1页
协议案例
主机这个文件位于c:\\windows\\system32\\drivers\\etc\\hosts, *unix主机位于/etc/hosts;如果hosts文件中没有相关记录,主机会查询自己的DNS Cache,如果Cache中有,则直接从缓存中提取IP,如果缓存中没有,才会向DNS发起查询;通常为了验证DNS是否工作正常,需要先查看host文件,并清除DNS Cache(命令:ipconfig /flushdns)。
nslookup是一个最常见的DNS调试工具,在处理上与ping不同,nslookup不会去
查hosts文件和DNS Cache,它会直接向DNS服务器发送请求,并且可以使用命令更改DNS服务器,而不需要修改TCP/IP配置。
但是使用nslookup在你配置的DNS服务器上解析到IP,也不代表DNS工作正常,
因为DNS服务器也会在自己的DNS Cache中查询,如果DNS返回结果为“非权威应答”,则代表这条记录为DNS服务器从它的Cache中提取的。图中例子,第一次查询www.3com.com时,由于www.3com.com在服务器上没有Cache,所以查询到的结果上没有“非权威应答”的提示,而第二次查询时,由于服务器上已有Cache,所以会带有“非权威应答”的提示。
第2页
协议案例
nslookup工具有很多参数可以配置,通常可以配置查询类型和修改domain以完成
不同类型的查询和避免一些处理上的错误。如果PC加入了AD域,nslookup会自动在要查询的域名后增加AD域的域名,这样会造成查询错误,这个时候需要修改domain(或者在域名后面加上”.”),命令为 set domain=.。下图为查询ipv6.google.com的AAAA记录(RR的一种)。
3. RR
RR是Resource Records的意思,是DNS中记录的各种域名与主机信息,也就是DNS
系统所提供的核心信息,RR包括以下几部分,后面会介绍RR的报文构成: NAME
域名 类型
A
主机地址 别名
主机CPU OS 信息 邮件服务器记录 NAME的授权域名服务器 部分域名空间的指针 起始授权区域 IPV6主机地址
协议族或协议实例
第3页
Type(16bits)
CNAME HINFO MX NS PTR SOA AAAA
Class(16bits)
协议案例
IN Internet系统 CH
Chaos 系统
TTL (32bits) RDATA
4. 协议报文
表示RR可以缓存的时间,单位为秒; 资源数据,即服务器提供的资源信息
DNS承载于UDP之上,在特殊情况下也可以使用TCP,端口都是53,当报文大小超过512字节时,DNS报文会进行截取,并将DNS首部的TC置位,这个时候客户端将向服务器发起TCP连接来进行DNS查询。报文包括12字节的首部和可变长的问题、回答、授权、额外信息五部分,其中回答、授权、额外信息都是由RRs组成。
0 15 16 31 标识 问题数 授权资源数 标志 回答资源数 附加资源数 问题(变长) 回答(变长) 授权(变长) 附加信息(变长) 标识 标识字段由客户程序设置,服务器在返回结果携带。客户程序通过它来确定响应与查询是否匹配。 标志
QR Opcode
AA TC RD RA Zero Rcode 1 4 1 1 1 1 3 4 QR: 0表示查询,1表示响应;
Opcode: 0表示标准查询,1表示反向查询,2表示服务器状态查询,3-15保留; AA(Authoritative ):
0表示非授权域名服务器应答,1表示为授权域名服务器应答; TC(Truncated):
如果DNS报文大小超过512字节,则报文会进行截取,这个时候TC需要置位,表示报文被截断;
RD(Recursion desired):
1表示期望递归,0表示不期望递归;这个标志位决定了internet上DNS的查询与响应方式,后面将详细介绍;
RA(Recursion available):
1表示服务器具备递归查询的能力,大多数服务器提供递归查询,但根DNS服务器不提供此服务;
Zero(reserved):
保留位,必须为0; Rcode(Reply Code):
第4页
协议案例
0表示没有差错,1格式错误,2服务器失败,3表示域名错误,4无法执行。
问题数(Questions)
后面“问题”域中的问题的数量; 回答资源数(Answer RRs)
后面“回答”域中的RR的数量; 授权资源数
后面“授权”域中的RR的数量; 附加资源数
后面“附件信息”域中的RR的数量; 问题
问题由三部分组成,NAME、Type和class;
0 15 16 31 NAME(可变长域名) Type(类型,A,AAAA,MX等) Class(协议族 IN,CH) NAME可变长的,并且不以32bits填充,为自由长度,报文中的域名并不是使用dot(.)来隔离,而是在每个node的前面用一个字节标明字符串的长度,协议规定长度范围为0-63,而0就是根节点,所以每个域名都是以0结束的。查询名可以有多个,这个数目在前面的首部中由”问题数”决定,每个域名之间用0隔开。
3 w w w 3 h 3 c 3 c o m 0
Type和Class与RR中描述的一致,Class基本上只有IN (1)。 Type A AAAA NS CNAME PTR HINFO MX Code 1 28 2 5 12 13 15
响应资源、授权资源、附件资源
这三部分都是由RR(Resource Records)组成,都是变长,每条RR记录包括域名(可变长),资源数据与类型和类有关,所以也为变长。下图为RR的结构: 0 15 NAME(可变长域名) Type TTL 资源数据长度 资源数据(变长) Class 16 31 下面是一个标准的DNS请求和应答报文:
第5页
协议案例
5. DNS查询原理
DNS查询分为递归和迭代两种方式。递归查询是指服务器会替代源地址进行查询,类似于代理的工作方式。迭代查询是指服务器回给客户端的信息中,RA不置位,并携带有其他DNS服务器的信息,让客户端再向其他服务器发起查询,由于internet上的根服务器压力巨大,所以根服务器都是不接受递归查询的,因此internet上的查询过程基本上都是迭代的。
递归查询
1、 PC想要访问一个域名,首先会查自己的HOST文件和DNS Cache; 2、 HOST文件和DNS Cache中如果有相应记录,则查询结束,否则继续; 3、 PC会向自己配置的DNS服务器发送查询,RD置位(期待递归);
第6页
协议案例
4、 本地DNS服务器会查看本机上是否有相应的DNS区域,无此区域则查询 DNS
Cache;
5、 如果本地DNS中有相应的区域,无论是否有这条记录,DNS都会直接返回结果给
PC(授权应答)。如果没有这个区域,则会查询DNS Cache,如果Cache中有相应的记录则直接返回结果给PC(非授权应答),查询结束,否则继续;
6、 本地DNS向上级DNS服务器(通常是配置的转发器)发送DNS请求,RD置位
(期待递归);
7、 上级DNS服务器将重复步骤4、5、6;
8、 当本地DNS服务器收到上级的DNS应答后,将应答报文转发给PC;
这种逐级向上请求的方式就是递归查询,从缓存读取的记录都是非授权的,只有服务器上相应的区域是,回复的应答报文才是授权的。
以下为递归查询的过程报文:
迭代查询 PC发出的DNS请求,RD置位,DNS服务器收到后,如果本地没有相应的区域,并且没有配置转发器,则会向根服务器发送请求,这时请求报文的RD将不置位(服务器默认配置),根服务器在回应报文中并不携带answer,而是携带Authoritative nameservers和Additional records,分别携带有其他域名服务器的NS记录和A记录。如果要查询的域名为www.tianya.cn,根服务器的应答将携带有负责cn.区域的DNS服务器的域名和IP(NS记录和A记录)。
下图为一次典型迭代查询的过程报文:
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.)服务器
第7页
协议案例
的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记录,在调试的时候,也可以手动进行迭代。
6. 如何配置DNS
下图为一次典型的internet上的DNS查询过程,这里以windows server 2003为例,讲解在不同位置上,DNS服务器的配置。
服务器192.168.207.207: 作为本地服务器,不需要进行任何配置,根服务器为内置表项,不需要手动配置; 服务器192.5.5.241: 作为根服务器,需要配置不允许进行递归查询,并配置响应区域的委派:
1、勾选属性中的禁用递归,关闭递归查询功能。
第8页
协议案例
2、配置根区域”.”
3、配置委派,将cn.委派给服务器。
第9页
协议案例
服务器203.119.27.1及其后各级服务器: 配置区域委派即可,最后的服务器配置相应的A记录就可以了;
7. 入方向负载均衡的实现
由于Internet上的DNS查询都会由本地DNS服务器进行递归,然后在internet上进
行迭代,所以最终到达域名所有者的DNS服务器时,源地址是客户端所在区域的本地DNS服务器的地址,可以认为本地DNS服务器与PC位置基本一致。负载均衡在这个组网中,通常是替换域名所有者的DNS服务器,在返回应答前,向本地DNS发送探测报文,判断源地址距离哪个ISP线路更近,从而决定返回哪条A记录(通常A记录的IP为相应ISP线路上的NAT Server的IP,但是并没有必然关系)。
1、 PC向本地DNS服务器发送DNS请求 ,RD置位;
2、 本地DNS服务器如果无缓存,则向根服务器发送DNS请求,RD不置位,如果配置为置
位,根服务器会在回应报文中将RA置位,后续本地DNS服务器不再将RD置位;
第10页
协议案例
3、 根服务器回应本地DNS服务器的请求,回应报文中无Answer,在Authoritative
nameservers中包含指定DNS服务器的NS记录,Additional records包含前面这里NS记录对应的A记录(203.119.27.1);
4、 本地DNS服务器收到根服务器的应答后,提取其中的Ns记录和A记录,根据A记录中的
地址,将DNS请求发送给203.119.27.1; 5、 与步骤3相同,对应A记录IP为221.11.172.154;
6、 本地DNS服务器收到根服务器的应答后,提取其中的Ns记录和A记录,根据A记录中的
地址,将DNS请求发送给221.11.172.154;
7、 LoadBalance根据配置的ISP线路(这里假设有中国电信和中国联通2条ISP),分别从
2根线路,向本地DNS服务器发送NQA探测报文。根据探测报文的时延,TTL等,按照一定算法来确定从哪条ISP线路距离客户端更近;
注意:这里不是向PC发送探测报文,而是本地DNS服务器的地址,LoadBalance无法知道PC的IP地址。所以在进行负载均衡调试的时候,并不需要将PC接入不同的运营商来测试,只需要在nslookup中,使用命令server来更换DNS服务器的地址来进行测试,注意前面提到的,只有看不到非授权应答,才证明负载均衡工作正常; 8、 将携带A记录的应答报文发送给本地DNS服务器; 9、 本地DNS服务器将携带A记录的应答报文发送给PC; 10、PC上的应用程序根据A记录中的IP进行寻址访问。 8. 参考资料 RFC 1035
第11页