背景

  • 前面讲了域名、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 解析的详细过程

  1. 浏览器输入 www.bilibili.com,敲回车
  2. 浏览器会先查找本地的 DNS 缓存,如果有对应的记录, 就可以直接拿到域名对应的 IP 地址,然后就可以直接访问对应的服务器
  3. 假设缓存中找不到,就会先在本地的 hosts 文件中查找相应的域名和 IP 地址是否存在
  4. 假设 hosts 文件中也找不到,那么浏览器就会把查询请求发送到本地电脑网络设置中的 DNS 服务器上,一般是自动设置好的,自动设置的 DNS 地址一般是管理 wifi 路由器的 IP 地址;当然也可以手动设置,比如常见的 Google DNS 服务器 8.8.8.8
  5. 向这台 DNS 服务器发起查询 www.bilibili.com 对应的 IP 地址的请求,每台联网的设备都会有一台指定的 DNS 服务器
  6. 而这台 DNS 服务器会负责完整的查询过程(其实这台 DNS 服务器就是 Local DNS Server,下面内容会详细讲到)
  7. 先从 DNS 服务器们的根 DNS 服务器(Root DNS server)开始查询,这个 RDNS 只记录 com、org、net 等顶级域名的 DNS 服务器的 IP 地址信息,所以它收到查询请求之后,只会看你这个域名的顶级域名是什么
  8. 当前顶级域名是 com,RDNS 就会返回管理 com 顶级域名的 DNS 服务器的 ip 地址信息
  9. 然后 LDNS 收到 RDNS 返回的信息之后,就会找到负责管理 com 顶级域名的 DNS 服务器(Top Level Server),它收到查询请求之后,就会识别到你需要查的一级域名是 bilibili.com
  10. TDNS 就会返回管理 bilibili.com 的 DNS 服务器的 IP 地址信息
  11. LDNS 收到 TDNS 返回的信息之后,又会找到管理 bilibili.com 的 DNS 服务器(称为 Name Server),它就会返回 www.bilibili.com 的 IP 地址给 LDNS
  12. LDNS 收到最终的 IP 地址之后会返回给浏览器
  13. 浏览器收到 IP 地址之后就会访问对应的服务器
  14. 服务器会返回对应的响应内容给到浏览器,浏览器再进行渲染显示

 

域名层级

 

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 服务器先返回信息,就用哪台

 

版权声明:本文为poloyy原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/poloyy/p/14923188.html