记忆IP地址对于普通人来说是一个非常痛苦的事情因此互联网提供了通过Host Name来访问对应host的方法Host Name对应到IP的行为称作Name Resolution互联网上提供Name Resoulution的使用最广泛的服务就是Domain Name System(下称DNSDNS服务是互联网中最为常见的服务之一主要提供了IP地址和域名的映射能力 DNS可以被视作一个分布式的数据库由遍布在世界的各个角落的DNS服务器通过DNS协议提供服务

DNS中使用的所有名字的集合叫做DNS Name SpaceDNS Name Space目前是一个树状的结构根部是一个未命名的root 各个节点由Domain组成Root节点下面的节点叫做Top Level Domain(TLD)TLD包括generic TLDs(gTLDs), country code TLDs(ccTLDs), Internationalized country code TLDs(IDN ccTLDs)以及有特殊用处的infrastracture TLDs(ARPA)

DNS Name Space中的每个管理单元称为一个ZoneZone也就是DNS Name Space的一个子树Zone的管理是层层递进的叫做代理Delegation 比如xing.ruib.in这个域名不考虑Root由三个Zone组成in.ruib.xing.这几个Zone的管理可以是独立的 Zone的管理者应该为对应的Zone指定至少两台域名服务器Name ServersDNS服务)以记录该Zone下包含的信息为用户服务 一般来讲DNS服务器中一台叫做Primary负责记录Zone database剩下的叫做Secondary, 从Primary中不断的同步Zone的信息(Zone Transfer)这些服务器叫做该ZoneAuthoritive Server存储的信息是Authoritive

对应的DNS服务器也是一个树状的层级架构最上层由管理Root zone13Root Servers组成下面是TLDs Name Servers等等通过层层递进的查询可以找到DNS Name Space中的所有Name对应的信息 为了查询的效率避免每次查询都要穿透到上层DNS Server缓存是必不可少的每条缓存记录都有存活时间TTL缓存中的信息是Non-authoritiveDNS服务器不仅会缓存正确查询的结果也会缓存错误查询的结果 以避免错误的应用程序不断查询错误的域名信息造成不必要的损耗

客户端和DNS服务器DNS服务器之前主要利用DNS协议通信DNS协议主要包含了两大协议一个是查询/响应(Query/Response)协议主要用于查询某个特定的域名一个用于DNS服务之间交换数据的Zone Transfer协议

DNS协议有一个通用的消息格式消息本身是一个固定12 Bytes的消息头 + 一个变长的消息体

消息头的组成为:

2 BytesTransaction Id, 用于客户端匹配请求和响应

2 BytesFlags包括: 1 bitQR标志该消息是Query(0)或者Response(1)4 bitsOpCode标志当前消息的操作Query(1),Notify(4),Update(5) 1 bitAA标志当前消息是否是Authoritive Answer1 bitTC标志当前消息是否被Truncated1 bitRD(Recursion Desired)标志是否要求递归查询 1 bitRARecursion Available)当前服务器是否支持递归查询1 bitZ(Zero)保留标志位2 bitAD(Authentic Data)CD(Checking Disabled)用于安全性校验4 bitsRcode错误码

还有8 BytesQuery Count/Zone Count, Answer Count/Prerequisite Count, Authority Record Count/Update CountAdditional Information Count记录消息体的RR数量

DNS消息的可变长度部分包含了QuestionsResource RecordsRR每一个QuestionRR开始都是一个Name即域名Name本身由一个个label组成 为了减少体积Label又分为Data LabelCompression LabelData LabelName中的一段数据Compression Label是指向Data Label的指针

对于Query消息DNS通常使用UDP协议消息超过512 Bytes时便会将消息头的TC设为1并将消息截断对于需要大块传输信息的场合Zone TransferDNS使用TCP协议

流行的DNS协议的RR类型有如下几种

A
IPV4 Address Record
NS
Authoritive Name Server
CNAME
canonical name, to name aliasing
SOA
start of autority包含当前Zone的权威信息name servers, 管理者的邮箱地址等等
PTR
IP地址到name的映射
MX
Mail Exchanger
TXT
Text文本信息
AAAA
IPV6 Address Record
SRV
Server Selection
NAPTR
Name Authoriy Pointer, 以支持可选的Name Space
OPT
RR用于扩展DNS协议参见EDNS0
IXFR
incremental zone transfer
AXFR
Full zone transfer
ANY
Request all records

更新DNS记录可以向对应ZoneAuthoritive Server发送DNS UPDATE消息DNS UPDATE需要指定prerequites其中的条件如果不满足DNS Server不会更新消息DNS Server会根据消息来增加/删除自己存储的RR更改需要删除RR并增加新的RR

为了保证服务之前数据的同步DNS Server之前需要进行Zone Transfer最开始Zone Transfer通过轮询进行为了解决不必要的消耗可能很长时间Zone的信息不会被更改异步的方法被提出Zone的信息被更改后DNS Server会发送DNS Notify的消息到监听更改的服务器重新进行Zone TransferZone Transter又分为全量和增量

TODO 没有记的问题

  1. PTR
  2. SRV PTR
  3. NAPTR + TXT