DNS自述:我是如何为域名找到家的
对于互联网一代的我们,一出生就学会使用电脑。当我们对着浏览器地址栏输入www.baidu.com
的时候,百度的首页就出现在面前。但你可曾想过,为什么我们输入www.baidu.com
就可以弹出百度首页?在这弹指一挥间,到底发生了什么?今天就让我带你来揭开这背后发生的一切。
当我们开始之前,我们需要明白:虽然我们每次访问网页,都是使用域名的方式(例如:www.baidu.com)。但对于计算机来说,它最终访问的是域名对应的IP(例如:10.102.201.253)。所以今天我们要讲的这一切,其实就为了说清楚一件事情:DNS是如何为域名找到对应的 IP 地址的。
浏览器DNS缓存
当我们在浏览器地址栏输入域名后,浏览器首先会去其本身的 DNS 缓存中查找是否有对应域名的记录。如果有,那么直接访问对应的服务器。
不同浏览器会设置不同的 DNS 缓存时间,一般来说是 2-30 分钟之间。如果当你修改了系统 DNS 缓存后,发现访问还是没生效,你可以尝试清除下浏览器的 DNS 缓存。
系统DNS缓存
当浏览器在其自身的缓存中找不到对应域名的记录时,其将会去系统的 DNS 缓存中寻找记录。在 Windows 系统中,DNS 缓存信息存储在 C:/windows/system32/drivers/etc/hosts
中。而在 Mac OSX 系统中,DNS 缓存信息存储在 /etc/hosts
文件中。
但无论在哪个系统,该文件的格式都是域名的 IP 地址的映射。每一行是一个映射,前面是域名对应的 IP 地址,后面是对应的域名。
127.0.0.1 www.baidu.com
192.168.1.1 www.google.com
如上面的范例所示,其设置了当我们访问 www.baidu.com
时,我们直接访问 127.0.0.1
这台机器。而当我们访问 www.google.com
时,我们直接访问 192.168.1.1
这台机器。
所以很多时候,当我们在本地调试时我们可以设置任意的域名,只要该域名对应的 IP 存在对应的服务即可。例如像我这样喜爱写文章的程序员,我可以写这样设置一个域名的映射:
127.0.0.1 top-writer.google.com
当你的机子上访问 top-writer.google.com
的时候,请求自然就会转发到本机上,即使你并不是这个域名的所有者。
本地DNS服务器
如果在系统 DNS 也找不到域名的记录,那么浏览器就会去本地的 DNS 服务器(LDNS)上寻找该域名的记录。在这里的 LDNS 一般是指本机所设置的 DNS 服务器地址。例如在我的电脑上,其对应的 DNS 地址为:10.xxx.xxx.253。那么浏览器就会去这个 DNS 服务器上寻找域名对应的记录。
如果在 LDNS 服务器上找到了记录,那么就直接返回就可以。但如果还是没找到记录,那么就得进一步深入查找了。
根DNS服务器
当 LDNS 服务器还是招不到域名对应的记录时,那么其就会去根 DNS 服务器去寻找域名对应的记录。根 DNS 服务器全球只有 13 台,所以在 LDNS 服务器建立的时候,其会写死一个根 DNS 服务器的 IP 地址列表。
但实际上根 DNS 服务器并不存储所有域名的信息,其只存储顶级域名的解析记录。即对于我们访问的域名 www.baidu.com
来说,根 DNS 服务器并不能告诉我们 www.baidu.com
这个域名对应的 IP 是多少,它只能告诉我们 .com
这个顶级域名应该找哪个 DNS 服务器解析,然后把对应顶级 DNS 服务器的 IP 地址告诉我们。
顶级DNS服务器
我们访问域名 www.baidu.com
后,根 DNS 服务器告诉我们可以找对应的 .com
顶级 DNS 服务器解析。但实际上顶级 DNS 服务器只能解析二级域名的地址,即它只能告诉你:baidu.com
这个域名应该找哪台 DNS 服务器去解析。
这里我们从顶级 DNS 服务器解析 baidu.com
这个域名得到的 DNS 服务器,其实就是你买域名时用于管理解析的服务器。而且也是你设置域名 NS 记录时,设置的 DNS 服务器的地址。
注:关于什么是 NS 记录,可以在公众号后台回复「域名解析类型」,查看我写的另一篇文章。
域名DNS服务器
上一步我们知道 baidu.com
这个顶级域名应该找哪台 DNS 服务器去解析,其实这台 DNS 服务器就是我们购买域名时设置的用于解析的 DNS 服务器。在这台 DNS 服务器上,我们通过设置一条 A 记录(A 记录就是域名到 IP 地址的映射)就可以让某个域名与 IP 联系起来。
当浏览器去请求 baidu.com
对应的 DNS 服务器时,其会尝试寻找解析类型为 A ,并且主机名为 www
的解析记录。如果找到了,那么就返回对应的 IP 地址。否则就报告 DNS 解析错误,其不会再去其他 DNS 服务器上寻找了。
总结
看到这里,相信大家都清楚了 DNS 寻址的整个流程了。总的来说,DNS 寻址的顺序为:
- 浏览器 DNS 缓存
- 系统 DNS 缓存
- 本地 DNS 服务器
- 根 DNS 服务器
- 顶级 DNS 服务器
- 域名 DNS 服务器
如果到最后还是找不到解析记录,那么就直接报域名解析错误。在这个过程中,我们还可以学到两个重要的知识点,即:
第一,域名 DNS 服务器就是 NS 记录设置的地址。 我们在域名服务商可以设置 NS 记录,将域名托管给另外一台 DNS 服务器进行解析,这个时候顶级 DNS 服务器注册的域名 DNS 服务器,就是我们 NS 记录配置的值。
上图我为 doc.csyimg.com 子域名设置了一条 NS 解析记录。那么当我访问 doc.csyimg.com 的时候,当解析到顶级 DNS 服务器时,顶级 DNS 服务器应该是返回 csyimg.com 对应的域名 DNS 服务器地址。接着浏览器访问 csyimg.com 对应的域名 DNS 服务器时,发现是要访问 doc.csyimg.com 域名,因为设置了 NS 记录,于是告诉它去 ns.baidu.com DNS 服务器上去寻找对应的解析记录。
注:这里说的找 ns.baidu.com 解析,其实应该是该域名对应的 IP,这里为了表述方便,没有做过多解释。
第二,域名最终得到的 IP 地址,是通过域名的 A 解析类型。 通过上面的解释,你会发现无论怎样设置,最终都会有一台 DNS 服务器去解析该域名。而在该 DNS 服务器上,必然存在一条解析类型为 A 的解析记录。如下图所示,我设置的是一条针对 hello.csyimg.com 域名的 A 记录,其指向了 192.168.1.1 这个 IP。如果最终找不到 A 记录,那浏览器就会报 DNS 解析错误。
第三,域名是由:主机名.二级域名.顶级域名.根域名组成的。 例如:www.baidu.com 中,www
就是主机名,.baidu
就是二级域名,.com
就是顶级域名。而在 .com
后面省略的 .
就是根域名。
通过这两个知识点,你会发现域名的解析类型与 DNS 的解析原理息息相关的。如果你感兴趣可以在公众号后台回复「域名解析类型」,查看我写的另一篇文章。
DNS自述:我是如何为域名找到家的的更多相关文章
- DNS安全浅议、域名A记录(ANAME),MX记录,CNAME记录(转)
http://www.cnblogs.com/LittleHann/p/3828927.html 相关学习资料 http://baike.baidu.com/link?url=77B3BYIuVsB3 ...
- DNS安全浅议、域名A记录(ANAME),MX记录,CNAME记录 专题
首先要做的就是配置域名的MX 记录啦: 先添加一条A记录: mail.abc.com 指向 你的服务器IP! 然后添加域名的MX 记录,指向mail.abc.com A 记录( 即域名MX 记录的值为 ...
- DNS工作流程及原理 域名、IP与DNS的关系
转自:http://blog.csdn.net/maminyao/article/details/7390208 一.DNS服务概述 DNS是Domain Name System的缩写,即域名系统.其 ...
- DNS安全浅议、域名A记录(ANAME),MX记录,CNAME记录
相关学习资料 http://baike.baidu.com/link?url=77B3BYIuVsB3MpK1nOQXI-JbS-AP5MvREzSnnedU7F9_G8l_Kvbkt_O2gKqFw ...
- 【转】一个域名是用哪里的DNS来解析的,电脑怎么知道找哪一个DNS呢? 我注册域名的时候会在服务商那里配置DNS解析,一般需要24小时后才能访问,我想知道,解析后的这个数据是不是会同步到世界上所有的DNS服务器呢!如果不是,当我访问我的这个域名的时候,电脑怎么知道去找到我注册的这一家的DNS服务器呢,谁告诉他的呢?
看看DNS一些基础知识,你就了解了.1.DNS就是域名服务器,他的任务就是确定域名的解析,比如A记录MX记录等等. 2.任何域名都至少有一个DNS,一般是2个.为什么要2个以上呢?因为DNS可以轮回处 ...
- 解释-DNS,A记录,CNAME记录,域名转向,SRV记录,TTL值,泛域名与泛解析,域名绑定
http://www.lihongye.net/post/dns.html DNS DNS,Domain Name System或者Domain Name Service(域名系统或者域名服务).域名 ...
- AD域内DNS服务器如何解析公网域名
原创地址:http://www.cnblogs.com/jfzhu/p/4022999.html 转载请注明出处 AD域内需要有DNS服务器,用于解析域内的计算机名,但是域内的计算如何解析公网的域名呢 ...
- dns解决测试微信二级域名访问问题
背景介绍: 1:解决本地不能通过域名访问问题: 2:解决微信设置二级域名且本地iis站点使用非80端口号问题: ps:网站中微信部分在global中设置了重定向,代码已经修改为必须通过“wechat. ...
- linux 设置DNS解决,不能ping 域名的问题
vi /etc/resolv.conf nameserver 114.114.114.114
随机推荐
- Element-ui学习笔记2
1.Button按钮 <el-button> type属性可以修改按钮主题 type='text'时为文字按钮 plain,round,circle可以修改按钮样式,plain为朴素按钮, ...
- element-ui css 文件加载 失败(https://unpkg.com/element-ui/lib/theme-chalk/index.css,加载失败)
在main.js文件引入 import Vue from 'vue'; import Element from 'element-ui'; import 'element-ui/lib/theme ...
- java什么是方法(Method)?
方法是一组为了实现特定功能的代码块的集合.方法在语法上的功能主要有以下两个: ①:结构化代码 将代码按照功能进行组织,使代码的结构比较清晰,容易阅读和修改,也就是程序的可维护性强. ②:减少代码重复 ...
- vector容器、
一. vector 向量容器1. 创建 vector 对象(1)不指定容器大小vector<int> V;(2)指定容器大小vector<int> V(10);(3) ...
- win10 uwp 依赖属性
本文告诉大家如何使用依赖属性,包括在 UWP 和 WPF 如何使用. 本文不会告诉大家依赖属性的好处,只是简单告诉大家如何使用 在 UWP 和 wpf ,如果需要创建自己的依赖属性,可以使用代码片,在 ...
- Vue实现同级组件的通信
一.文件结构 二.vue.js 打开此链接 https://cdn.bootcss.com/vue/2.6.10/vue.js 复制粘贴页面的所有内容 三.index.html <!DOCTYP ...
- 【u224】传送机
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 刷完牙洗完脸,黄黄同学就要上课去了.可是黄黄同学每次去上课时总喜欢把校园里面的每条路都走一遍,当然,黄 ...
- 原生PHP实现Mysql数据分页功能
一. 思路整理 实现一个数据分页功能,需要有数据的总条数,每页展示的条数,和当前在第几页这三个参数 通过⌈总条数/每页展示的条数⌉可以得到总页数,比如某留言板有101条留言,每页展示10条,一那就需要 ...
- 关于better-scroll的使用注意事项
better-scroll的原理 1.什么是 better-scroll? better-scroll 是一个移动端滚动的解决方案,它不仅可以做普通的滚动列表,还可以做轮播图.picker 等等. 2 ...
- jQuery 工具类函数-检测对象是否为原始对象
调用名为$.isPlainObject的工具函数,能检测对象是否为通过{}或new Object()关键字创建的原始对象,如果是,返回true,否则,返回false值,调用格式为: $.isPlain ...