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用于将域名正确转换为您想访问的网站的作用),修改后你的网络应用 ...
随机推荐
- Python之Requests库的7个主要方法
方法 说明 requests.request() 构造一个请求,支撑一下各方法的基础方法 requests.get() 获取HTML网页的主要方法 requests.head() 获取网页头信息的方法 ...
- 6.oop-类和对象
一.如何抽象对象1.创建一个类2.给该描述属性 属性就是java中所有的数据类型3.给该类定义行为方法 方法的签名是:public void 方法名(){方法体} 公共的 无返回类型 二.如何使用类和 ...
- (0)HomeAssistant 教程
国外:https://www.home-assistant.io/components/light.mqtt/ 中国:https://www.hachina.io/docs/890.html
- nn.ReLU(inplace=True)中inplace的作用
在文档中解释是: 参数: inplace-选择是否进行覆盖运算 意思是是否将得到的值计算得到的值覆盖之前的值,比如: x = x + 即对原值进行操作,然后将得到的值又直接复制到该值中 而不是覆盖运算 ...
- Spring Security(二十四):6.6 The Authentication Manager and the Namespace
The main interface which provides authentication services in Spring Security is the AuthenticationMa ...
- [MicroPython]TurniBit开发板旋转按钮控制脱机摆动
一.实验目的: ?学习在PC机系统中扩展简单I/O 接口的方法 ?学习TurnipBit拼插编程 ?了解舵机工作原理 ?学习TurnipBit扩展板舵机和旋转按钮接线方式 二.所需原器件: ?Turn ...
- FIFO队列算法的C程序实现
头文件:Queue.h #ifndef _Queue_H #define _Queue_H typedef struct QueueDef_ //队列对象定义 { u16 front; //队列头部 ...
- 记上海技术交流会之行备忘录(superset与odoo整合)
像每个早上一样,早起跑步回来冲个热水澡,简单的吃下早饭,看书到8:50的样子,准备赶10:02分的火车.在我看到周总的微信时,我知道这将是一个新的起点,在自己过往的2年时间,将更多的精力和时间用在了英 ...
- springcloud(十三):Eureka 2.X 停止开发,但注册中心还有更多选择:Consul 使用详解
在上个月我们知道 Eureka 2.X 遇到困难停止开发了,但其实对国内的用户影响甚小,一方面国内大都使用的是 Eureka 1.X 系列,另一方面 Spring Cloud 支持很多服务发现的软件, ...
- 网络编程-TCP/IP
TCP/IP五层模型讲解(2分) 我们将应用层,表示层,会话层并作应用层,从tcp/ip五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议 就理解了整个互联网通信的原理. 首先,用户感知到的 ...