从功能上看,DNS协议用于把域名转换为IP地址。从技术上看,DNS是一个分布式分层数据库,用于存储IP地址,并允许根据名称查询IP地址。
域名末尾有一个隐藏的.
代表根域名,在根域名之前的依次称为顶级域名、二级域名、三级域名等。通常在域名供应商处购买的域名是二级域名,如github.com。
根域名服务器 全球共有13组(非13台)根域名服务器,它存储了顶级域名服务器的地址。可以在这里https://www.iana.org/domains/root/servers查到这些服务器的地址。
顶级域名服务器 存储了权威域名服务器的地址。
权威域名服务器 权威域名服务器指管理二级、三级、四级等域名的域名服务器。
本地域名服务器也叫递归解析器,它是客户端和DNS域名服务器的中间人。客户端向本地域名服务器发送DNS解析请求后,本地域名服务器会执行一系列的步骤最后将查询结果返回给客户端。通常运营商会提供本地域名服务器,通过DHCP协议自动给客户端分配本地域名服务器的地址。也可以手动设置本地域名服务器的地址,比如常见的114.114.114.114,8.8.8.8等公共递归解析器。
假设需要解析的域名是github.com
。
.com
对应的顶级域名服务器地址。github.com
对应的权威域名服务器地址。域名服务器可以配置DNS记录,一条DNS记录提供了一个域名的相关配置,比如域名对应的IP地址。记录也分不同的类型,常用的几种类型如下所示:
www.example.com
映射到到example.com
。胶水记录是域管理者向上级域管理者提供的权威服务器主机名和IP地址的映射关系。
例如:com
的域管理者向上级(根域.
)管理者提供com
的权威服务器主机名*.gtld-servers.net
和其IP地址(192.5.6.30
等)的映射关系。当我们向根域名服务器询问com
的权威服务器地址时,根域名服务器会同时返回com
的权威服务器主机名以及对应的IP地址,这样就可以直接向该IP地址发起后续的递归请求。如果没有胶水记录,即根域名服务器只返回com
的权威服务器的主机名,那么还需要额外的请求解析*.gtld-servers.net
对应的IP地址。因此胶水记录的第一个作用是减少递归查询次数,加快DNS查询。
另外一个场景是权威服务器本身托管了权威服务器主机名的解析。例如example.com
的解析托管在权威服务器上,而权威服务器自身的主机名是ns.example.com
。假设现在要解析a.example.com
的IP地址,那么我们需要询问example.com
的权威服务器,而该权威服务器的主机名是ns.example.com
,导致解析陷入死循环无法继续下去。这种情况下需就用到了胶水记录,即example.com
的域管理者向上级com
的管理者提供example.com
的权威服务器主机名ns.example.com
和它的IP地址。当有了胶水记录后,在向com
的权威服务器询问example.com
的权威服务器地址时,就会返回对应的IP地址,从而打破了上面的循环。
使用dig
工具查询DNS信息。
# 指定DNS服务器查询
dig [@dns-server] example.com [DNS记录类型]
# 反向查询
dig -x ip