一、DNS简介
识别主机的方式有两种:分别是通过主机名和IP地址。
路由器在转发的时候需要对应主机的IP地址,因此,必须要有一种可以将主机名转换为IP地址的服务功能。
DNS是一个由分层的DNS服务器实现的分布式数据库,它使得一个主机能够查询分布式数据库的应用层协议,进而将用户提供的主机名转换为IP地址。
二、DNS工作机理概述
举个例子,在我们输入www.baidu.com之后,DNS是如何解析www.baidu.com对应的IP地址的呢?
1.首先,当我们接入互联网时,互联网服务提供商(ISP)会为我们分配一台本地的DNS服务器。我们的域名解析请求将发送到本地的DNS服务器。
2.DNS服务器具有缓存的功能,若我们请求的主机名对应的IP地址存在于本地DNS服务器的缓存中时,本地DNS服务器会优先将缓存中的IP地址返回。
3.若本地DNS服务器的缓存中不存在对应的IP地址,那么它需要访问根DNS服务器。根DNS服务器是最高级别的DNS服务器,它可以指明下一级的顶级域名DNS服务器的IP地址,以www.baidu.com来说,根DNS服务器会根据.com返回.com对应的顶级域名DNS服务器的IP地址,交给本地DNS服务器。
4.本地DNS服务器向.com对应的顶级域名DNS服务器发起请求,顶级域名DNS服务器根据www和baidu返回其对应的权威DNS服务器的IP地址,交给本地DNS服务器。
5.此时本地DNS服务器已经知道了www.baidu.com对应的IP地址,它将该IP地址缓存。存储格式为key-value键值对,也就是主机名-IP地址。DNS服务器在一段时间后,会丢弃缓存的信息。
6.之后本地DNS服务器将对应的IP地址返回给我们的请求主机。
三、DNS的其他功能
除了上面的主机名到IP地址的转换外,DNS服务器还提供了一些重要服务:
1.主机别名转换。对于有着复杂主机名的主机,可以使其拥有一个或多个别名,并进行记录。e.g. relay1.west-coast.enterprise.com可以拥有enterprise.com和www.enterprise.com两个别名.
2.邮件服务器别名转换。与主机别名转换类似,使邮件服务器的拥有一个或多个别名,并进行记录。e.g. relay1.west-coast.126.com可以记作west-coast.126.com或www.west-coast.126.com
3.负载均衡。随着分布式架构的普及,同一个ISP提供的本地DNS服务器可以有多台,如果大量的请求都访问这些DNS服务器中的某一台,而很小访问其他的几台,这显然是不合适的。因此,ISP将多有的本地DNS服务器作为一个集合。当用户进行DNS域名解析请求时,根据负载均衡算法,返回集合中的某一台本地DNS服务器的IP地址,用于处理用户的请求,达到负载均衡的效果。
四、DNS记录
DNS服务器存储了DNS相关的资源记录。资源记录包含了一个四元组
(Name,Value,Type,TTL)
Name和Value类似于我上面提到的key-value键值对,Type为相应的类型,下面会介绍,TTL为缓存的过期时间
对于Type:
1.Type = A:Name是主机名,Value是主机名对应的IP地址。e.g.(www.aaa.com, 145.37.93.126, A, 172800)
2.Type = NS:Name是域名,Value是知道如何获取该域名IP地址的权威DNS服务器的主机名。e.g.(aaa.com, dns.aaa.com, NS, 172800)
3.Type = CNAME:Name是主机别名,Value是规范主机名。e.g.(aaa.com, www.aaa.com, CNAME, 172800)
4.Type = MX:Name是邮件服务器别名,Value是邮件服务器规范主机名。e.g.(aaa.126.com, www.aaa.126.com, MX, 172800)
这里面,如果一台DNS服务器是用于某特定主机名的权威DNS服务器,那么该DNS服务器会有一条包含用于该主机名的类型A记录。如果服务器不是用于某主机名的权威DNS服务器,那么该服务器将包含一条类型NS的记录,该记录对应于包含主机名的域,同时还将包括一条A记录,该记录提供NS类型记录的Value字段中的DNS服务器的IP地址。
五、DNS报文
前12字节是首部区域,标识符为一个16比特的数,用于标识该查询。这个标识符用于匹配发送的DNS请求和收到的响应。
标志位用于标识这是查询报文还是回答报文(字段值分别为0和1)。同时也可以设置递归查询的标志位,设置为1后,DNS查询变为递归查询(即根DNS服务器直接向顶级域名DNS服务器发起请求而不是将其IP地址返回给本地DNS服务器)。
问题区域包含着正在被查询的信息。主要包括名字字段和类型字段。关于这两个字段已在DNS记录中介绍过了,此处不再重复。
回答区域用来记录请求对应的回答。包含了请求主机名的四元组字段。四元组字段已在DNS请求中介绍过,不再重复。同时因为一个主机名可能有多个IP地址,因此一个问题可能对应着多个回答。
权威区域包含着其他权威DNS服务器的记录。
附加区域包含着其他有帮助的记录。
六、DNS查询的相关命令
查询语法:
nslookup –d[其他参数] domain[dns-server]
直接查询:
直接查询域名情况:
命令格式:nslookup domain[dns-server]
示例:nslookup www.163.com
查询其他记录
命令格式:nslookup -qt=type domain[dns-server]
其中,type可以是以下这些类型:
A 地址记录(直接查询默认类型)
AAAA 地址记录
AFSDB Andrew文件系统数据库服务器记录
ATMA ATM地址记录
CNAME 别名记录
HINFO 硬件配置记录,包括CPU、操作系统信息
ISDN 域名对应的ISDN号码
MB 存放指定邮箱的服务器
MG 邮件组记录
MINFO 邮件组和邮箱的信息记录
MR 改名的邮箱记录
MX 邮件服务器记录
NS 名字服务器记录
PTR 反向记录
RP 负责人记录
RT 路由穿透记录
SRV TCP服务器信息记录
TXT 域名对应的文本信息
X25 域名对应的X.25地址记录
示例:nslookup -qt=CNAME www.163.com
返回信息类型:
服务器:本机DNS服务器信息
非权威应答:Non-authoritative answer,除非实际存储DNS Server中获得域名解析回答的,都称为非权威应答。也就是从缓存中获取域名解析结果。
address:目标域名对应物理IP可有多个
aliase:目标域名