今天晚上我正在床上躺着刷手机,然后我女朋友突然说她的电脑坏了。说连着WIFi上不了网,让我给她看一下。(这就是有个程序员男朋友的好处????)

然后我拿到电脑看了一下发现访问网页会出现DNS解析错误,就立马定位到问题了。解决起来很简单就直接修改了一下DNS解析地址然后在CMD输入ipconfig /flushdns就解决了。但是她突然问我DNS是什么。于是乎我就给她讲......

正文

就比如我们打电话一样如果你想要给你的朋友打电话,那么你肯定要知道他的手机号你们才可以建立通信,而这里的手机号就指的是IP地址,因为在计算机网络中是使用的TCP/IP进行通信的而TCP/IP是通过IP地址来确定通信对象,而IP地址都是由数字加点号所组成的12.11.12.11。如果没有IP地址就相当于你不知道你朋友的手机号但是想给他打电话,这合理吗?

但是在你访问某个网站的时候你并不是输入的IP地址,而是输入一个名字就可以访问这个网站。这个名字用来把便于人们使用的机器名字转换成为IP地址,而DNS全称就是Domain Name System域名系统。而为什么使用域名而不使用IP呢?其实就因为IP很难记????。不信你给我记十个IP试试。

域名系统其实就是名字系统,为什么不叫"名字"而叫"域名"呢?这是因为在这种因特网的命名系统中使用了许多的"域 (domain)",因此就出现了"域名"这个名词。"域名系统"明确地指明这种系统是应用在因特网中。

举例来说你如果要访问www.baidu.com这个域名。那么你就需要委托操作系统帮你查询目标网站的IP地址,这是对用户来说是不可见的。按照上面的例子来如果让你记你朋友的手机号那么肯定很困难。这个时候如果你有个电话本你只需要对每个手机号添加一个备注,想要联系某人只需要在电话本中查看到他的手机号即可。而DNS你就可以把它想象成一本巨大的电话本。而这种DNS不仅适用于IPV4还适用于IPv6。同时DNS是属于应用层并为应用层软件提供帮助。

交互流程:

域名结构

域名命名是采用的是层次树状结构的命名方法,那百度的域名举例子,百度的真实域名应该是www.baidu.com.root一般简写为www.baidu.com.而这个.表示的就是域名的根平时根域名。而后面的结构又区分为顶级域名、二级域名、三级域名等等。而二级以后的域名一般都会称之为子域名。如图:

从上图可以看出域名是由多部分组成每部分通过.分割然后在连接在一起最右边就是根域名,根域名都是对用户不可见的。一般我们见到的域名都是这样的:

域名的每个等级不超过不超过63个字符(主要为了方便记忆)。还有就是在域名中是不区分大小写的但是一般都是使用小写。而且DNS也不规定每一层级域名的意思也不限制域名的层级,各个级别的域名都是由上一级的域名机构进行管理,而最高的顶级域名则由ICANN进行管理。这样做的好处就是每个域名在互联网中都是唯一的而且也容易设计出一种查询域名的机制。

在之前域名分为三大类:

  • 国家顶级域名nTLD:比如.cn代表的是中国、.us代表的是美国、.uk代表的是英国等等

  • 通用顶级域名gTLD:最早的顶级域名有

    • .com 代表了公司和企业

    • .net 代表了网络服务机构

    • .org 非盈利性组织

    • .edu 教育机构

    • .gov 政府部门

    • .int 美国军事组织

  • 基础结构域名:基础结构域名只有一个就是arpa用于反向解析,一般都称之为反向域名。

结合着域名系统是层次树状结构那么在因特网中域名系统的结构是这样的:

那么现在就又有一个问题了。上面说到了域名有很多那么是怎么查询的?如果是com的域名就去com的域名查询吗?如果是net域名就去net服务器查询吗?

DNS服务器

如果按照上面的域名结构,那么每一个域名都需要一台服务器。现在在因特网中有很多域名那对应起来就要很多个域名服务器。并且服务器太多的话也会影响域名查询的速度。而且也不可能把所有的域名都保存在一个服务器中。所以在DNS中服务器采用分区的方法来解决上述问题。

在DNS中一个服务器所管辖的范围叫做区,每个单位根据自己的情况划分自己所管辖的区。在自己所管辖的区中每个节点都是可以连通的。然后每个区都有自己的权限域名服务器,用来保存所有域名和IP的映射。

所以在DNS中并不是用域作单位而是使用区作单位。理解了区的概念就比较简单了。

其实可以把根域名看做是一个国家而顶级域名就是一个省份以此类推那么二级域名就是市级单位,三级域名就是县级单位和镇单位。

那么从上图可以看出a.com就是一个市然后下面的节点都属于a.com这个市管辖那它们就只需要一台权限域名服务器就可以完成对a.com下面所有子域名的解析工作。所以在DNS服务器中类别并不是以域作为单位而是用区作为单位,区就是DNS服务器实际管辖的范围。在上图中其实一个区和域的关系是等于的。那么在看下面的这张图。

这时候c.a.com也划分了一个区但是它又属于a.com这个域下面这个时候他们的关系就是域大于区。因为它们同属于a.com这个域下面,在a.com这个域下面又分了一个c.a.com的区。一个区需要一台服务器那现在划分了两个区也就是需要两台权限域名服务器。那现在又有一个问题什么是权限域名服务器?

其实在DNS中服务器也是有区分的

分为三个类别分别为根域名服务器顶级域名服务器权限域名服务器

  • 根域名服务器也就是最高等级的域名服务器,根域名服务器知道所有顶级域名服务器的地址。在解析过程中只要本地DNS服务器无法解析都会去根服务器去查询。所以只要根服务器瘫痪了那么所有的DNS服务器都没法工作了。而根服务器并不做解析工作它只负责告诉你下次应该去哪个顶级服务器去查询。

  • 顶级域名服务器负责管理在该顶级域名服务器注册的二级域名

  • 权限域名服务器主要就是管理一个区的服务器

DNS是怎么查询的

浏览器拿到输入的域名后会先去浏览器的DNS缓存中查询一下是否有记录,如果存在就直接返回,不存在的话就去查询操作系统的缓存,如果操作系统也没有缓存那么就会去查看本地的HOST文件。如果HOST文件也没有记录就会去本地DNS服务如果本地DNS服务器也没有就只能去根服务器去查询了。而这些DNS服务器一般都是由网络运营商提供,或者你自己手动设置。其中根服务器世界上一共存在13台,域名服务器名字分别为“A”至“M”。一台主根服务器在美国其余12台都是辅根服务器,其中9个在美国,欧洲2个,位于英国和瑞典,亚洲1个位于日本。而所有服务器都是由ICANN统一管理。

下面完善一下查询的步骤:

  • 1.客户端浏览器缓存,没有缓存就查询操作系统缓存,如果没有就查询HOST文件,如果还没有就查询本地DNS服务器

  • 2.本地DNS服务器查询本地是否有缓存,如果没有就去查询根服务器

  • 3.根服务器返回给本地DNS服务器查询域,然后本地DNS服务器再次去查询

  • 4.本地DNS服务器把查询的结果返回给客户端,并且把结果缓存。

下图是查询a.com的流程图:

DNS查询域名的IP地址有两种方式一种是递归查询一种是迭代查询。

迭代查询

迭代查询就是本地服务器向根服务器查询一般都是使用迭代查询。迭代查询的特点就是当根域名服务器收到本地DNS服务器查询的请求后会告诉本都服务器去那个顶级服务器去查询,然后本地DNS服务器在去顶级服务器。如果顶级服务器会把自己知道的权限服务器地址告诉本地服务器,然后本地服务器在去查询权限服务器。查询到以后本地DNS服务器就会把结果返回给客户端。

递归查询

递归查询就比较简单,客户端祥本地DNS服务器查询就是采用的递归查询,如果客户端查询的域名本地DNS服务器不知道的话就会以DNS客户的身份向其他域名服务器查询。

手动查询

接下来我们在操作系统中手动查询一下某个域名的DNS。Linux中有dig,dig命令主要用来从 DNS域名服务器查询主机地址信息。

dig 命令默认的输出信息比较丰富,大概可以分为 5 个部分。

  • 第一部分显示 dig 命令的版本和输入的参数。

  • 第二部分显示服务返回的一些技术详情,比较重要的是 status。如果 status 的值为 NOERROR 则说明本次查询成功结束。

  • 第三部分中的 "QUESTION SECTION" 显示我们要查询的域名。

  • 第四部分的 "ANSWER SECTION" 是查询到的结果。

  • 第五部分则是本次查询的一些统计信息,比如用了多长时间,查询了哪个 DNS 服务器,在什么时间进行的查询等等。

dig默认查询的是A记录上面第四部分返回的结果中的A就代表了查询到的是A记录。dig命令解释网上有很多资料这里就不过多解释。想要了解更多dig命令这里推荐阮大的文章。

https://www.ruanyifeng.com/blog/2016/06/dns.html

DNS 记录的类型

类型 解释
A 地址记录,用来指定域名的 IPv4 地址,如果需要将域名指向一个 IP 地址,就需要添加 A 记录。
AAAA 用来指定主机名(或域名)对应的 IPv6 地址记录。
CNAME 如果需要将域名指向另一个域名,再由另一个域名提供 ip 地址,就需要添加 CNAME 记录。
MX 如果需要设置邮箱,让邮箱能够收到邮件,需要添加 MX 记录。
NS 域名服务器记录,如果需要把子域名交给其他 DNS 服务器解析,就需要添加 NS 记录。
SOA SOA 这种记录是所有区域性文件中的强制性记录。它必须是一个文件中的第一个记录。
TXT 可以写任何东西,长度限制为 255。绝大多数的 TXT记录是用来做 SPF 记录(反垃圾邮件)。

最后

同时需要注意DNS是有缓存机制的,缓存的目的就是为了提高查询的效率。所以在修改完DNS服务器后一定要记得刷新DNS缓存。就像我文章开头的ipconfig /flushdns命令目的就是为了清除本地DNS缓存。

【推荐关注】

【往期推荐】

36 张图梳理 Intellij IDEA 常用设置

2020-12-23

13个Mongodb GUI可视化管理工具,总有一款适合你

2020-12-23

小宇宙爆发!Spring Boot 新特性:节省95%内存占用

2020-12-22

超级干货:你应该知道的那些编程原则!!

2020-12-22

不敢相信,居然用Java写了个“天天酷跑”!

2020-12-21

深度内容

推荐加入

欢迎加入知识星球,一起探讨技术架构,交流技术人生。

加入方式,长按下方二维码:

已在知识星球更新如下:

素质二连,走一个

如果女朋友突然问你DNS是个啥...相关推荐

  1. 昨晚12点,女朋友突然问我:你会RabbitMQ吗?我竟然愣住了。

    01为什么要用消息队列? 1.1 同步调用和异步调用 在说起消息队列之前,必须要先说一下同步调用和异步调用. 同步调用:A服务去调用B服务,需要一直等着B服务,直到B服务执行完毕并把执行结果返回给A之 ...

  2. DNSPod十问吴洪声:云时代,DNS面临哪些安全挑战?

    8月5日,腾讯云中小企业产品中心总经理吴洪声受邀以演讲嘉宾的身份参加第八届互联网安全大会(简称"ISC 2020"),演讲主题为<DNS在云时代的安全挑战及应对>.IS ...

  3. DNS迭代式和递归式域名查询对比

    背景知识:DNS数据库是树状的层次式的 本地域名服务器并不在这个体系当中,它相当于这个体系面向用户的代理. 迭代式:DNS server告诉用户:我不认识这域名,但我知道你可以问哪个DNS服务器 递归 ...

  4. WINDOWS与LINUX下的DNS轮询配置

    11月12日我参加了51CTO的技术沙龙"Exchange Server系统升级与迁移",两位老师的分享都比较精彩,也让我学到了一些EXCHANGE在升级和迁移方面的知识和经验.记 ...

  5. powershell加win的dns服务器,解决网站负载均衡问题

    用我发明的powershell填坑法,加windows的dns服务器.从调整dns服务器解析ip时间段的角度,解决网站负载均衡问题. ------------------------win2012r2 ...

  6. 万字长文!搞定逃不脱的 DNS 面试题

    来源 | 我是程序员小贱 头图 | CSDN下载自视觉中国 提到网络,基本上都能把DNS给扯上去.为啥呢,今天我们来一探究竟. 提纲 Chrome浏览器原理 还记得面试过程中被问了千百遍的" ...

  7. 名字解析/DNS服务

    DNS服务 为什么要使用DNS服务?DNS服务是什么? DNS服务的工作原理 DNS服务的实现 实验1:主DNS 实验2:从DNS 实验3:反向区域服务器 实验4:子域的服务器 实验5:转发服务器 实 ...

  8. 注册域名dns服务器,dns服务器有什么用?如何用贝锐注册域名?

    DNS 的全称是 Domain Name System 或者 Domain Name Service.那么dns服务器有什么用呢?它主要的作用就是将人们所熟悉的网址 (域名) "翻译&quo ...

  9. 计算机网络 之 DNS (Domain Name System)域名服务器

    目录 DNS概述 (Domain Name System)域名系统 DNS服务 分布式层次式数据库 DNS根域名服务器 TLD(顶级域名服务器)和权威域名解析服务器 本地域名解析服务器 DNS查询案例 ...

最新文章

  1. smart-socket如何实现字符串通信
  2. springBoot探索(2)——构建手脚架
  3. leetcode - 4Sum
  4. JS拼凑方法之join
  5. 校招启动 | 2021 神策未来星全面启航,只差 1 个你!
  6. Ruby on Rails: 使用devise+cancan+rolify建立完整的权限管理系
  7. 52个实用的数据可视化工具!
  8. 51nod2626-未来常数【树上启发式合并,线段树】
  9. 怎么隐藏Windows11开始菜单中的推荐面板
  10. zabbix中文配置指南
  11. 80多个Ajax解决方案
  12. can not find Artifact XXX 的原因
  13. java项目开发——使用MAP和实体类作为参数的优缺点
  14. 税收学考试可以带计算机吗,注册税务师考试题型是不是都是选择题?能不能带计算器?...
  15. php实现商城评论,谁能写一个thinkphp 商城购物评论回复能例子?
  16. 小程序实现列表和详情页
  17. 台式计算机有哪些部分组成,常用台式电脑的基本组成
  18. 网站使用微软雅黑需要版权吗
  19. app开发都有哪些基本的开发语言选择?
  20. linux shell提示文件不存在,Bash检查是否显示文件不存在?

热门文章

  1. vector机器人 HOW TO RESET, ERASE AND RESTORE VECTOR 如何重置,删除和恢复向量
  2. linux shell 合并多个文件 并删除重复行
  3. golang context 父子任务同步取消信号 协程调度 简介
  4. 基于python的开源商业软件套装 Odoo 简介
  5. linux shell 产生随机数
  6. mysql 渗透及漏洞利用总结
  7. linux c dns查询IP地址
  8. Windows 64位驱动 关闭内存保护
  9. VS2010 error RC2170: bitmap file xxx.png is not in 3.00 format
  10. VS2010中文注释带红色下划线的解决方法