DNS是Domain name system的简称,有些地方也称为Domain name server
推荐阅读书籍:《DNS & bind》
DNS主要是用于将域名解析为IP地址的协议,有时候也用于将IP地址反向解析成域名,所以DNS可以实现双向解析。
DNS可以使用TCP和UDP的53端口,基本使用UDP协议的53端口
例如A主机要查询C域中的一个主机,A所指向的DNS服务器为B,递归和迭代查询的方式是这样的:
递归查询:A --> B --> C --> B --> A
迭代查询:A --> B A --> C --> A
为什么客户端到DNS服务器阶段是递归查询?因为客户端本身不是DNS服务器,它自己是找不到互联网上的域名地址的,所以只能询问DNS服务器,最后一定由DNS服务器来返回答案,所以DNS服务器需要对这个客户端允许递归。因此,dns解析器(nslookup、host、dig等)所发出的查询都是递归查询
SOA记录:start of authority,起始授权机构。该记录存储了一系列数据,若不明白SOA记录,请结合下面的NS记录,SOA更多的信息见"子域"部分的内容。格式如下:
#
longshuai.com. IN SOA dnsserver.longshuai.com. mail.longshuai.com. (1 3h 1h 1w 1h )#前三列是声明性的语句,表示"longshuai.com."这个域内的起始授权机构为第四列的值"dnsserver.longshuai.com."所表示的主机。第五列和第六列是SOA的附加属性数据。#第四列指定了"dnsserver.longshuai.com."为该域的master DNS服务器。#第五列是该域的管理员邮箱地址,但注意不能使用@格式的邮箱,而是要将@符号替换为点".",正如上面的例子"mail.longshuai.com.",其实际表示的是"mail@longshuai.com"。#第六列使用括号将几个值包围起来。第一个值是区域数据文件的序列编号serial,每次修改此区域数据文件都需要修改该编号值以便让slave dns服务器同步该区域数据文件。第二个值是刷新refresh时间间隔,表示slave dns服务器找master dns服务器更新区域数据文件的时间间隔。第三个值是重试retry时间间隔,表示slave dns服务器找master dns服务器更新区域数据文件时,如果联系不上master,则等待多久再重试联系,该值一般比refresh时间短,否则该值表示的重试就失去了意义。第四个值是过期expire时间值,表示slave dns服务器上的区域数据文件多久过期。第五个值是negative ttl,表示客户端找dns服务器解析时,否定答案的缓存时间长度。
NS记录:name server
NS记录:name server,存储的是该域内的dns服务器相关信息。即NS记录标识了哪台服务器是DNS服务器。格式如下:
longshuai.com. IN NS dnsserver1.longshuai.com.
longshuai.com. IN NS dnsserver2.longshuai.com.
#前三列仍然是声明性语句,表示"longshuai.com."域内的DNS服务器(name server)为第四列值所表示的"dnsserver.longshuai.com.",如果一个域内有多个dns服务器,则必然有主次之分,即master和slave之分。但在NS记录上并不能体现主次关系
A记录:address
A记录:address,存储的是域内主机名所对应的ip地址。
dnsserver.longshuai.com. IN A 172.16.10.15
#客户端之所以能够解析到主机名对应的ip地址,就是因为dns服务器中的有A记录存储了主机名和ip的对应关系。
AAAA记录存储的是主机名和ipv6地址的对应关系。
PTR记录:pointer
PTR记录:pointer,和A记录相反,存储的是ip地址对应的主机名,该记录只存在于反向解析的区域数据文件中(并非一定)。
16.10.16.172.in-addr.arpa. IN PTR www.longshuai.com.
表示解析172.16.10.16地址时得到主机名"www.longshuai.com."的结果。
CNAME记录:canonical name
CNAME记录:canonical name,表示规范名的意思,其所代表的记录常称为别名记录。之所以如此称呼,就是因为为规范名起了一个别名。什么是规范名?可以简单认为是fqdn。
www1.longshuai.com. IN CNAME www.longshuai.com.
最后一列就是规范名,而第一列是规范名即最后一列的别名。当查询"www1.longshuai.com.",dns服务器会找到它的规范名"www.longshuai.com.",然后再查询规范名的A记录,也就获得了对应的IP地址并返回给客户端。