理解 DNS

DNS 是什么?

DNS(Domain-name-system) 是一个将域名翻译成 ip 地址的系统。比如将 https://github.com 翻译成 11.234.22.112 这串 ip 地址。

为什么需要将域名翻译成 ip 地址?

之所以要把域名翻译成 ip(准确的说是 将域名转换成 ip) ,有以下原因:

  1. HTTP 是基于 TCP/IP 之上的应用协议,所以需要通过 ip 地址来进行通信。
  2. 人类不擅长记忆 ip 地址。
  3. ip 地址和目标计算机并不是完全绑定的关系,可能你今天记住的 11.234.22.112 对应的是 GitHub 的服务器,明天 Google 把它买下来配置到自己的服务器了。ip 地址需要一个别名,对应一个(或一群)机器物理机器。

怎么实现的?

大概是这样一个过程:

[TODO: 画一个好看的 DNS 解析示意图,替换掉下面的图]

  1. 如果是浏览器,进入到浏览器 DNS 解析模块。先查看浏览器的 DNS 缓存,如果没有则由调用操作系统的 DNS 模块。
  2. 操作系统 DNS 模块查询 hosts 文件,如果有对应的映射,则直接返回 hosts 中的配置;没有则查询本地 DNS 服务器(一般是网络服务商提供的 DNS,也可以自己修改为常用的公共 DNS)。
  3. 本地 DNS 服务器如无记录则查询根域名服务器。根域名服务器返回顶级域名服务器的 ip 地址。
  4. 本地 DNS 服务器向顶级域名 DNS 服务器查询,然后返回域名服务提供商的 DNS 服务器 ip 地址。
  5. 域名服务提供商的 DNS 服务器返回 目标域名 的 ip 地址
  6. 本地 DNS 服务器完成任务,返回 ip 地址。

一些 DNS 工具

查看 chrome dns 记录:

macOS 查看本地 DNS 服务器的记录

nslookup github.com

可以看到,在解析域名 github.com 时,是通过服务器192.168.3.1来解析的。因此,本主机的 DNS 服务器地址为: 192.168.10.5。GitHub 的地址为:20.205.243.166

资源

网络系列 - 再聊DNS工作原理及其应用、优化