背景

  • 前面讲了域名、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 服务器先返回信息,就用哪台

详解 DNS 解析的更多相关文章

  1. <转>详解DNS的常用记录(上):DNS系列之二

    详解DNS的常用记录(上) 在上篇博文中,我们介绍了DNS服务器的体系结构,从中我们了解到如果我们希望注册一个域名,那么必须经过顶级域名服务器或其下级的域名服务器为我们申请的域名进行委派,把解析权委派 ...

  2. DNS篇(详解DNS)

    *文章来源:https://blog.egsec.cn/archives/601 *本文将主要说明:本文主要叙述什么是DNS.域名的层级.DNS 解析过程.DNS的缓存时间.DNS 的记录类型.DNS ...

  3. XML文件详解以及解析

    转自:https://blog.csdn.net/com_ma/article/details/73277535 一.xml基础详解: 1.概述: xml:即可扩展标记语言,xml是互联网数据传输的重 ...

  4. 33 Python 详解命令解析 - argparse--更加详细--转载

    https://blog.csdn.net/lis_12/article/details/54618868 Python 详解命令行解析 - argparse Python 详解命令行解析 - arg ...

  5. 详解DNS域名解析全过程

    关于dns域名解析的大致过程很多人都知道,但有些细枝末节的东西容易遗忘,今天有空整理一下,作为以后复习用,如有不对的地方,还望指正.解析大致过程如图(不喜欢看图的可以直接跳过): 当一个用户在地址栏输 ...

  6. 详解DNS,你真的懂吗?

    what`s  this ? 概念 域名系统(英文:DomainNameSystem,缩写:DNS)是互联网的一项服务.它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网.D ...

  7. 详解DNS重绑定攻击

    0x00 前言 DNS重绑定攻击的用法有很多种,这篇文章主要理解DNS重绑定攻击的原理,并介绍如何通过DNS重绑定来攻击内网设备.为了更好的理解DNS重绑定攻击,我们先从Web浏览器的同源策略开始介绍 ...

  8. <转>详解DNS的常用记录(下):DNS系列之三

    在上篇博文中我们介绍了DNS服务器中几种不可或缺的记录,包括A记录,NS记录和SOA记录.本篇博文中我们将继续为大家介绍DNS的另外几种常用记录,希望能对大家了解DNS有所帮助. 四 MX记录 MX记 ...

  9. 详解DNS域名解析系统(域名、域名服务器[根、顶级、授权/权限、本地]、域名解析过程[递归与迭代])

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/105583806 学习课程:<2019王道考研计算机网络> 学习目的 ...

随机推荐

  1. 推荐一些学习MySQL的资源

    前言: 在日常工作与学习中,无论是开发.运维.还是测试,对于数据库的学习是不可避免的,同时也是日常工作的必备技术之一.在互联网公司,开源数据库用得比较多的当属MySQL了,相信各位小伙伴关注我的原因也 ...

  2. 什么是redis的缓存雪崩, 穿透, 击穿?

    目前的互联网系统没有几个不使用缓存的, 但是只要使用缓存的话就会面临这几个问题, 如使用redis缓存技术, 可能会遇到缓存的雪崩, 穿透, 以及击穿. 首先来看一个简单的正常缓存流程: 如用户访问J ...

  3. CSS中margin负值巧布局

    margin负值实现细边框 我们先准备五个div盒子,并设置好浮动和2px的实线黑色边框,看看效果 中间的边框线挨在了一起致使边框变粗成了4px,这时使用margin负值就可以解决这个问题 <s ...

  4. log日志重复输出问题(没弄明白原因)

    在别的模块调用定义好的函数 输出的日志出现第一次输出输出一条,第二次输出输出两条...的情况 最后在定义函数处remove了句柄 引用了https://blog.csdn.net/huilan_sam ...

  5. 【转载】复制文件到已存在的Jar

    复制文件到已存在的Jar 技术标签: Ant  OSGI  Eclipse  脚本  配置管理   问题 这两天在写一个小东西.这个小东西是一个大东西的一部分.其实也就是其中的一两个类.而这个大东西需 ...

  6. UltraISO制作启动盘安装CentOS7

    UltraISO制作启动盘安装CentOS7 发表于 2020-03-10  |  分类于 DevOps  |  没有评论 简单几个步骤即可完成启动盘的制作,非常便利 准备工具 准备8G优盘(启动盘制 ...

  7. 面向对象——python核心编程第二版

    类与实例 类与实例相互关联着:类是对象的定义,而实例是"真正的实物",它存放了类中所定义的对象的具体信息. class MyData(object): pass >>& ...

  8. Scala 中的可变(var)与不可变(val)

    引言 Scala 中定义变量分为 var(可变变量)和 val(不可变变量) Scala 中集合框架也分为可变集合和不可变集合.比如 List(列表) 和 Tuple(元组)本身就是不可变的,set ...

  9. 6.1 tar:打包备份

    tar命令     在Linux系统里,tar是将多个文件打包在一起,并且可以实现解压打包的文件的命令.是系统管理员最常用的命令之一,tar命令不但可以实现对多个文件进行打包,还可以对多个文件打包后进 ...

  10. flink的checkpoint页面监控

    flink web页面中提供了针对Job Checkpoint相关的监控信息.Checkpoint监控页面共有overview.history.summary和configuration四个页签,分别 ...