0x01 DNS的基础概念
DNS:Domain Name Service,基于C/S模式的域名解析服务,应用层协议
监听在53/udp,53/tcp端口
- TCP用来区域传送
- UDP用来解析
0x02 域名分类
- 根域 .
TLD(top level domain顶级域)
组织域:.com、.net、.org、.gov、.mil
国家域:.iq、.tw、.hk、.jp、.cn……
二级域:就是在顶级域上个人或组织申请的名称
所谓注册域名实际是在某个顶级域内注册的某个二级域,如:nwc.com. 然后在申请到的域内的建自己的各个子域名
www.nwc.com. test.nwc.com. ftp.nwc.com.
0x03 DNS的查找过程
递归查询:
客户端向自己所指定的DNS服务器请求的过程,是递归的,也就是说客户端向服务器请求时,服务器返回的必须是一个明确的结果,要么找到,要么找不到
迭代查询
是指当客户端请求到达直接指定的DNS服务器后,如果该服务器上没有缓存相关的条目,则需要向根域请求,根域返回给DNS服务器一个顶级域的地址,然后DNS服务器又根据返回的顶级域地址去找,顶级域又返回一个二级域的地址,而后,DNS服务器又向二级域去请求,追踪返回出一个明确的解析结果给DNS服务器,这个DNS一级一级去查找的过程就是迭代查询
0x04 DNS的域名解析方式
域名->IP 正向解析
正向解析时,给的地址是,如:www.nwc.com.
IP->域名 反向解析
反向解析时,给的地址是,如:4.3.2.1.in-addr.arpa.
解析的实际地址是1.2.3.4
注意:正向解析和反向解析的名称空间,不是同一个空间,也就是不是同一颗树形结构;因此也不是同一个解析库
0x05 DNS服务器的类型
负责解析至少一个域的服务器
主名称服务器:新增的解析条目只能通过主服务器
辅助名称服务器:可以接受解析请求并响应,但新增的解析条目只能在主服务器上新增。主服务器故障后,从服务器也不向外提供解析服务了
不负责域解析的服务器:缓存名称服务器
0x06 DNS解析的答案类型
肯定答案:有解析出来的结果
否定答案:不存在查询的键,因此,不存在与其查询的键对应的值
对于肯定答案和否定答案都可以进行缓存,也都可以指定缓存时长
权威答案:由直接负责的DNS服务器给出的答案,也就是给出的结果是自己负责解析域时,给出的答案
非权威答案:给出的答案是缓存中的缓存下来的条目,此时因为缓存还在有效期,而后端真实的结果可能已经改变,但是由于有缓存,则依然用缓存响应请求,此时返回的就是非权威答案
0x07 DNS 一次完整的查询请求所经过的流程
Client一旦希望以主机名与对方主机通信,此时就需要名称解析,其会先查本地的hosts文件
如果host文件中没有对应的名称和地址的对应关系,则客户端会查DNS服务的本地缓存
如果本地DNS服务的缓存没有命中,则客户端会向客户端所指向的DNS服务器(可能是缓存DNS服务器,也可能是负责具体解析的某DNS主名称服务器)发送查询请求,此时的请求是递归请求(recursion请求)
DNS服务器收到请求后,
如果客户端请求的就是自己负责的域,则直接查询数据库,并返回答案
如果客户端请求的不是自己负责解析的域,则先找服务器自己的缓存,如果缓存没命中,则基于迭代的方式先找根域,然后再找顶级域,然后找二级域,一步一步完成查询请求,并最终返回答案给客户端
0x08 主-辅 DNS服务器
主DNS服务器:维护所负责解析的域的数据库的那台服务器;读写操作均可进行
从DNS服务器:从主DNS服务器那里,或其他的从DNS服务器那里同步或复制一份解析库,但是只能进行读操作
复制或同步操作的实施方式:
序列号:serial
也就是解析数据库的版本号,一旦主服务器的数据库内容发生改变时,其版本号递增。从服务器会每隔一段时间,就向主服务器请求其版本号,如果发现版本号与其不匹配,则执行同步
刷新时间间隔:refresh
从服务器每隔多久到主服务器或其他从服务器上检查序列号,用于判断更新的状况
重试时间间隔:retry
当从服务器尝试与主服务器进行通信,获取其序列号时,发现无法联系上主服务器,则进行重试,两次重试之间的时间间隔
故重试时间间隔应该小于刷新时间间隔,而且要远小于刷新时间间隔
过期时长:expire
从服务器始终联系不上主服务器时,多久之后,放弃从主服务器同步数据;从服务器也就停止提供服务
否定答案的缓存时长:
当结果是明确的无法解析到时,此类否定答案缓存多长时间
主服务器”通知”从服务器随时更新数据
0x09 区域和域
区域: zone 物理概念
域: domain 逻辑概念