深刻理解 DNS

深刻理解 DNS

简介

DNS(Domain Name System)域名系统,它是一个将域名和 IP 地址相互映射的一个分布式数据库,把容易记忆的主机名转换成主机 IP 地址。html

DNS使用 TCP 和 UDP 端口 53。当前,对于每一级域名长度的限制是 63 个字符,域名总长度则不能超过 253 个字符。git

DNS备份

为防止服务中断和网络攻击,全球共有13台根DNS服务器,严格意义上来讲不是13台,而是13个服务集群,为何是13?github

专有名词

  • FQDN:完整合法域名,也就是根域(绝对域名)
  • NS:权威域名服务器
  • 顶级域:用来指示某个国家 / 地区或组织使用的名称的类型名称,例如 .com
  • 二级域:我的或组织在因特网上使用的注册名称,例如 google.com
  • 子域:已注册的二级域名派生的域名,通常就是网站名,例如 www.google.com
  • 主机名:标识网络上的特定计算机,例如 h1.www.google.com

DNS的基本解析流程

  1. 以客户端浏览器访问 www.lbinin.com 域名为例,首先,它会去检查当前浏览器缓存,若是有,就直接响应,若是没有,就继续往下找
  2. 接着,操做系统会去检查本身的 host 文件,若是从中没找到对应关系,会再到系统 DNS 缓存中查,若是缓存中有,就直接返回该域名所对应的 IP
  3. 若是缓存中没有,则会向咱们事先设置好的 DNS 服务器 [ 通常有两个, 主 & 备 ] 去请求,即所谓的递归查询,DNS 服务器首先会到自身解析数据库中去查
  4. 若是 DNS 服务器在本身的解析库中也没找到,它就会自动帮咱们向根发送询问请求
  5. 此时,根看到要请求的是 com 的后缀,就会把 com 所在的 ns 服务器告诉咱们的 DNS
  6. 而后,咱们的 DNS 服务器就会去请求 com 所在的 ns 服务器(权威域名服务器)
  7. 当请求到达 com ns 服务器时,com 一看域名是在 lbinin 这个域下的,就会把 lbinin 所在的 ns 服务器再告诉咱们的 DNS 服务器
  8. 再而后,咱们的 DNS 服务器就会去请求 lbinin 这个域的 ns 服务器
  9. lbinin 这个域的 ns 服务器一看是要访问 www 就直接找到了 www 对应的「A记录」的 IP,并把它丢给咱们的 DNS,上面逐个询问的过程,即 迭代查询
  10. 最后,咱们的 DNS 再把最终解析到的这个 IP 丢给咱们的客户端,而后客户端就直接拿着去访问了。

流程总结

浏览器缓存 👉🏻 host 文件 👉🏻 系统 DNS 缓存 👉🏻 DNS 服务器进行「迭代查询」web

其中上面 1-3 为递归查询。4-10 为迭代查询。数据库

递归查询和迭代查询的区别

递归查询

客户端收到的是最终的查询结果浏览器

递归查询是一种 DNS 服务器的查询模式,在该模式下 DNS 服务器接收到客户机请求,必须使用一个准确的查询结果回复客户机。若是 DNS 服务器本地没有存储查询DNS 信息,那么该服务器会询问其余服务器,并将返回的查询结果提交给客户机。缓存

迭代查询

客户端中途会收到下一台服务器地址服务器

DNS 服务器另一种查询方式为迭代查询,DNS 服务器会向客户机提供其余可以解析查询请求的 DNS 服务器地址,当客户机发送查询请求时,DNS 服务器并不直接回复查询结果,而是告诉客户机另外一台 DNS 服务器地址,客户机再向这台 DNS 服务器提交请求,依次循环直到返回查询的结果为止。微信

资源记录类型

  • A 记录 (Address Record)** **:FQDN -> ipv4
  • AAAA 记录:FQDN -> ipv6
  • NS (Name Servers)** 记录**:名称服务器;标明当前区域的 NS 服务器是谁
  • MX (Mail Exchanger)** 记录**:邮件服务器;标明当前域内谁是邮件服务器
  • PTR (Pointer Record)** 记录**:IP -> FQDN,反向区域解析
  • SOA (State Of Authority Record)** 记录**:起始受权机构;一个解析库有且只有一个 SOA 记录,且必须为解析库的第一条记录
  • CNAME 记录:别名,如:web.admin.org. IN CNAME www.admin.org. 表示当访问 web.admin.org. 时就直接解析到 www.admin.org.

TTL

Time to Live 即生存时间,就是一条域名解析记录在 DNS 服务器中的存留时间。网络

当各地的 DNS 服务器接受到解析请求时,就会向域名指定的 NS 服务器(权威域名服务器)发出解析请求从而得到解析记录;

在得到这个记录以后,记录会在 DNS 服务器(各地的缓存服务器,也叫递归域名服务器)中保存一段时间,这段时间内若是再接到这个域名的解析请求,DNS 服务器将再也不向 NS 服务器发出请求,而是直接返回刚才得到的记录;到期则重复请求过程。

DNS 劫持

DNS 劫持又称「域名劫持」,是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围之外的请求放行,不然返回假的 IP 地址或者什么都不作使请求失去响应,其效果就是对特定的网络不能访问或访问的是假网址。其实本质就是对 DNS 解析服务器作手脚,或者是使用伪造的 DNS 解析服务器能够经过下图来展现。

解决办法

不使用运营商的 NDS 解析,使用本身的或者著名的 DNS,如:114.114.114.1148.8.8.8

内容劫持

其实内容劫持一开始的出发点是好的,是运营商为了加快用户的访问速度同时减小本身的流量损耗而作的一个缓存机制。

用户在像服务器请求数据的时候运营商会把用户的请求转移到这个缓存池中,若是缓存中有就直接返回,没有的话再去向服务器请求。而后运营商拦截并缓存服务端给用户的回调数据,这样一来能够极大的下降运营商像服务器请求的次数,也能加快用户的访问,因此出发点是好的。

可是一些非法的商家对缓存池内部作一些处理就是直接对返回的内容进行修改,这样一来咱们就会接受到错误的数据。

经常使用命令

  • nslookup 域名

参考资料

理解DNS - Code.CC - 博客园

DNS 深度理解 一 - klion’s blog 欢迎转载,转载请注明出处! 独立域名博客:flywill.com 欢迎关注公众微信号:Java小镇V 分享本身的学习 & 学习资料 & 生活 想要交流的朋友也能够加微信号备注入群:EscUpDn

相关文章
相关标签/搜索