DNS这个东西,你是真的了解了吗?

news2025/1/12 23:26:52

都说程序员是面向Google编程,殊不知当你输入 www.google.com 地址的时候,是否有想过,在回车的一瞬间浏览器如何将请求发送,如何到达目的地为你取得正确的数据。

遇到问题我们通常会打开浏览器,输入 www.google.com 回车,然后搜索我们的问题,获取到我们想要的内容后,我们又会心满意足的关闭浏览器。

而在这一个请求的过程中,浏览器内部发生了什么?

我们也许会在某个不经意间发现,输入 142.251.43.14 这串 IP 也能够访问Google网站,而为了让人觉得高大上一点,你改掉了输入 google.com 的 "臭毛病", 而是每次都会在浏览器输入这串IP,毕竟在回车之前别人总是难以琢磨你要访问的是哪个网站,除非遇到 "志同道合" 的人。

一开始你使用得不亦乐乎,毕竟敲入这串 IP 也能够熟能生巧,使用速度也不减当年,但某一天你跟往常一样输入这串IP 的时候发现怎样都访问不到网站了,你开始急了,并寻找问题,怀疑自己的记忆力是否出现了问题,亦或是网站出现了问题,折腾半天后,发现是 Google 网站的 IP 发生了变化,而等待你的就只有两条路,一是继续背下新的 IP 地址,但难保某一天又面临不能访问的情况,二是回归从前,老老实实访问 google.com 。最终你醒悟了,终于发现背诵 IP 进行日常访问真是个 "有病" 的行为。

那么为什么 www.google.com 能够通过 142.251.43.14 进行访问?这里我们先记住两个名词,一个是域名,一个是 IP,www.google.com 是一个域名,而 142.251.43.14 则是一个 IP。概念:域名可以对应有多个 IP 地址。

怎么理解?很简单,打开你的手机通讯录,可以看到 富婆 就是一个 "域名" 的概念,而具体的电话号码就可以对应上 "IP"

​我们想要给一个人打电话,我们可以输入富婆,也可以输入具体的电话号码,当然富婆的记忆点低,而电话号码的记忆点高,而为什么与遇到上面所说的一点时间后再次访问 IP 就访问不到网站了,这种情况你可以想象成,富婆换电话了 ~

那么回到我们的内容,将域名解析为 IP 的这个过程就是 DNS(Domain Name System) 域名系统。

DNS 产生背景

Internet 将数量众多的主机连接在一起,要让这些主机能够进行通信,就需要有一套名字标识体系,让主机之间能够彼此找到对方。实际上,在 Internet 上有多种方式可以进行主机标识,既可以用主机名(域名)标识,也可以使用IP地址进行标识。主机在互联网上的位置主要靠 IP 地址进行标识,每个 IP 地址都由 4 个字节组成,有这严格的层次结构,以便路由器进行识别和处理。但这种纯数字的标识方式对于人类的记忆来说简直是个噩梦,因此提出了主机名的标识方式,就是上述说到的 www.google.com ,这种名字的好处很直接,就是便于记忆。但是对于喜欢 0 和 1 的计算机来说,肯定更喜欢 IP 的表达方式,因此就出现了计算机喜欢 IP 地址,人喜欢主机名的对立情况,那么就需要一个适配器 来完成两者之间的转换,这就是主机名与IP地址的映射关系。

在DNS之初,整个网络中只有几百台的主机,所有的主机信息以及主机名与地址的映射记录都存放在一个名为 HOST.TXT 的文件中。 HOST.TXT 从一台名为 SRI-NIC 的主机上分发到整个网络,而维护映射记录的方式也很粗暴,通过将变更信息以电子邮件的方式告知管理员,然后进行定期 FTP 到 SRI-NIC 上,获得最新的 HOST.TXT 文件。

但这种方式长期来看肯定是不合实际的,互联网飞速发展,主机的数量日益暴增,存在问题:

  • 无法进行分散管理

  • 无法及时全网更新与同步

  • 维护困难

为了解决以上问题,1984年,南加州大学信息科学所的 PaulMockaprtris 发布了描述 DNS 的 RFC 882 和RFC 883的规范,简单来说就是 DNS 诞生了。

DNS 工作原理

DNS 实际上是一个应用层协议,但它通常被其他的应用层协议所使用,用于将用户提供的主机名解析为 IP 地址。

当我们在浏览器的地址栏上输入 www.google.com 这样一个 URL时,实际上我们想要浏览的网页内容都存放在互联网中的某台服务器上,而浏览器的任务就是找到我们想要访问的这台服务器的 IP 地址,然后向它请求内容,而这一整个过程就是 DNS 工作的内容。

​如图所示,DNS 地址解析服务是在 HTTP 连接建立之前的一个过程。从用户主机上调用应用程序的角度来看,DNS是一个提供简单、直接的转换服务的黑盒子,但实际上 DNS 服务系统运转相当复杂,由分布于全球的大量 DNS 服务器以及相关应用层协议共同组成。

域名结构

整个互联网中的域名空间结构就像是一棵倒置的树

我们试着将一个 Google 的域名进行拆分,www.google.com

​我们惊奇的发现,之前看似简单的一段域名居然由这么多部分构成。既然上部分说到,域名空间结构就像是一棵倒置的树,那么我们就手动梳理下这棵树的结构。

​每个顶级域由对应的顶级域(TLD)服务器负责管理,除了以下 7 个顶级域名,还有各个国家的顶级域名(cn、uk、ca和 fr 等)也在这一级别进行管理。

每个顶级域再向下展开分支,每个分支域都是一个子域,比如 google.com 是 com 的子域,而 google.com 也可再包含子域,比如 a.google.com、b.google.com。一个域就是域名空间中的一棵子树,域的名字也就是这棵子树的顶端节点的域名。

拆分原理

DNS 承载的流量是全球的流量,那么将结构设计为层次结构的原因也很简单,那就是分布承担流量

在每个域中,会有一台或多台服务器用来保存这个域名空间的所有信息,并且响应关于该域名空间的所有请求,这种服务器就叫做这个域的 权威域名服务器(授权域名服务器) 。它拥有这个域的所有的域名信息,每个域都可以分为多个子域,而每个权威域名服务器可以个一个或多个区域进行解析。

google.com 可以被划分为三个子域,a.google.com、b.google.com和 c.google.com。每个子域都可以自行维护自己的权威域名服务器,一个域可以有多台权威域名服务器,但是只有一台是主域名服务器,这台主域名服务器负责向其他辅域名服务器分发每个域名空间的更新信息。简单理解,域名空间就相当于是一个 小集群

当一个子域被授权出去后,它原本所属的域就不再包含它的数据,而只留下一些指针,这些指针指向相应子域的授权域名服务器。如果有一个请求来询问该子域的信息,那么所返回的应该是该子域权威服务器的列表。

因此,DNS 服务器层由:根 DNS 服务器、顶级域名(TLD)服务器和权威DNS服务器共同组成 ,共同维护分布式、层次化的DNS数据库。DNS系统采用树形设计的一个主要目的就是为了分撒管理,而这种分散管理是通过 授权 来实现的。对域进行授权,就是域管理组织把子域授权给其他组织进行管理,由子域管理者来维护子域中的数据,可以自由改动数据,包括对子域的再次划分和授权。

在 DNS 系统中还有一类非常重要的域名服务器,叫做 本地DNS服务器(LDNS),是用户所在局域网或 ISP 网络中 的域名服务器,本地 DNS 服务器地址是客户端网络配置的一部分,或者通过 DHCP 方式分配给客户端。

​针对DNS的分布查询原理如下:

​浏览器发出的请求会先发送到本地DNS服务器,本地DNS服务器收到浏览器的域名解析请求后,会采用递归的方式向 DNS 系统中的其他远程域名服务器提出查询请求。(递归方式指每次查询请求都由本地DNS服务器发起,收到答复后再向下一个远程DNS服务器提出请求,直到获得结果。迭代查询指本地DNS服务器只将自己知道的最合适的答案返回给查询者,帮助它把查询过程继续下去,而它本身不再做其他任何查询)

过程: 本地DNS服务器首先会去根DNS服务器请求解析(此时条件是本地DNS服务器并没有关于这个域名的缓存),根域名服务器中虽然没有www.google.com这条记录的,但它可以知道这个URL属于com 域,于是就找到com域服务器的IP地址,然后访问com域服务器,重复上面的操作,再找到放了google 域的服务器是哪个,继续往下,直到找到www.google.com的那条记录,最后返回对应的IP地址。

缓存原理

频繁使用 DNS 查询会给使用它的互联网应用带来额外的时延,而时延本身不能确定,有可能大有可能小。那么为了解决这个问题就需要引入 缓存 机制。缓存是指 DNS 查询结果在主机中的缓存,有了缓存就不需要在每次查询的时候都经过复杂的递归过程。当然 DNS 数据有可能过期,因此 DNS 服务器不能把数据永远的存放在缓存中,管理员会为这些数据设置一个生存期(TTL)。超过 TTL 时间的数据会被清除,重新向 DNS 服务器进行查询。

除了DNS服务器能够缓存 DNS 响应信息之外,客户端浏览器也可以缓存 DNS 响应信息,当用户请求页面域名解析结果在浏览器自身的DNS缓存汇总能够查到时,就不会向DNS服务器发起请求了,这样可以加快浏览网页的速度。当消息记录时间超过浏览器设置的 DNS 缓存时间时,会重新向DNS服务器发起域名解析请求,用新的解析结果更新缓存。

记录类型与报文格式

域名服务器是根据资源记录来对 DNS 请求进行应答的。在 DNS 系统中,最常见的资源记录是 Internet 类记录,资源记录是一个包含了下列字段的 4 元组:

  • Name

  • Value

  • Type

  • TTL

其中,TTL 是该记录的生存时间,它决定了资源记录应当从缓存中删除的时间。Name 和 Value 的值取决于 Type,即记录类型。而记录类型分为以下几类:

我这里附上一张阿里云的域名解析配置图,先有一个大致的概念

  1. A / AAAA:Address

A 记录用于描述域名到 IP 地址的映射关系,对同一个域名可以有多条 A 记录,也就是说一次DNS查找可以返回多个地址。

  1. CNAME

CNAME 记录用于描述别名与域名的对应关系,这种记录允许你将多个名字映射到同一台计算机。比如我们有个域名是 cbuc.com,那我可以添加一条 www.cbuc.com 的 CNAME记录,以便请求 www.cbuc.com 时也能够访问到 cbuc.com 。查找过程也是通过 www.cbuc.com 找到 cbuc.com ,继而找到对应的 IP 地址,这里不再赘诉。

  1. NS:Name Server

NS 记录是域名服务器记录,用于指定该域名由哪个 DNS 服务器来进行解析。每个区域可以有多个域名服务器,因此可以有多条NS记录。

  1. SOA:Start Of Authority

SOA 记录用于指定该区域的权威域名服务器。每个区域允许切只允许有一个 SOA 记录,它是资源记录的第一个条目。

  1. PTR:Pointor Record

PTR 记录用于描述IP地址到域名的映射关系

DNS 总结

DNS是域名系统的简称,它是一种用于将域名和IP地址相互映射的协议。简单地说,它是一种用于将人类可读的域名(例如www.google.com)转换为浏览器可以理解的IP地址(例如 142.251.43.14)的方法。这样,用户就可以通过输入域名来访问网站,而无需记住网站的IP地址。

DNS的设计原理是使用分层的系统将域名和IP地址相互映射。主要包括以下三个部分:

  • 域名服务器(DNS服务器):DNS服务器是网络中的一种特殊服务器,它存储了域名和IP地址的映射关系。当用户访问一个网站时,浏览器会向DNS服务器发出请求,DNS服务器则会返回该网站的IP地址。

  • 域名系统域(DNS域名空间):DNS域是用于组织DNS服务器的层次结构。它以树型结构组织DNS服务器,使得每个服务器都有一个唯一的名称,这样就可以方便地查找到指定的DNS服务器。

  • 域名系统数据库(DNS数据库):DNS数据库是用于存储域名和IP地址映射关系的数据库。它包含了所有域名和IP地址的映射关系,以便DNS服务器可以根据用户的请求返回正确的IP地址。

简而言之,当用户访问一个网站时,浏览器会向DNS服务器发出请求,DNS服务器会查询DNS数据库,并根据域名和IP地址的映射关系返回正确的IP地址

DNS系统的设计具有以下几个亮点:

  • 可扩展性:DNS系统的分层结构允许添加新的DNS服务器,从而支持更多的域名和IP地址。

  • 可靠性:DNS系统可以通过多台DNS服务器进行冗余存储,从而提高系统的可靠性。

  • 灵活性:DNS系统允许用户随时修改域名和IP地址的映射关系,从而使网络更加灵活。

  • 可维护性:DNS系统可以使用缓存技术,从而减少DNS数据库的查询次数,降低系统的维护成本。

最后

好了,以上便是本篇的所有内容,如果觉得对你有帮助的小伙伴不妨三连鼓励一下,便是对小编最大的支持。不要空谈,不要贪懒,一起来做个吹着牛X做架构的程序猿吧~ 再见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/82389.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EMQX+Prometheus+Grafana:MQTT 数据可视化监控实践

前言 作为一款全球下载量超千万的大规模分布式物联网 MQTT 服务器,最新发布的 EMQX 5.0 不仅全球首个达成单集群 1 亿 MQTT 连接支持,也是首个将 QUIC 引入 MQTT 的开创性产品。如今,EMQX 在各个行业为高可靠、高性能的物联网实时数据移动、…

阿里云服务器地域和可用区常见问题及官方资料解答

阿里云服务器同一地域分为多个可用区,不同地域的实例之间内网互不相通;选择靠近您客户的地域,可降低网络时延、提高您客户的访问速度。本文介绍阿里云地域和可用区的概念、选择指导、两者的关系以及阿里云支持的地域和可用区列表。 一.地域…

MySQL客户端的进阶操作

GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者:土豆娃娃文章来源:社区投稿 引言 作为一个MySQL数据库从业者,我们最常用的工具就是my…

极米RS Pro 2值得买吗?极米科技这款4K投影真实体验怎么样?

2022电商的最后一场狂欢购物节“双十二”已到来,许多小伙伴想趁此次机会购置一些礼物给辛苦一年的自己和家人。但礼物怎么选?选什么?又成为了困扰大家的一大问题。要说送礼物,无论是自己还是家人,实用的家电是最不容易…

SRv6----控制平面

学习了SRv6----报文转发流程后,下一步学习SRv6的控制平面及SID是如何在SRv6网内传递学习的。 首先回顾一下回顾一下链路状态路由协议,基于Dijkstra SPF(Shortest Path First,最短路径优先)算法计算到达指定地址的最短路…

基于倾斜模型、地形DEM高程点的批量自动提取

我们在进行前期的规划分析的时候,总是离不开地形条件等限制性因素。这次分享一个小的操作技巧,利用倾斜模型、DEM数据批量自动提取高程点,用来计算坡度、坡向、填挖方、流域分析等等。 分享一下在图新地球工具软件基于倾斜模型、地形DEM如何…

华为数字化转型之道 实践篇 第六章 数字化重构业务运作模式【进行中】

第六章 数字化重构业务运作模式 数字化转型从企业业务战略出发,通过数字化手段来重构核心业务运作模式,以实现客户交易更简单、内部作业更高效、运营管理更便捷。 6.1 业务运作模式重构是数字化转型的核心 利用数字化技术创新业务运作模式,通过重构业务流程提升企业运作效…

【openGauss/MogDB的uncommitted xmin问题解决】

一、问题现象 在测试openGauss/MogDB的时候,发现主库查询snapshot.tables_snap_timestamp这个表的时候,一select *,数据库就宕机,而备库是正常的。因为是测试环境不存在数据量太多的情况。所以最开始初步怀疑有数据页损坏了。 …

项目中less常用的一些东西

一、less简介 LESSCSS是一种动态样式语言,简称LESS,属于CSS预处理语言的一种,它使用类似CSS的语法,为CSS赋予了动态语言的特性,如变量、继承、运算、函数等,更方便CSS的编写和维护 LESS可以在多种语言、环…

Serverless初探

文中插图来自极客时间 今天听了市场部门分享的serverless, 打算用自己的话总结一下。 一般来说,每一个网络应用背后的原型都是:客户端服务端,通过相互传递消息(发起请求,返回响应) 从研发体系角度看&…

L2聚宽量化交易系统怎样实现股票量化策略?

L2聚宽量化交易系统怎样实现股票量化策略呢?说到这个问题,首先大家先想想,我们进行股票量化投资无非就是为了更高效的把握股票盈利的机会,但是往往在量化过程中,对聚宽量化交易系统的操作不了解,减少了自己…

ChatGPT可以一本正经的胡说八道,其他AI可以吗?

目录 1.ChatGPT是什么? 2.它是哪个公司开发的? 3.TA会做什么? 写文章 写代码 聊天 4.总结 1.ChatGPT是什么? ChatGPT是由人工智能实验室OpenAI上线的一款由 聊天机器人模型新模型,暂时网页版允许用户免费使用&…

树莓派下载及安装PyCharm软件

PyCharm 有专业版和社区版。专业版的功能更全,但是要收费,社区版是免费的,所以推荐下载这个版本。 通过点击这个链接:https://www.jetbrains.com/pycharm/download/#sectionlinux下载 Pycharm软件。 注意我们要下载的是 Linux 版本的软件。 …

直播怎么录屏,妙招分享,亲测好用!

看直播怎么录制屏幕视频?直播怎么录屏?无论是网络直播课程还是游戏主播直播,很多朋友都想在观看时录制,方便后面再次回顾。事实上,录制直播视频的方法很简单。今天,小编就来分享一个亲测好用的妙招。 一、手…

圣诞节会呼吸的玫瑰爱心代码 一起浪漫吧

源码下载地址:会呼吸、带有玫瑰花的爱心告白程序-Java文档类资源-CSDN下载 粉丝可直接私信我领取。 前言 之前有部电视剧《点燃我温暖你》没火,但是其中李峋的爱心代码却在程序圈超级火,这圣诞节快到了了,给大家来一波爱心代码…

CH36X系列芯片Windows系统使用教程

概述 CH365是一个连接PCI总线的通用接口芯片,CH367/CH368是连接PCI-Express总线的通用接口芯片。支持I/O端口映射、存储器映射、扩展ROM以及中断,提供主动并口、SPI、I2C、GPIO等硬件接口。基于如上芯片可将PCI/PCIe总线转换为简便易用的类似于ISA总线的…

【车载开发系列】UDS诊断---例程控制($0x31)

【车载开发系列】UDS诊断—例程控制($0x31) UDS诊断---例程控制($0x31)【车载开发系列】UDS诊断---例程控制($0x31)一.概念定义1)RoutineControl服务2)例程的概念3)例程的…

如何使用腾讯云轻量应用服务器搭建免费开源企业CMS?

1.背景概述 腾讯云轻量应用服务器是新一代面向中小企业及开发者的云服务器产品,简单易用,一站式融合多款云服务,能帮助用户在云端快速构建网站、博客、电商、论坛等各类应用以及各类开发测试环境。 PbootCMS是一款针对企业网站开发的国产CM…

Docker+Node-exporter+Prometheus+Grafana

载docker-compose容器编排并授权x curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-uname -s-uname -m > /usr/local/bin/docker-compose && chmod x /usr/local/bin/docker-compose所有客户端服务器node-exporter的dock…

[附源码]JAVA毕业设计婴幼儿玩具共享租售平台(系统+LW)

[附源码]JAVA毕业设计婴幼儿玩具共享租售平台(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项…