前言

web前端你必须了解的DNS,下面讲解DNS的一些过程和由来以及产生的安全问题
关键词:DNS是什么、DNS的分布式、层次数据库、本地DNS服务器、DNS递归查询和迭代查询、DNS缓存、DNS劫持

什么是DNS

DNS即域名系统,全称是Domain Name System。当我们在浏览器输入一个URL地址的时候,浏览器要向这个URL的主机名对于的服务器发起请求,就得知道服务器的IP。对于浏览器来说,DNS的作用就是将主机名转换为IP地址。

DNS是:

  1. 一个由分层的DNS服务器实现的分布式数据库
  2. 一个使得主机能够查阅分布式数据库的应用层协议

也就是 DNS是一个应用层的协议,我们发送一个请求,其中包含我们要查询的主机名,他就会给我们返回这个主机名对应的IP。

其次,DNS是一个分布式数据库,整个DNS由分散在世界各地的很多台DNS服务器组成,每台DNS服务器上面都保存了一些数据,这些数据可以让我们查到最终主机名对应的IP

所以DNS的查询过程,本质上就是去向这些DNS服务器访问,直到查到这个IP为止。

分布式、层次数据库

什么是分布式

因为所有的主机不可能全部ip都放在一台dns服务器上面,所以就一台一台分出来,每台存储不同的数据,负责不同的映射。

什么是层次

DNS服务器有三种类型:根DNS服务器,顶级域DNS服务器和权威NDS服务器,

  • 根DNS服务器
    首先我们要明确根域名是什么?比如www.baidu.com其实他的根域名是被隐藏的。真正的根域名是www.baidu.com.root后面的.root

那么根DNS服务器的作用是什么?就是管理他的下一级,也就是顶级域DNS服务器。通过询问根DNS服务器,我们能查到该主机名对应的顶级域的ip是多少,从而继续向顶级域请求了解他的下一层。

  • 顶级域服务器
    除了前面提到的com是顶级域名,常见的顶级域名还有cn,org,edu等。然后顶级域管理的是权威DNS

  • 权威DNS
    由各大厂商负责管理的域名,它可以返回最终的一个IP

服务器之间是如何继续交互的,继续往下看:

本地DNS服务器

上一层没有讲到本地DNS服务器,是因为他严格意义上不属于DNS的层次结构。

什么是本地DNS服务器?

每个ISP都有一台本地DNS服务器,比如小区,大学,机构等。都有一台或多台本地DNS服务器。当主机发出DNS请求的时候,该请求被发往本地DNS服务器,本地DNS服务器代理这些请求,将它们转发到DNS服务器中。好比Nginx

递归查询 迭代查询

其中com是顶级域名 n是权威域名

这个过程中,主机向本地DNS服务器请求就是递归查询
本地服务器向根DNS,顶级DNS和权威DNS发出的请求就是迭代查询
迭代的特点就是所有的都是由本地DNS发出 所有的接收也是回到本地DNS

当然不是所有的DNS查询都是这样的模式 DNS查询可以是递归的,也可以是迭代的 如下图就只是递归的

DNS缓存

为了让我们更快的拿到想要的IP,DNS广泛使用了缓存技术。DNS的缓存原理就是,在一个DNS查询的过程中,某台DNS收到了一个DNS应答的时候,就能将映射缓存到本地,下次查询就能直接用到缓存的内容。

but 缓存不是永久的,他也会定时删除。

所以有了缓存,很多时候都绕开了根DNS,所以需要向根DNS发起的查询请求很少。

DNS解析优化

主要分为两个方案

  • DNS预解析
  • 减少DNS请求

DNS预解析

DNS解析也需要时间的,可以通过预解析的方式来预先获取域名所对应的IP

link方式:手动解析

1
<link rel="dns-prefetch" href="//blog.poetries.top">

meta方式:https自动解析
1
<meta http-equiv="x-dns-prefetch-control" content="on">

设置响应头:自动解析
1
ctx.set('X-DNS-Prefetch-Control', 'on')

DNS劫持

域名劫持就是在劫持的范围内拦截解析的请求,分析请求的域名,把审查范围之外的请求放行,否则直接返回假的IP地址或者什么也不做使其失去响应,效果就是特定的网址不能访问或者访问的是假的网址

域名劫持会影响用户体验,一方面还有可能被诱骗到冒牌网站进行登陆导致隐私泄漏

DNS可以有本地DNS劫持,路由DNS劫持,攻击DNS服务器

解决方法

  1. 加强本地的计算机病毒检查,开启防火墙,防止恶意软件,木马感染计算机等。
  2. 改变路由器默认密码,防止攻击者修改路由器的DNS配置指向恶意的DNS服务器。
  3. 企业可以准备两个or以上的域名,一个挂了用另外一个
  4. 用HTTP DNS 代替Local DNS

总结

DNS的内容其实讲深了还是很多的,但是基本的原理和概念还是要清楚,熟悉一下DNS解析的过程以及这个递归和迭代,关于域名这块以后还是会出文章,有购买域名的打算。