详解 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 服务器先返回信息,就用哪台
详解 DNS 解析的更多相关文章
- <转>详解DNS的常用记录(上):DNS系列之二
详解DNS的常用记录(上) 在上篇博文中,我们介绍了DNS服务器的体系结构,从中我们了解到如果我们希望注册一个域名,那么必须经过顶级域名服务器或其下级的域名服务器为我们申请的域名进行委派,把解析权委派 ...
- DNS篇(详解DNS)
*文章来源:https://blog.egsec.cn/archives/601 *本文将主要说明:本文主要叙述什么是DNS.域名的层级.DNS 解析过程.DNS的缓存时间.DNS 的记录类型.DNS ...
- XML文件详解以及解析
转自:https://blog.csdn.net/com_ma/article/details/73277535 一.xml基础详解: 1.概述: xml:即可扩展标记语言,xml是互联网数据传输的重 ...
- 33 Python 详解命令解析 - argparse--更加详细--转载
https://blog.csdn.net/lis_12/article/details/54618868 Python 详解命令行解析 - argparse Python 详解命令行解析 - arg ...
- 详解DNS域名解析全过程
关于dns域名解析的大致过程很多人都知道,但有些细枝末节的东西容易遗忘,今天有空整理一下,作为以后复习用,如有不对的地方,还望指正.解析大致过程如图(不喜欢看图的可以直接跳过): 当一个用户在地址栏输 ...
- 详解DNS,你真的懂吗?
what`s this ? 概念 域名系统(英文:DomainNameSystem,缩写:DNS)是互联网的一项服务.它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网.D ...
- 详解DNS重绑定攻击
0x00 前言 DNS重绑定攻击的用法有很多种,这篇文章主要理解DNS重绑定攻击的原理,并介绍如何通过DNS重绑定来攻击内网设备.为了更好的理解DNS重绑定攻击,我们先从Web浏览器的同源策略开始介绍 ...
- <转>详解DNS的常用记录(下):DNS系列之三
在上篇博文中我们介绍了DNS服务器中几种不可或缺的记录,包括A记录,NS记录和SOA记录.本篇博文中我们将继续为大家介绍DNS的另外几种常用记录,希望能对大家了解DNS有所帮助. 四 MX记录 MX记 ...
- 详解DNS域名解析系统(域名、域名服务器[根、顶级、授权/权限、本地]、域名解析过程[递归与迭代])
文章转自:https://blog.csdn.net/weixin_43914604/article/details/105583806 学习课程:<2019王道考研计算机网络> 学习目的 ...
随机推荐
- 云空调来自 GitHub 的冷气——GitHub 热点速览 v.21.20
作者:HelloGitHub-小鱼干 万物皆可上云,air-conditioner 是上周火爆小鱼干朋友圈和公众号信息流的云空调项目.第一眼的时候,你会觉得和这个云空调还挺别致的,第二眼,si~~感到 ...
- Jenkins 基础篇 - 基础设置
站点设置 刚搭建好 Jenkins 环境,你还需要做一些简单设置,让我们的 Jenkins 看起来是这么一回事,特别是你要用于生产环境的时候.首先就是域名配置,如果你为 Jenkins 服务分配了一个 ...
- js取随机数看这里
取0~10的随机数 Math.Random()*10 ; 取1~10的随机数 Math.Random()*9 + 1 ; 取0~10的随机整数(十一个数字) Math.floor( Math.Rand ...
- Spring中声明式事务存在的优缺点以及注意事项!
事务管理在系统开发中是不可缺少的一部分,Spring提供了很好事务管理机制,主要分为编程式事务和声明式事务两种. 关于事务的基础知识,如什么是事务,数据库事务以及Spring事务的ACID.隔离级别. ...
- 消息队列RabbitMQ(五):死信队列与延迟队列
死信队列 引言 死信队列,英文缩写:DLX .Dead Letter Exchange(死信交换机),其实应该叫做死信交换机才更恰当. 当消息成为Dead message后,可以被重新发送到另一个交换 ...
- Java集合详解(二):ArrayList原理解析
概述 本文是基于jdk8_271版本进行分析的. ArrayList是Java集合中出场率最多的一个类.底层是基于数组实现,根据元素的增加而动态扩容,可以理解为它是加强版的数组.ArrayList允许 ...
- 用 set follow-fork-mode child即可。这是一个 gdb 命令,其目的是告诉 gdb 在目标应用调用fork之后接着调试子进程而不是父进程,因为在 Linux 中fork系统调用成功会返回两次,一次在父进程,一次在子进程
GDB的那些奇淫技巧 evilpan 收录于 Security 2020-09-13 约 5433 字 预计阅读 11 分钟 709 次阅读 gdb也用了好几年了,虽然称不上骨灰级玩家,但 ...
- 基于多主机的Web服务
[Centos7.4版本] !!!测试环境我们首关闭防火墙和selinux [root@localhost ~]# systemctl stop firewalld [root@localhost ~ ...
- mysql中的实例、数据库关系简介
MySQL是单进程多线程(而Oracle等是多进程),也就是说MySQL实例在系 统上表现就是一个服务进程,即进程(通过多种方法可以创建多实例,再安装一个端口号不同的mysql,或者通过workben ...
- vue+element-ui, el-upload组件 文件上传之前return false,会自动调用文件移除回调问题
日常搬砖的时候,项目中在使用element-ui的上传组件,但是当我在文件上传文件之前的回调里面做了些文件格式的二次校验和文件大小的校验的时 然后 return false 会发现调用 文件移除的回调 ...