当前位置: 首页 > 科技观察

灵魂拷问,你真的了解DNS吗?

时间:2023-03-18 15:38:22 科技观察

大家好,我是菜农,欢迎来到我的频道。都说程序员是为谷歌编程,但是当你输入www.google.com的地址时,你有没有想过浏览器在回车的那一刻是如何发送请求的,又是如何到达目的地的呢?适合您的正确数据?.遇到问题的时候,我们通常会打开浏览器,输入www.google.com回车,然后搜索我们的问题。得到我们想要的内容后,我们就心满意足的关闭浏览器了。而在这个请求的过程中,浏览器内部发生了什么?我们可能无意中发现,输入IP142.251.43.14的字符串也可以访问谷歌网站,而为了让人感觉高大上,你把google.com的输入改成**“臭问题”**,反而会每次都在浏览器输入这串IP。毕竟别人总是很难在回车之前弄清楚你想访问哪个网站,除非你遇到“志同道合”的人。一开始,您在使用它时获得了很多乐趣。毕竟敲这串IP就可以完美了,使用速度也不会减慢。但是有一天,当你像往常一样输入这串IP时,发现怎么也进不去网站了。我开始着急了,找问题,不知道是我的记忆有问题,还是网站有问题。折腾了半天,发现谷歌网站的IP变了,等待你的只有两种方式,一种是继续记忆新的IP地址,但不保证有一天你将无法访问它。另一种是回到过去,老老实实地访问google.com。最终你醒悟过来,终于意识到背IP进行日常访问,实在是一种“病态”的行为。那么为什么通过142.251.43.14可以访问www.google.com呢?这里我们先记住两个名词,一个是域名,一个是IP,www.google.com是域名,142.251.43.14是IP。概念:一个域名可以对应多个IP地址。如何理解?很简单,打开你的手机通讯录,可以看到富婆是一个“域名”的概念,具体的电话号码可以对应“IP”。如果我们要给某人打电话,我们可以输入richwoman,或者输入一个特定的电话号码。当然,富婆的记忆点是低的,但是电话号码的记忆点是高的。为什么像上面说的访问IP一段时间后就进不去网站了?你可以把这种情况想象成,富婆换手机了~那么回到我们的内容,域名解析为IP的过程就是DNS(DomainNameSystem)域名系统。DNS的背景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的RFC882和RFC883规范。简单地说,DNS诞生了。DNS的工作原理DNS实际上是一种应用层协议,但它经常被其他应用层协议用来将用户提供的主机名解析为IP地址。当我们在浏览器的地址栏中输入www.google.com等网址时,我们要浏览的网页内容实际上是存储在互联网上的某个服务器上的,浏览器的任务就是找到我们想要的网址。你正在访问的服务器的IP地址,然后向它请求内容,这整个过程就是DNS的工作。如图所示,DNS地址解析服务是建立HTTP连接之前的一个过程。从调用用户主机上的应用程序的角度来看,DNS是一个黑盒子,提供简单直接的转换服务。作品。域名结构整个互联网的域名空间结构就像一棵倒挂的树。我们尝试拆分一个Google域名www.google.com。我们惊讶地发现有这么多的Partialcomposition。既然前面提到域名空间结构就像一棵倒置的树,那么我们就手动梳理一下这棵树的结构。每个顶级域都由相应的顶级域(TLD)服务器管理。除了以下7个顶级域外,还有各国的顶级域(cn、uk、ca、fr等)也在这一级管理。每个顶级域向下展开分支,每个分支域是一个子域,比如google.com是com的子域,google.com也可以包含子域,比如a.google.com,b.google.com。域是域名空间中的一棵子树,域的名称是子树的顶级节点的域名。拆分原则DNS承载的流量是全局流量,所以将结构设计成层次结构的原因也很简单,就是在每个域中分发承载流量,会有一台或多台服务器用来保存域名空间的所有信息,并响应所有关于域名空间的请求,这台服务器称为该域的权威域名服务器(authoritativedomainnameserver)。它拥有该域的所有域名信息,每个域又可以划分为多个子域,每个权威域名服务器可以解析一个或多个区域。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域,所以它找到了该域名的IP地址com域服务器,然后访问com域服务器,重复上面的操作,然后找出哪个服务器放了google域,继续往下,直到找到www.google.com的记录,最后返回对应的IP地址.缓存原理频繁使用DNS查询会给使用它的互联网应用带来额外的延迟,而延迟本身无法确定,可能大也可能小。所以为了解决这个问题,需要引入缓存机制。缓存是指将DNS查询结果缓存在主机中。有了缓存,就不需要每次查询都经过复杂的递归过程。当然,DNS数据可能会过期,所以DNS服务器不可能将数据永远保存在缓存中,管理员会为这些数据设置一个生存期(TTL)。超过TTL时间的数据会被清除,重新查询DNS服务器。除了DNS服务器可以缓存DNS响应信息外,客户端浏览器也可以缓存DNS响应信息。当用户请求页面的域名解析结果在浏览器自身的DNS缓存摘要中查找时,不会向DNS服务器发起请求,可以加快浏览网页的速度。当消息记录时间超过浏览器设置的DNS缓存时间时,会重新向DNS服务器发起域名解析请求,并用新的解析结果更新缓存。记录类型和消息格式域名服务器根据资源记录响应DNS请求。在DNS系统中,最常见的资源记录是Internet类记录。资源记录是一个四元组,包含以下字段:NameValueTypeTTL其中,TTL是记录的生命周期,它决定了资源记录何时应该从缓存中删除。时间。Name和Value的值取决于Type,即记录类型。记录类型分为以下几类:我这里附一张阿里云的域名解析配置图。首先我有一个通用的概念A/AAAA:AddressA记录用来描述域名和IP地址的映射关系。对于同一个域名可以有多个A记录,也就是说一次DNS查找可以返回多个地址。CNAMECNAME记录用于描述别名与域名的对应关系。此记录允许您将多个名称映射到同一台计算机。比如我们有一个域名cbuc.com,那么我可以添加一条www.cbuc.com的CNAME记录,这样我在请求www.cbuc.com的时候也可以访问cbuc.com。搜索过程也是通过www.cbuc.com找到cbuc.com,然后找到对应的IP地址,这里不再赘述。NS:NameServerNS记录是域名服务器记录,用于指定由哪个DNS服务器来解析域名。每个区域可以有多个域名服务器,因此有多个NS记录。SOA:授权起始SOA记录用于指定区域的授权名称服务器。每个区域只允许一个SOA记录,这是资源记录的第一个条目。PTR:PointorRecordPTR记录用于描述IP地址与域名的映射关系。DNS概述DNS是DomainNameSystem的缩写,是一种将域名和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数据库的查询次数,降低系统维护成本。