1、什么是DNS
DNS即Domain Name System,即域名系统。DNS是因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户信息更方便的去访问互联网而不是去记住能够被机器直接读取的IP地址。
- DNS是一个由分层的DNS服务器(DNS Server)实现的分布式数据库。DNS服务器通常是运行BIND(Berkeley Internet Name Domain)软件的UNIX机器。
- DNS是一个使得主机能够查询分布式数据库的
应用层协议。DNS协议运行在UDP之上,使用的是53号端口。
当我们在浏览器上输入请求URL(www.baidu.com) 时会发生什么现象?一般的做法如下
- 我们的主机上运行着DNS应用的客户端
- 浏览器从上述URL中抽取主机名www.baidu.com,并将这台主机名发送给DNS应用的客户端。
- DNS客户端向DNS服务器发送一个包含主机名的请求。
所有的DNS请求和回答报文使用UDP数据报经53端口发送。 - DNS客户端最终会收到一份回答报文,其中包含对应于该主机名的IP地址。
- 一旦浏览接收到来自DNS的该IP地址,它能够向位于该IP地址80端口(HTTP请求)的HTTP服务器进程发送一个TCP连接
windows10上的DNS应用为DNS Client
DNS Client 的意思是客户机域名解析服务。为了达到用最快速、最有效率的方式,让客户端能够迅速找到网域的验证服务,当在系统中加入了DNS快取(Cache)的功能时,第一次在找到了目的主机的IP地址后,操作系统就会将所查询到的名称及IP地址记录在本机的DNS快取缓冲区中,当下次客户端还需要再查询时,就无需再到DNS服务器上查询,而直接使用本机DNS Cache中的数据即可。
2、DNS服务器的层级结构
为了处理DNS拓展性问题,DNS使用了大量的DNS服务器,他们以层次方式组织,并且分布在世界各地。没有一台DNS服务器拥有因特网上所有主机的映射。
大致来说,有3种类型的DNS服务器:
- 根DNS服务器:有400多个根名字服务器遍布全球。根DNS服务器提供顶级域名服务器的IP地址。
- 顶级域名服务器:顶级域名服务器提供了权威DNS服务器的IP地址。
- 权威DNS服务器:权威DNS服务器提供该组织的可访问域名的IP地址。
结构如图所示:
除了这3种DNS服务器,还有另一类重要的DNS服务器,称为本地DNS服务器(如上文中的DNS Client)。本地DNS服务器虽然不属于该服务器的层级结构,但它对DNS层次结构是至关重要的。
假设主机cse.nyu.edu想知道主机gaia.cs.umass.edu的IP地址。
- 主机cse.nyu.edu首先向它的本地DNS服务器dns. nyu. edu发送一个DNS查询报文。 DNS查询报文内封装有要查询的域名gaia.cs.umass.edu;
- 由于假定无缓存,本地DNS服务器将查询报文转发到根DNS服务器;
- 根DNS服务器注意到其edu前缀,向本地DNS服务器返回负责edu的顶级域名DNS服务器的IP地址列表;
- 本地DNS服务器则再次向这些顶级域名DNS服务器之一发送查询报文;
- 顶级域名DNS服务器(edu)注意到umass.edu前缀,并返回权威DNS服务器的IP地址进行响应,该权威DNS服务器是负责马萨诸塞大学的dns.umass.edu;
- 本地DNS服务器向dns.umass.edu发送查询报文;
- 权威DNS服务器(dns.umass.edu)用gaia. cs. umass. edu的IP地址进行响应;
- 本地DNS服务器将gaia.cs.umass.edu的IP地址反馈给主机cse.nyu.edu。
3、DNS缓存
实际上,为了改善时延性能并减少在因特网上到处传输的DNS报文数量,DNS广泛使用了缓存技术。
DNS缓存的原理非常简单。在一个请求链中,当某DNS服务器接收到了一个DNS回答报文时,它能将映射缓存在本地存储器中。如果在DNS服务器缓存了一台主机名/IP地址对,另一个对相同主机名的查询到该DNS服务器时,该DNS服务器就能够提供所要求的IP地址,即使它不是该主机名的权威服务器。
由于主机和主机名与IP地址的映射不是永久的,DNS服务器在一段时间后(通常设置为两天)将丢弃缓存的信息。
4、DNS消息和报文
上面我们说到了,DNS接收到一个DNS回答报文时,会将映射缓存在本地存储器中,那么映射之间的关系是以怎样的格式保存在报文中的呢?
共同实现DNS分布式数据库的所有DNS服务器存储了资源记录(Resource Record RR)。RR提供了主机名到IP地址的映射,每个DNS报文都包含了一条或者多条资源记录。
资源记录时一个包含了下列字段的4元组
(Name, Value, Type, TTL)
TTL是该记录的生存时间,它决定了资源记录应当从缓存中删除的时间。
而Name和Value的值则取决于Type
- 当Type=A时。Name是主机名,Value是主机名对应的IPv4地址。
- 当Tyep=AAAA时。Name是主机名,Value是主机名对应的IPv6地址。
- 当Type=NS时。Name是个域,Value是个知道如何获得该域中主机IP地址的权威DNS服务器的主机名。
- 当Type=CANME时。则Value时别名为Name的主机对应的规范主机名。例如(foo.com, relay1.bar.foo.com, CNAME)
- 当Type=MX时,value是别名为Name的邮件服务器的规范主机名。例如(foo.com, mail.bar.foo.com, MX)
DNS的报文格式: