DNS 到底怎么工作的? (How does dns work?)
其实这个问题每次看的时候都觉得很明白,但是很久之后就忘记了,所以这次准备记录下来。深入到这个过程的各个细节之中,以后多看看。
Step 1 请求缓存信息:
当你在开始访问一个 www.baidu.com 开始,第一件事情就是去访问本地缓存查询是否有缓存了这个地址的 ip 地址。如果能获取到直接返回,然后访问。这个缓存来自于你之前访问之后存下来的,这里还涉及到另外一个概念就是缓存的 TTL。那什么是 TTL (Time To Live)?
TTL (Time to Live)是每个DNS记录的设置,它指定解析器在查询过期之前应该缓存(或记住)DNS查询的时间,还有一个新产生的 DNS 查询记录什么时候过期。
那么当我们之前 retrieve 了一个地址之后,我们会缓存 TTL 这么久的时间,当我们现在再发起一个新请求的时候,查询到有这个缓存就可以直接拿来使用了。
让我们来看下 chrome 再访问过网址之后的 DNS 缓存情况直观的了解一下:
在 chrome 打开地址 chrome://net-internals/#dns

这是在我清理过一次 cache 之后重新访问 google 的解析数据。可以看到这里可以显示 DNS 查询到的 ip 地址和 hostname 的映射,其中还包括过期时间之类的东西。可以很明确看到 TTL 就是经过多少 s 之后过期。 TTL 的单位是毫秒。
Step1 + 查看本地 hosts:
如果浏览器 cache 上没有还活着的记录,会去查询本地操作系统的 hosts 文件。hosts 文件上面存放着对应的 ip 地址和 ns 的关系。如果找到对应的指向就会返回。
Step2 递归查询 ISP server:
如果本地没有查询到缓存,那么这个查询将会以递归的方式去询问 ISP 服务。 ISP 的递归查询服务也有自己的缓存,所以你的查询通常到这里就结束了。
Step3 询问根域名服务器:
如果 ISP 服务器并不知道你查询的域名地址在哪儿,那么就需要去查询根域名服务器。全球 13 个 DNS 服务器根扮演者一个类似于基于 DNS 电话簿一样的角色。他们虽然不知道你查询的地址的 ip 地址是多少,但是他们可以定向你到知道这个地址。
Step4 询问 TDL 服务器:
当根域名服务器在接收到查询请求之后,会将你查询的域名拆开看你的顶级域部分。比如查询 www.baidu.com 。那么会从右往左拿到 .com 并且定向查询到 TDL (顶级域名查询)。不同的顶级域都有不同的查询服务器例如 .tv .cn .org 等等等。这些顶级域查询服务器其实也没有我们需要的直接的答案,也就是我们需要的 ip 地址。但是他们同样可以将我们定向到有这些信息的服务器那里去,根域名服务器如果发现是 .com 之后就会返回 .com 的 ns(name server) 地址。
Step5 询问权威服务器:
顶级域名服务器 TDL 会 review 这个我们的请求并且拿到 baidu.com 这部分,将这个查询定向指定的权威域名服务器上去(同样是通过返回 ns 地址的方法)。这些权威域名服务器负责了解有关特定领域的所有信息通过存储 DNS 记录。这里存储了各种各样的类型的记录,以包含不同类型的信息。打个比方说就是上面我们想要知道的 www.baidu.com 这个地址,那么我们就是在询问权威域名服务器了解 A 地址。
Step6 取回这个查询到的记录:
现在我们查询到这个记录了 ISP 服务器将取回这个记录并且将它记录下来(存进自己的缓存基于 TTL)。如果后面有人再问谁知道 www.baidu.com 这个地址的时候就不再需要去询问根服务器,因为他已经自己缓存得有答案了。当然在 TTL 过期之后,就会重新进行一次 look up process 以保证自己的缓存尽量具有实时性以应对互联网上的改动。
Step7 从 ISP 取回这个记录:
ISP 获得记录之后会返回给发起这个查询的我们的电脑。我们的浏览器也同样会将这个记录缓存起来。然后我们就根据返回的这个地址访问这个 ip 地址并且建立连接(tcp/ip协议)。然后我们就愉快的在浏览器上看到内容了!
这里其实再提一嘴域名的划分问题,这个也是比较容易混淆的地方。
例如 baidu.com 这就是一个顶级域名,
www.baidu.com 不是一个顶级域名,只是顶级域名 baidu.com 上的一个 www 主机。也可以称为是一个二级域名。
a.www.baidu.com 可以称为 一个三级域名。
其实在 顶级域名上面和二级域名上面还有一些争议或者不同的说法。 例如 .com. 其实这才是顶级域名这样的说法似乎也被认可。只需要了解即可,通常的说法就是我前面例举的那种不要搞混淆咯。
Reference:
https://dyn.com/blog/dns-why-its-important-how-it-works/ dns-why-its-important-how-it-works
https://www.verisign.com/en_US/website-presence/online/how-dns-works/index.xhtml How the Domain Name System (DNS) Works
https://dyn.com/blog/dyn-tech-everything-you-ever-wanted-to-know-about-ttls/ Everything You Ever Wanted To Know About TTLs
http://blog.csdn.net/hanghangaidoudou/article/details/51753695 DNS 的几个基本概念
https://serversforhackers.com/c/hosts-file-and-dns hosts-file-and-dns
DNS 到底怎么工作的? (How does dns work?)的更多相关文章
- DNS查询的工作原理
二.DNS查询的工作原理 1.DNS查询过程按两部分进行 1.名称查询从客户端计算机开始, 并传送给本机的DNS客户服务程序进行解析 2.如果不能再本机解析查询, 可根据设定的查询DN ...
- DNS是如何工作的?
今天很多人都在讲域名系统和互联网作为一个整体是如何工作的,域名系统---也就是大家所熟知的DNS.不幸的是,对于天龙人和普通人来说,他们并不了解DNS到底是什么鬼.今天就来聊聊DNS,和那些想了解DN ...
- DNS 系列(二):DNS 记录及工作方式,你了解吗?
在上一篇<DNS 系列(一):为什么更新了 DNS 记录不生效?>中,我们主要讲解了 DNS 和 DNS 传播,知道了网络通信主要通过 IP 地址来进行,而域名系统(DNS)则是保证用户在 ...
- DNS到底是干什么用的
DNS,DomainNameSystem或者DomainNameService(域名系统或者余名服务).域名系统为Internet上的主机分配域名地址和IP地址.用户使用域名地址,该系统就会自动把域名 ...
- linux dns子域授权 split分离解析 缓存dns服务器
DNS子域授权作用:适用于同一个DNS组织父/子域名的解析工作由不同的dns服务器负责父dns服务器应该有为子域名迭代的能力 上下级区域属于不同的机构管理:.cn与.Anonymous.cn.cn需要 ...
- 《DNS攻击防范科普系列2》 -DNS服务器怎么防DDoS攻击
在上个系列<你的DNS服务真的安全么?>里我们介绍了DNS服务器常见的攻击场景,看完后,你是否对ddos攻击忧心重重?本节我们来告诉你,怎么破局!! 首先回顾一下DDoS攻击的原理.DDo ...
- DNS域名解析四种配置实验 ---Linux DNS域名解析服务
DNS域名解析服务一.BIND域名服务基础1) DNS的定义2)域名结构3)DNS系统的作用① 正向解析:根据域名查找对应的IP地址② 反向解析:根据IP地址查找对应的域名③ DNS系统的分布式数据结 ...
- 架构师成长之路6.3 DNS服务器搭建(部署单台DNS)
点击返回架构师成长之路 架构师成长之路6.3 DNS服务器搭建(部署单台DNS) 1.安装bind yum -y install bind-utils bind bind-devel bind-chr ...
- 防DNS劫持教程,手动修复本地DNS教程
防DNS劫持教程,手动修复本地DNS教程 该如何避免DNS劫持的问题呢?1. 请不要轻易连接陌生网络.2. 可以通过手动指定DNS(DNS用于将域名正确转换为您想访问的网站的作用),修改后你的网络应用 ...
随机推荐
- [Algorithm] 如何正确撸<算法导论>CLRS
其实算法本身不难,第一遍可以只看伪代码和算法思路.如果想进一步理解的话,第三章那些标记法是非常重要的,就算要花费大量时间才能理解,也不要马马虎虎略过.因为以后的每一章,讲完算法就是这样的分析,精通的话 ...
- 转://如何增加linux根目录的磁盘空间(基于LVM)?
问题引出: 在测试过程中替换so文件,报磁盘空间不足的错误. ▲问题分析: 由于当时系统部署架构的考虑,把软件和数据库部署在了同一台机器上,并且给了30G的磁盘空间.系统上占用磁盘空间的有2部分,一是 ...
- Oracle调整顾问(SQL Tuning Advisor 与 SQL Access Advisor
在Oracle数据库出现性能问题时,使用Oracle本身的工具包,给出合理的调优建议是比较省力的做法. tuning advisor 是对输入的sql set的执行计划进行优化accsee advis ...
- 转://利用从awr中查找好的执行计划来优化SQL
原文地址:http://blog.csdn.net/zengxuewen2045/article/details/53495613 同事反应系统慢,看下是不是有锁了,登入数据库检查,没有异常锁定,但发 ...
- 史上最简单的springboot国际化多语言切换实现方案
每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 前提: 在resources目录下建立 messages_en_US.properti ...
- PHP HMAC_SHA1 算法 生成算法签名
HMAC_SHA1(Hashed Message Authentication Code, Secure Hash Algorithm)是一种安全的基于加密hash函数和共享密钥的消息认证协议. 它可 ...
- nn.ReLU(inplace=True)中inplace的作用
在文档中解释是: 参数: inplace-选择是否进行覆盖运算 意思是是否将得到的值计算得到的值覆盖之前的值,比如: x = x + 即对原值进行操作,然后将得到的值又直接复制到该值中 而不是覆盖运算 ...
- day25 Python
一.day24复习 class school: x=1 #__init__初始化函数,用来帮类实例化一个具体的对象 def __init__(self,name,addr): #前面的Name是一个需 ...
- 蓝牙BLE设备主机重启回连流程分析
如果一个BLE设备已经与蓝牙中心设备连接上,那么当中心设备的断电重启,其依然会和配对过的BLE设备连接上,而不需要重新走配对的流程,这个过程叫做回连. 这篇文章就分析一下当中心设备断电重启之后,其与B ...
- 调试CAS源码步骤
1.先安装gradle2.eclipse安装gradle(sts)插件3.克隆cas源码 这一块需要很长时间4.gradle build 会遇到安装node.js 的模块 不存在的问题. 按提示解决就 ...