最近在调研CoreDNS如何为Kubernetes集群内的Service提供DNS服务发现。但是在开始CoreDNS之前,需要对DNS的基础知识有所了解,本篇主要对DNS的学习过程做下记录。

DNS是什么?

DNS全名是Domain Name System,通过DNS系统,可以通过domain name查询IP,也可以通过IP反查domain name,除此之外DNS还可以与Mail system结合,提供Mail routing的功能,并且DNS不仅仅是一个域名系统,也是全世界最大的分布式数据库(不同的Zone存储着各自的Zone文件)。

简单理解就是: 你在浏览器上输入www.google.com域名之后,通过DNS解析之后,会给你Answer一个217.160.0.201地址。然后浏览器通过这个IP地址加端口号去访问最终的服务。

DNS基本概念

Domain Names and Namespace

  • DNS Namespace

    DNS namespace是一颗倒置的树,并且除了root node节点允许为空外,其它节点不允许空,并且每个node的内容需要有一个最长为63个字符的label。 下图为一个虚构的DNS namespaces:


dns
  • Domain Name

    在一个DNS namespace树中,从叶子节点到根节点,这一条路径的组合被叫做Domian name. 如下图所示是一个www.baz.example.Domain name


dns

接下来,让我们看Domain name是如何被分组的,并且如何对其进行管理。

Domains, Delegation and Zones

  • Domain

    将这个internal分成许多个domain, 每个domain下又会细分为许多个domain,然后这些细分的domain会根据实际的情况在进行更细粒度的划分。并且每一部分domian都会有相应的组织去维护和管理。例如: Google管理google.com, UC Berkeley管理berkeley.edu等。

    下面是一个foo.example Domain的例子:


    dns
  • Delegation

    每个Domain都可因实际的需求再细分成许多sub domain。上层的domain可以将其分出的某一个sub domain的domain name与IP mapping交由另一个组织去管理。这个动作我们称为Delegation.

    举个例子: 我们可以把berkeley.edu这个domain,分成两个不同的sub domain,一个是cs.berkeley.edumusic.berkeley.edu交由两个不同的学院去各自维护。

  • Zones

    上面提到的基本每个domain交由一个特定的组织去管理,其实更准确的说应该是每个Zone交由一个name server来负责,所谓的zone就是domian的一部分。下图是一个具体的例子:

    <div align=left>
    

    dns

Resource Records

之前我们简单的说过DNS是一个分布式数据库,但是每个数据库中存储的数据格式是什么样的?

DNS会在每一个Zone的nameserver上维护一个叫做Zone data file的文件,该文件中保存了该Zone范围内所有的mapping关系。并且该文件中的每一行代表一条resource record

resource record是DNS存储数据的基本单位。resource record记录的格式如下:

1
[NAME] [TTL] [CLASS] TYPE RDATA

下面是一个Zone data file文件的样例:


dns

每个resource record有不同的Class(但是通常Class为IN)和Type,先简单的介绍下比较通用的resrouce record:

DNS Servers

DNS server主要负责两方面:

  • 对于一个domain name的query动作进行Answer。
  • 对于一个domain name的query去其它的DNS server query。

dns

从上面这张图可以看到,每个Zone内通常存在两个DNS server,一个叫Promary DNS server,另一个叫做Secondary DNS server。这种关系其实就是master/salve的关系,Primary DNS Server会通过zone transfer机制去向Secondary DNS server同步zone data file记录,当其中一个DNS server挂掉之后,不会导致这个Zone不能进行domain name的解析工作。

其中,每个Zone的DNS server都会维护一个叫做zone data file的文件,该文件中记录了该Zone的所有domain name的记录数据,DNS server会加载zone data file的记录用于DNS解析工作。并且DNS server也可以通过zone transfer的机制,加载其它DNS server的zone data file

DNS是如何工作?

为了更好的理解DNS对domain的解析流程,首先介绍下DNS服务器的种类:

What is a DNS recursive resolver?


dns

从上面这张图,可以看到recursive resolver在DNS解析过程的位置是在client和DNS nameserver之间,当client发起DNS查询请求时,首先会经过recursive resolver,如果在
recursive resolver维护的cache中已经有请求的记录则直接返回给client,否则recursive resolver会依次向root nameserver,TLD nameserverauthoritative nameserver进行DNS的请求查询,然后将查询到的数据响应给请求的客户端,
并同时缓存这部分数据到本地的缓存中,用于提高下次查询的效率。

What is a DNS root nameserver?


dns

每个recursive resolver都知道13个root nameserver的地址(因为全世界就只有13个root nameserver)。recursive resolver首先会给这13个root nameserver中的一个发送查询请求,root nameserver接收到查询请求之后,会给recursive resolver返回相关的TLD namenameserver的地址(TLD是top-level domain的缩写顶级域名)。类似:(.com, .net, .edu等)

注意: 这里说的13个root nameserver,并不是只有13台root nameserver。而是表示13种类型的root namserver

What is a TLD nameserver?


dns

TLD nameserver维护了所有的顶级域名信息,例如:.com, .net, .edu等。例如你想要访问google.com, 首先会去访问root nameserver,然后recursive resolver接收到响应之后会去查询.com的TLD nameserver。 之后TLD nameserver会响应相关的authoritative nameserver

  • Generic top-level domains: 通用的顶级域名。比较有名的包括: .com, .org, .net, .edu等。
  • Country code top-level domains: 区域域名,例如: .uk, .cn, .us等

What is an authoritative nameserver?


dns

authoritative nameserver简而言之就是直接给你的查询返回Answer的服务器。例如: 你search googlec.com, 则当recursive resolver解析到authoritative nameserver之后,就会直接给你返回google.com domain的IP地址:217.160.0.201

上面就是DNS server的几种类型,知道了DNS Server的类型之后,接下来让我们看下DNS的整个解析流程:

The 8 steps in a DNS lookup:


dns

1.用户在web浏览器上输入: example.com之后,DNS recursive resolver服务器接收到DNS请求。
2.resolver首先向root nameserver进行查询。
3.root nameserver会响应给resolver 顶级域名TLD DNS Server的地址,在我们的例子中,由于访问的是example.com,所以会给resolver返回.com TLD。
4.resolver之后会向.com TLD发起查询请求。
5.TLD DNS server会给resolver响应包含example.com domain name的nameserver地址。
6.接着, recursive resolver会向domain nameserver发送query查询动作。
7.最终, domain nameserver会返回example.com的IP地址给resolver
8.DNS resolver会把解析出来的IP响应给web浏览器。
9.浏览器发起一个HTTP的请求到目标IP地址。
10.请求的服务端将请求的数据响应给浏览器。

上面就是在DNS的一个完成的解析过程。

DNS 工具

  • host
  • nslookup
  • dig

参考