简单谈谈DNS的工作原理及实践
DNS协议简介

dns(Domain Name System)是一个全球化的分布式数据库系统,用于存储域名和互联网IP地址的映射关系。dns协议是计算机协议栈应用层中,应用最广泛的协议之一。用户每一次打开浏览器在互联网上遨游,都伴随着dns协议的工作,帮助我们定位互联网主机和资源。
而作为程序开发者,新项目、新应用上线时,如果需要申请新域名并进行配置和管理,也要求我们对dns协议足够了解。
DNS工作原理
dns系统主要分为权威dns和递归dns。
权威dns

权威dns由域名解析服务商建设,用于域名管理服务,主要工作就是管理某个或多个特定域的dns解析工作。一般较大的公司,如百度、阿里等等,都维护自身的权威dns服务器。小公司注册域名后,往往由域名注册商提供dns解析服务。
比如,所有以“taobao.com”结尾的域名,都由 taobao权威dns来管理和解析。当然,taobao.com权威域名需要向上一级com注册。
权威dns域名系统是有层级的树形结构,每一层权威dns都需要向上一层注册:
(1)最上层是根域名。全球有13台根域名服务器,遍布在各大洲。
(2)顶级域,如com,org,cn等,都需要向根域名服务注册。
(3)各国家、机构、公司等,他们的二级域名需要向顶级域名服务商注册。如taobao.com,baidu.com都需要向com注册。
以上都是权威域名,承担着特定域名的解析和管理工作。
递归dns
递归dns通常有网络服务提供商来建设。通过迭代地向权威dns查询域名,来获取dns解析结果。个人主机在启动后会自动配置好本地dns服务器,递归dns解析服务由本地dns服务器来提供。
在mac上,dns服务器记录在/etc/resolv.conf中。可以用unix*中的dig命令来追踪dns解析过程。
dns查询实践
一,使用dig命令
//详细追溯递归dns解析流程
dig +trace www.taobao.com //直接解析dns
dig www.taobao.com
dig +trace www.taobao.com
(1)向本地dns服务器查询,本地dns服务器返回根服务器地址

(2)向根域名服务器查询,返回com域名服务器地址

(3)向com权威服务器查询,返回taobao.com权威域名服务器地址

(3)向taobao.com权威域名服务器查询,www.taobao.com的CNAME记录和A记录

至此,拿到了dns系统解析的最终结果。
- 在递归dns中,先查询根域名,在查询com域名,再查询taobao.com域名,逐层查询,是谓递归查询。
- 每一个权威dns均由多台服务器提供服务,实际中还可以配置相关策略来决定具体选择哪一台进行查询。如果域名配置多个A记录就可以进行简单的负载均衡。
- 本地dns会缓存每次查询的中间结果,加速dns查询,并且会根据TTL决定域名缓存失效时间。
DNS记录分类
dns服务器中的记录分为多种,每一种有不同的作用,常见的是A记录,CNAME记录,MX记录。
A记录:IP地址记录,记录指向具体的ip地址。
CNAME:主机别名记录,记录指向另一个域名。
MX:邮件服务记录。
NS:域名服务器记录。
DNS劫持
dns协议基于udp协议,属于不可靠协议。GFW屏蔽网站的原理就是劫持并篡改了dns报文。
使用dig命令追踪facebook.com的解析结果

本来应该通过递归dns查询,向com,facebook.com等权威服务器逐层查询,GFW却直接劫持了向根服务器的查询,返回了错误的dns解析结果,导致网站打不开。
简单谈谈DNS的工作原理及实践的更多相关文章
- 《浏览器工作原理与实践》<03>HTTP请求流程:为什么很多站点第二次打开速度会很快?
一个 TCP 连接过程包括了建立连接.传输数据和断开连接三个阶段. 而 HTTP 协议,正是建立在 TCP 连接基础之上的.HTTP 是一种允许浏览器向服务器获取资源的协议,是 Web 的基础,通常由 ...
- 《浏览器工作原理与实践》 <12>栈空间和堆空间:数据是如何存储的?
对于前端开发者来说,JavaScript 的内存机制是一个不被经常提及的概念 ,因此很容易被忽视.特别是一些非计算机专业的同学,对内存机制可能没有非常清晰的认识,甚至有些同学根本就不知道 JavaSc ...
- 《浏览器工作原理与实践》<10>作用域链和闭包 :代码中出现相同的变量,JavaScript引擎是如何选择的?
在上一篇文章中我们讲到了什么是作用域,以及 ES6 是如何通过变量环境和词法环境来同时支持变量提升和块级作用域,在最后我们也提到了如何通过词法环境和变量环境来查找变量,这其中就涉及到作用域链的概念. ...
- 《浏览器工作原理与实践》<09>块级作用域:var缺陷以及为什么要引入let和const?
在前面我们已经讲解了 JavaScript 中变量提升的相关内容,正是由于 JavaScript 存在变量提升这种特性,从而导致了很多与直觉不符的代码,这也是 JavaScript 的一个重要设计缺陷 ...
- 《浏览器工作原理与实践》<08>调用栈:为什么JavaScript代码会出现栈溢出?
在上篇文章中,我们讲到了,当一段代码被执行时,JavaScript 引擎先会对其进行编译,并创建执行上下文.但是并没有明确说明到底什么样的代码才算符合规范. 那么接下来我们就来明确下,哪些情况下代码才 ...
- 《浏览器工作原理与实践》<07>变量提升:JavaScript代码是按顺序执行的吗?
讲解完宏观视角下的浏览器后,从这篇文章开始,我们就进入下一个新的模块了,这里我会对 JavaScript 执行原理做深入介绍. 今天在该模块的第一篇文章,我们主要讲解执行上下文相关的内容.那为什么先讲 ...
- 《浏览器工作原理与实践》<06>渲染流程(下):HTML、CSS和JavaScript,是如何变成页面的?
在上篇文章中,我们介绍了渲染流水线中的 DOM 生成.样式计算和布局三个阶段,那今天我们接着讲解渲染流水线后面的阶段. 这里还是先简单回顾下上节前三个阶段的主要内容:在 HTML 页面内容被提交给渲染 ...
- 《浏览器工作原理与实践》<05>渲染流程(上):HTML、CSS和JavaScript,是如何变成页面的?
在上一篇文章中我们介绍了导航相关的流程,那导航被提交后又会怎么样呢?就进入了渲染阶段.这个阶段很重要,了解其相关流程能让你“看透”页面是如何工作的,有了这些知识,你可以解决一系列相关的问题,比如能熟练 ...
- 《浏览器工作原理与实践》<04>从输入URL到页面展示,这中间发生了什么?
“在浏览器里,从输入 URL 到页面展示,这中间发生了什么? ”这是一道经典的面试题,能比较全面地考察应聘者知识的掌握程度,其中涉及到了网络.操作系统.Web 等一系列的知识. 在面试应聘者时也必问这 ...
随机推荐
- Linux显示cat帮助信息并退出
Linux显示cat帮助信息并退出 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ cat --help 用法:cat [选项]... [文件]... 将[文件 ...
- 错误卸载软件导致Windows7系统中的软件无法播放视频
1.错误描述 2.错误原因 在卸载软件时,不小心将Windows7中的服务给删除了 3.解决办法 重新安装操作系统
- 如何把Excel中的E+数值批量修改为文本格式?
日常工作中,经常会出现这样的情况,当我们把一组数据导入EXCEL表中时,本想让数字在表中全部显示出来,但是表格中却以E+的方式显示,如果数据较少,我们可以用最笨的方法一个一个的点击单元格来实现目的,但 ...
- Spring Boot 文件上传
其实网上已经有很多这样的文章了.为什么我还要记录一下呢?原因是在工作中对接外系统时,碰到了他们调取我们文件上传接口确存在着http请求头部规范的情况,从而导致用传统方法获取不到参数.今天就来整理下Sp ...
- Spring有什么缺点?
Spring有什么缺点如下: 1.jsp中要写很多代码: 2.控制器过于灵活,缺少一个公用控制器: 3.不支持分布式部署.
- iOS开发中常见bug!(内附解答方法)
序言 你是否曾经修复了一个 bug ,随后又发现了一个跟刚修复 bug 有关的 bug ,又或是修复 bug 的方式引起了另一个 bug ? 然而这些问题是绝佳的学习机会.所以我们怎样尽可能多地从修复 ...
- HiveQL DML 常用QL示例资料
hive 2.1.1 DML操作 将文件加载到hive表 //官方指导 LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tabl ...
- PAT乙级-1047. 编程团体赛(20)
编程团体赛的规则为:每个参赛队由若干队员组成:所有队员独立比赛:参赛队的成绩为所有队员的成绩和:成绩最高的队获胜. 现给定所有队员的比赛成绩,请你编写程序找出冠军队. 输入格式: 输入第一行给出一个正 ...
- 自定义MVC框架---第一章
MVC基本介绍 介绍: mvc是一种编程思想,用来解决开发项目的时候,代码如何编写,项目如何架构的问题,更具体一点就是解决多人协同开发时,如何分工协作的问题,从而提升开发效率 举一个例子:有一个人想 ...
- oracle 10g数据库下的 XDB组件的重新安装
emmmm,这是一个不做死就不会的过程!!! 今天在导出数据库时,遇到了报错信息,其实开发说这个报错没关系了,但作死如楼主,一定要把这个错给解决了,然后就有了下面的作死过程. 错误关键字是:packa ...
