DNS(Domain Name service或者Domain Name Server)中文名叫做域名服务或者域名服务器, 属于应用层协议, 为C/S架构, 使用TCP/UDP的53号端口.
[root@docker-package ~]# cat /etc/services | grep "^domain\b"
domain 53/tcp # name-domain server
domain 53/udp
DNS服务架构见下图:
从图中可以看出, DNS服务的架构是一个分布式的架构, 最顶层是根域服务器, 中间是顶级域名服务器, 接着是二级域名和三级域名服务器.
每一个域名服务器都只负责解析本域内的名称的主机. 根域服务器全球共有13组.
常用的顶级域名(TLD, Top Level Domain)有com, edu, mil, gov, net, org, int等, TLD分三类, 组织域、国家或地区域(.cn, .us, ...)和反向域.
DNS服务查询有两种类型:
DNS查询过程图如下:
NOTE: 客户端在查询DNS服务器之前会先查询本地的hosts(名称解析配置文件)文件, hosts文件中没有查询到需要的信息才会去查询DNS服务器.
hosts路径:
# hosts格式:
IP DomainName
1.1.1.1 www.xxx.com
2.2.2.2 www.yyy.com
一次完整的DNS查询请求经过的流程:
# 1. 当你请求www.xxx.com这个域名时, 会先去查找本地hosts文件, 如果本地hosts文件中有结果, 则直接返回
# 2. 如果hosts文件中没有结果, 则会请求DNS serveice, DNS service会先查找Local DNS Cache, 有结果则直接返回
# 3. 如果没有结果, 就去会从根域服务器开始迭代查询
# 4. 最后迭代查询有结果就直接返回给客户端
解析答案有四种类型:
DNS解析类型有两种:
FQDN的中文意思是完全限定域名, 例如: www.buyaoliandebaidu.com就是一个FQDN.
正向解析和反向解析各需要一个解析库来进行解析, 称之为正向区域和反向区域.
NOTE: 正反向解析是两个不同的名称空间, 是两颗不同的解析树.
DNS服务器类型分为四类:
区域传送有两种, 全量传送(传送整个解析库)和增量传送(传送解析库变化的那部分内容).
DNS的区域解析库中定义了资源记录(Resource Record, RR), 资源记录类型如下:
定义资源记录的语法:
# 语法: name [TTL] IN tt_type value
# NOTE:
# TTL可从全局继承
# “@”可用于引用当前区域的名字
# 同一个名字可以通过多条记录定义多个不同的值, 此时DNS服务器会以轮询方式响应
# 同一个值也可能有多个不同的定义名字, 通过多个不同的名字指向同一个值进行定义; 仅此表示通过多个不同的名字可以找到同一个主机而已
SOA记录:
# name: 当前区域的名字, 例如: leistudy.com
# value: 有多部分组成
# 当前主区域的DNS服务器的FQDN, 也可以使用当前区域的名字
# 当前区域管理员的邮箱地址, 但地址中不能使用@符号, 一般用“.”代替, 例如linuxedu.magedu.com
# 主从服务协调属性的定义以及否定的答案的统一的TTL
# 示例:
leistudy.com. 86400 IN SOA ns.leistudy.com. nsadmin.leistudy.com. (
2018022801 ;序列号
2H ;刷新时间
10M ;重试时间
1W ;过期时间
1D ;否定答案的TTL值
)
NS记录:
# name: 当前区域的名字
# value: 当前区域的某DNS服务器的名字, 例如: ns.leistudy.com.
# NOTE: 一个区域可以有多个NS记录
# 示例:
leistudy.com. IN NS ns1.leistudy.com.
leistudy.com. IN NS ns2.leistudy.com.
NOTE1: 相邻两个资源记录的name相同时, 后续可省略
NOTE2: 对NS记录而言, 任何一个ns记录后面的服务器名字, 都应该在后续有一个A记录
MX记录:
# name: 当前区域的名字
# value: 当前区域的某邮件服务器(smtp服务器)的主机名, 一个区域内, MX记录可有多个; 但每个记录的value之前应该有一个数字(0-99), 表示此服务器的优先级, 数字越小, 优先级越高
# 示例:
leistudy.com. IN MX 10 mx1.leistudy.com.
IN MX 20 mx2.leistudy.com.
# NOTE: 对MX记录而言, 任何一个MX记录后面的服务器名字, 都应该在后续有一个A记录
A记录:
# name: 某主机的FQDN, 例如www.leistudy.com.
# value: 主机名对应主机的IP地址
# 示例:
www.leistudy.com. IN A 1.1.1.1
www.leistudy.com. IN A 1.1.1.2
mx1.leistudy.com. IN A 1.1.1.3
mx2.leistudy.com. IN A 1.1.1.3
# NOTE: 避免用于写错名称时给错误答案, 可通过泛域名解析进行解析至某特定地址
# 示例:
*.leistudy.com. IN A 1.1.1.4
magedu.com. IN A 1.1.1.4
AAAA记录:
# name: FQDN
# value: IPv6
PTR记录:
# name: IP, 有特定格式, 把IP地址反过来写, 例如1.2.3.4要写作4.3.2.1; 而且有特定后缀: in-addr.arpa; 所以完整写法为“4.3.2.1.in-addr.arpa”
# value: FQDN
# 示例:
4.3.2.1.in-addr.arpa. IN PTR www.leistudy.com
# 简写: 网络地址及后缀可省略, 主机地址依然要反写
4 IN PTR www.leistudy.com.
CNAME记录:
# name: 别名的FQDN
# value: 真正名字的FQDN
# 示例:
web.leistudy.com. IN CNAME www.leistudy.com.
原文地址:http://blog.51cto.com/13501622/2092840