简单谈谈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 等一系列的知识. 在面试应聘者时也必问这 ...
随机推荐
- 安装WebLogic的详细步骤
安装WebLogic的详细步骤 1.在官网上下载WebLogic,详细地址如下 WebLogic 2.将WebLogic从官网上下载后wls1036_generic.jar 3.双击"wls ...
- MySQL查询所有数据库表出错
1.错误描述 1 queries executed, 0 success, 1 errors, 0 warnings 查询:show tables 错误代码: 1046 No database sel ...
- CentOS6.5 [ERROR] /usr/libexec/mysqld: Can't create/write to file '/var/lib/mysqld/mysqld.pid' (Errcode: 2)
环境是CentOS6.5,先贴个错误代码: 这个问题解决了大半天,浪费了好多时间,不过也算是值了. 事故起因是因为突然断电,mysql server直接干掉了,也没有备用电源,重启了之后看日志tail ...
- linux shell 基本规范
开头指定脚本解释器 #!/bin/bash 或 #!/bin/sh 开头加版权信息 #Date: 2017-8-01 22:50 #Author: yang qiang wei #Mail: xxx@ ...
- MongoDB添加用户验证
Mongodb默认启动是不带认证,也没有账号,只要能连接上服务就可以对数据库进行各种操作,这样可不行.现在,我们得一步步开启使用用户和认证. 第一步,我们得定位到mongodb的安装目录.我本机的是C ...
- 【BZOJ1096】【ZJOI2007】仓库建设(斜率优化,动态规划)
[BZOJ1096][ZJOI2007]仓库建设(斜率优化,动态规划) 题面 Description L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于高原 ...
- 【CJOJ P1333】【HNOI2012】矿场搭建
[HNOI2012]矿场搭建 Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖 ...
- [SDOI2015]星际战争
水题啦 网络流+二分 误差才10^-3,乱搞直接开longlong暴力每个都乘1000,输出时除一下就好了 # include <bits/stdc++.h> # define IL in ...
- Django入门-通用视图
文档:https://docs.djangoproject.com/en/1.11/topics/class-based-views/ from django.shortcuts import get ...
- Liunx2:Liunx目录结构
Liunx目录图 进入根目录,使用ll命令看一下Liunx整个根目录图: 这里面所有的目录都是买完服务器之后最初始的目录,没有进过任何加工.Liunx以树的结构组织所有目录,用一张图表示一下Liunx ...