理解 DNS
DNS 是什么?
DNS(Domain-name-system) 是一个将域名翻译成 ip 地址的系统。比如将 https://github.com 翻译成 11.234.22.112
这串 ip 地址。
为什么需要将域名翻译成 ip 地址?
之所以要把域名翻译成 ip(准确的说是 将域名转换成 ip
) ,有以下原因:
- HTTP 是基于 TCP/IP 之上的应用协议,所以需要通过 ip 地址来进行通信。
- 人类不擅长记忆 ip 地址。
- ip 地址和目标计算机并不是完全绑定的关系,可能你今天记住的 11.234.22.112 对应的是 GitHub 的服务器,明天 Google 把它买下来配置到自己的服务器了。ip 地址需要一个别名,对应一个(或一群)机器物理机器。
怎么实现的?
大概是这样一个过程:
[TODO: 画一个好看的 DNS 解析示意图,替换掉下面的图]
- 如果是浏览器,进入到浏览器 DNS 解析模块。先查看浏览器的 DNS 缓存,如果没有则由调用操作系统的 DNS 模块。
- 操作系统 DNS 模块查询 hosts 文件,如果有对应的映射,则直接返回 hosts 中的配置;没有则查询本地 DNS 服务器(一般是网络服务商提供的 DNS,也可以自己修改为常用的公共 DNS)。
- 本地 DNS 服务器如无记录则查询根域名服务器。根域名服务器返回顶级域名服务器的 ip 地址。
- 本地 DNS 服务器向顶级域名 DNS 服务器查询,然后返回域名服务提供商的 DNS 服务器 ip 地址。
- 域名服务提供商的 DNS 服务器返回 目标域名 的 ip 地址
- 本地 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工作原理及其应用、优化