DNS基础知识

本博客 hjy-xh,转载请申明出处

DNS

DNS 全称 Domain Name System,即域名系统

DNS 是网络请求要走的第一步,我们日常访问的网站使用的 HTTP/HTTPS`` 协议的下层是TCP/IP` ,而通过其中的 IP 协议,才能知道将数据包发送到何处

由于 IP 长且难记,通过 IP 访问网站不方便,后来通过发明了 DNS 服务器,这个时候我们访问网站输入网站域名,DNS服务器就解析我们的域名为 IP, 这样我们实际访问的就是对应的 IP 地址

它实质上是一个​​域名​​和 ​​IP​​相互映射的分布式数据库,有了它我们就可以通过域名更方便的访问互联网

域名的树状结构

想要知道如何解析域名,还得从域名的树状结构说起

最顶层的域名是根域名(root),然后是顶级域名(top-level domain,简写 TLD),再是一级域名、二级域名、三级域名

  • 根域名

所有域名的起点都是根域名,它写作一个点.,放在域名的结尾,可以省略不写(任何一个域名结尾加一个点,浏览器都可以正常解读)

根域名服务器全世界一共有13台(都是服务器集群)

  • 顶级域名

根域名的下一级是顶级域名。它分成两种:通用顶级域名(gTLD,比如 .com 和 .net)和国别顶级域名(ccTLD,比如 .cn 和 .us)

  • 一级域名

一级域名就是你在某个顶级域名下面,自己注册的域名

比如,a.b.com就是我在顶级域名,.b就是一级域名

  • 二级域名

二级域名是一级域名的子域名,是域名拥有者自行设置的,不用得到许可

查询

DNS解析分为递归查询迭代查询

  • 主机向本地域名服务器的查询一般都是采用递归查询
    如果主机向本地域名服务器查询的是未知的 IP 地址,那么本地域名服务器就以 DNS 客户的身份向其它根域名服务器继续发出查询请求报文,也就是替主机继续查询,而不是让主机自己进行下一步查询
  • 本地域名服务器向根域名服务器的查询的迭代查询
    当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所查询的 IP 地址,要么告诉本地域名服务器下一步应该向哪个域名服务器查询(以便本地域名服务器进行后续查询)

DNS缓存机制

用户输入 URL 以后,浏览器首先要查询域名对应服务器的 IP 地址,这个操作一般需要耗费 20-120 毫秒时间,而DNS 查询完成之前,浏览器无法从服务器下载任何数据,因此基于性能考虑,ISP、局域网、操作系统、浏览器都会有相应的 DNS 缓存机制:

  • IE 缓存 30 分钟,可以通过注册表中 DnsCacheTimeout 项设置
  • Firefox 缓存 1 分钟,通过 network.dnsCacheExpiration 配置
  • Chrome 缓存 1 分钟,通过 chrome://net-internals/#dns 配置

DNS存在的问题

  • 查询路径过长导致业务访问延时
  • 缓存时间不统一
  • DNS 劫持(被黑客劫持信息,插入广告)
  • 根服务器停止服务的风险

优化手段

X-DNS-Prefetch-Control头控制着浏览器的 DNS 预解析功能:

1
<meta http-equiv="x-dns-prefetch-control" content="on">

DNS Prefetching 是让具有此属性的域名不需要用户点击链接就在后台解析,而域名解析和内容载入是串行的网络操作,所以这个方式能减少用户的等待时间,提升用户体验

参考

DNS 查询原理详解
X-DNS-Prefetch-Control