详解 DNS 解析
背景
- 前面讲了域名、IP,那么还缺少一个主角,就是 DNS
- 这些都是网络中最最最基础的,也是最最最重要的概念,很有必要深入学习下
- 所有素材均来自:https://www.bilibili.com/video/BV1Gh411y7LS?t=10,这个 up 声音好听,动画很赞,言简意赅,值得一看
如何打开一个网站?
- 比如你打开上面我发的链接,就是打开一个网站
- 虽然访问的是一个域名,但浏览器最终实际访问的是这个域名背后对应的 IP 地址,然后再访问这个 IP 地址背后的服务器来打开网站
提问
那浏览器是怎么知道不同域名背后都是对应哪个 IP 地址呢?答案就是我们今天要讲的主角 DNS
Domain Name System 域名系统
DNS 到底干嘛用的?
- DNS 可以理解为是一种机制,它可以管理世界上所有域名和 IP ,它依靠的就是 DNS 服务器们
- 在互联网中,有很多 DNS 服务器,如何高效查询和管理域名、IP 是需要好好研究一下的
DNS 的工作原理
分层协作
之前域名篇讲过域名层级
- www:二级域名
- bilibili:一级域名
- com:顶级域名
其实还有一个根域名,因为有且仅有它一个,所以写了等于没写一样
所以访问 www.bilibili.com、www.bilibili.com.root、www.bilibili.com. 效果是一样的,可以自己试一试
DNS 解析的详细过程
- 浏览器输入 www.bilibili.com,敲回车
- 浏览器会先查找本地的 DNS 缓存,如果有对应的记录, 就可以直接拿到域名对应的 IP 地址,然后就可以直接访问对应的服务器
- 假设缓存中找不到,就会先在本地的 hosts 文件中查找相应的域名和 IP 地址是否存在
- 假设 hosts 文件中也找不到,那么浏览器就会把查询请求发送到本地电脑网络设置中的 DNS 服务器上,一般是自动设置好的,自动设置的 DNS 地址一般是管理 wifi 路由器的 IP 地址;当然也可以手动设置,比如常见的 Google DNS 服务器 8.8.8.8
- 向这台 DNS 服务器发起查询 www.bilibili.com 对应的 IP 地址的请求,每台联网的设备都会有一台指定的 DNS 服务器
- 而这台 DNS 服务器会负责完整的查询过程(其实这台 DNS 服务器就是 Local DNS Server,下面内容会详细讲到)
- 先从 DNS 服务器们的根 DNS 服务器(Root DNS server)开始查询,这个 RDNS 只记录 com、org、net 等顶级域名的 DNS 服务器的 IP 地址信息,所以它收到查询请求之后,只会看你这个域名的顶级域名是什么
- 当前顶级域名是 com,RDNS 就会返回管理 com 顶级域名的 DNS 服务器的 ip 地址信息
- 然后 LDNS 收到 RDNS 返回的信息之后,就会找到负责管理 com 顶级域名的 DNS 服务器(Top Level Server),它收到查询请求之后,就会识别到你需要查的一级域名是 bilibili.com
- TDNS 就会返回管理 bilibili.com 的 DNS 服务器的 IP 地址信息
- LDNS 收到 TDNS 返回的信息之后,又会找到管理 bilibili.com 的 DNS 服务器(称为 Name Server),它就会返回 www.bilibili.com 的 IP 地址给 LDNS
- LDNS 收到最终的 IP 地址之后会返回给浏览器
- 浏览器收到 IP 地址之后就会访问对应的服务器
- 服务器会返回对应的响应内容给到浏览器,浏览器再进行渲染显示
域名层级
Local DNS Server
通过一个实际生活的栗子来讲解
转发 DNS 查询请求
- 浏览器访问 www.bilibili.ocm,发起 DNS 查询请求
- 假设本地 DNS 缓存没找到,hosts 文件中也没有,那么浏览器就会发送 DNS 请求,请求会先经过家里的路由器
- 路由器收到 DNS 查询请求后,会转发给光喵(宽带盒子)
- 光喵再转发给运营商 DNS 服务器
- 重点:电信、移动、联通都有很多 DNS 服务器,不同的 DNS 服务器会负责各自区域内的联网设备的 DNS 请求的查询
Local DNS Server(LDNS)
- LDNS 收到联网设备的 DNS 查询请求后
- LDNS 会现在自己服务器本地查询有没有对应的记录
- 如果之前已经有设备通过这台 LDNS 服务器查询过 www.bilibili.com 这个域名对应的 IP 地址,那么是会有缓存的,这样可以直接返回相应的 IP 地址
- 如果它在服务器缓存中没有找到 www.bilibili.com 的 IP 信息
- 那么 LDNS 就会开始依次查询 Root DNS、Top DNS、Name Server(上面说到的流程)
- 最后拿到 www.bilibili.com 的 IP地址,返回给浏览器
为什么宽带运营商的 DNS 服务器会知道 RDNS 的 IP地址呢?
- 因为 RDNS 全球只有 13 台,基本是固定不变的
- 所以在所有 DNS 服务器中,他们的信息都是内置的
重点
- 除了 RDNS 已知有 13 台之外,TDNS 和 Name Server 的数量都是不固定的
- 当 LDNS 发起查询请求的时候,哪台 DNS 服务器先返回信息,就用哪台