DNS服务简介

一、 DNS是什么?

人类更倾向于记忆字符串类型的数据,比如域名“www.baidu.com”,而在访问互联网设备中,计算机网络直接提供的都是由数字构成的IP地址,比如“192.168.45.123”。在用户使用时,让人类记住这样一串数字显然困难,因此,DNS服务出现了,旨在构建IP地址域名之间的翻译。

  • DNS(Domain Name System,域名系统)是一种应用于因特网中的域名与IP地址相互映射的分布式数据库服务器。可以帮助用户方便地通过域名得到响应IP地址,进而访问该IP地址的网络设备。
  • 通过主机名(域名)得到其对应IP地址的过程称为域名解析

二、DNS工作原理

  • 协议栈情况:
    DNS依托应用层协议——DNS协议实现。DNS协议运行在UDP协议之上。
  • 全球分布式DNS管理:
    DNS的数据是按层级分布式存储的,这样做的好处显而易见:增加了整个系统的鲁棒性和通信容量。

    图1 DNS服务器的层级举例
    从上至下,DNS服务器可分为:根节点服务器、顶级域服务器、权威域服务器和本地DNS服务器。
  1. 根节点服务器:全球共有400多个根节点服务器,交由13个机构管理,根节点服务器存储着顶级域服务器的域名和IP地址
  2. 顶级域服务器:顶级域服务器分为各领域域名服务器,比如“org,edu,com,net。。。”和国家域名服务器。各顶级域服务器中存储着其所属的权威域服务器的域名和IP地址。
  3. 权威域服务器:这一层面就是具体各公司的域名了,比如“baidu,neu。。。”。权威域服务器隶属于某个顶级域服务器,通过顶级域服务器的查找从而获得权威域名。
  4. 本地DNS服务器:这个服务器是一种查询代理服务器,当用户发起DNS请求时,请求会先到达用户附近的本地DNS服务器,由此再向其他DNS服务器查找域名。
  • DNS的递归查找过程:
    由于采用了分布式的数据存储架构,域名的查询是递归式的。按照:本地->根节点->顶级域->权威域 的层次进行递归。
  • dns什么时候用NS什么时候用a record_服务器

  • 图2 DNS的递归查找示意
    熟悉各种高级语言的函数递归写法的同学会发现,上图实际上就是一种典型的递归逻辑。依次在递归链路上向深层递归(bfs),然后再按“原路返回”,完成了某域名查询。
  • DNS的缓存机制:
    上面的递归过程很好的完成了分布式查找,可是在性能方面明显有优化的空间。没错,就是利用计算机中的“万能优化策略”:缓存技术
    按照上图的递归,每次查找都要在网络中发送多次UDP数据包,而且还要原路返回,这明显会耗费一定时间、占用带宽资源。
    如果我们在各级服务器内部(比如内存中)都设置了一张缓存表,把最近收到请求的“域名-IP地址”键值对存入其中,下次访问时遇到相同的域名则直接提供IP地址给对方,这就可以有效地减少了递归深度。
    当然,缓存的代价是占用了硬件空间资源,不可能无限制的缓存。通常来说,各级DNS服务器设置一条缓存记录的最长存活时间为2天。