DNS 解析详解

网络架构

        互联网就像一个大大的蜘蛛网,所有的网民都在这张蜘蛛网进行上网活动,那网络是怎么设计的,能够方便这么多人跨越空间、时间进行信息交流呢?        

        每个网民用来上网的工具就是用户终端,包括能够上网的手机、电脑、平板等等。用户终端连接的网络(wifi、数据流量、无线热点等)都是通过运营商(ISP:互联网服务提供商 Internet Service Provider)连入了互联网的,每个用户终端能够使用的服务都是由 ISP(国内是电信、联通、移动)提供的。用户终端将想要访问的网址或者需要请求的网络服务通过网络发送到各个服务提供方(服务器,也可以说是另一个用户终端),然后服务提供方通过对收到的网络请求进行逻辑处理,再将数据结果通过网络传输回用户终端。服务提供方统称为服务器,服务器可以是一台电脑(或者手机等)、很多电脑(或者手机等),服务器跟用户终端一样,都是互联网的使用者。而互联网规定,所有接入网络的终端,都必须有一个 ip 地址(就像寄信一样的收件地址和寄件地址),终端和终端之间进行访问,是通过 ip 进行的。这些 ip 地址需要统计规划,不能让他乱糟糟的,现代的通用 ip 地址有两种类型,分别是32位的 ipv4 和128位的 ipv6 。管理 ip 地址的服务器称为根域名服务器(或者根服务器),ipv4 的根服务器全球只有13台(这13台名字分别为“A”至“M”),ipv6 的根服务器全球有25台,中国有1台主根和3台辅根的服务器(都是 ipv6 的)。

        ipv4 是二进制的,ip 地址格式为 256.256.256.256,所以 ipv4 的地址一共有 256×256×256×256=2^{32}=4294967296 个,除去一些保留的特殊地址不能民用,这些地址随着接入网络设备越来越多,最终被分配完毕。ipv6 是十六进制的,ip 地址格式为 AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA,一共有 16^{32} 个(也就是 2^{128}),数量极其庞大。

域名

        ip 地址很长,不便于人类记忆,但是又要使用 ip 地址才能进行网络通信,所以让服务器一方建议绑定一个域名。服务器方就像是在互联网上开店铺,域名就像是店铺的地址,而 ip 就是店铺在地球上的经纬度,请求服务的用户终端就是顾客。店铺为了让自己的顾客更容易找到店铺并进来消费,那么都会告知顾客自己店铺的详细地址,而不是告诉顾客店铺的经纬度坐标。当然,作为经营店铺的老板,你也可以不告诉顾客地址(域名),而是把店铺的经纬度坐标(ip)告诉顾客,只要不影响顾客来店消费,这都是没问题的。所以,上网的用户终端即可以通过服务器绑定的域名进行访问网站,也可以通过服务器的 ip 地址来请求服务,只是域名更加便捷而且能够凸显网站的特色(如百度 www.baidu.com)。

        域名比 ip 更具特色,域名由美国加州一个非营利性的组织 ICANN(Internet Corporation for Assigned Names and Numbers)进行管理。域名是有结构的,从上到下依次为:根域名、顶级域名(top level domain,TLD,也称为一级域名)、二级域名、三级域名等等,在以 www.aaa.com 为例,www 是三级域名,aaa 是二级域名,com 是顶级域名,那根域名呢?在大多时候是看不到的,有时候域名被写作 www.aaa.com.,根域名就是 com 这个顶级域名后面的那 “.” 。

根域名

        根域名管理着所有的顶级域名,是一切域名的老祖宗。根域名带生孩子一样,它下面有很多的顶级域名。所有域名查询都必须先查询根域名,因为只有根域名才能告诉你,某个顶级域名由哪台服务器管理。ICANN 维护着一张列表,里面记载着顶级域名和对应的托管商。这样再把所有的顶级域名托管给其他组织,就能极有效的管理那么多的域名。

顶级域名/一级域名

        顶级域名是一个网址域名的最终部分,所有的顶级域名都要被隶属根域名,每个顶级域名下面又可以拥有很多的二级域名。管理根域名的组织 ICANN 一项主要工作,就是规定哪些字符串可以当作顶级域名。顶级域名分为三类:

  • 国家和地区顶级域名(country code top-level domains,简称 ccTLDs),200多个国家都按照 ISO3166 国家代码分配了顶级域名,例如 cn(中国),jp(日本),.io(英属印度洋领地),.cc( 科科斯群岛),.tv(图瓦卢)等;
  • 通用顶级域名(generic top-level domains,简称 gTLDs),例如表示工商企业的 .com,表示网络提供商的 .net,表示非盈利组织的 .org等;
  • 新顶级域名(New gTLD)如通用的 .xyz、代表“高端”的 .top、代表“红色”的 .red、代表“人”的 .ren等一千多种。

二级域名和多级域名

        顶级域名是规定好了只能选择,而从二级域名开始申请者就能自己自定义设置。如果将顶级域名比作一个国家,那么二级域名就是公司组织的招牌,二级域名天生带着品牌效果,当互联网用户输入域名时,二级域名能够让用户回忆起域名代表的网站能够提供怎么样服务。二级域名下面还有三级域名,二级域名一般被设置为组织的英文名称,象征着组织的门户,三级域名就根据网站的具体业务或者功能来设置,当然,也可以不用按照习惯来设置,怎么设置二级域名跟三级域名都看域名拥有者个人的意愿。

DNS解析

        一般情况来说,在使用用户终端的人们都是只知道对方服务器的域名而不知道 ip 的,毕竟在服务器有域名的情况下,谁会无聊到去记对方的 ip 地址?而且现代浏览器网页的设计大都都是只显示域名,以此来加深用户潜意识中的品牌形象。而在网络通信中,必须使用 ip 才能相互访问,所以把域名转换成与域名绑定的 ip 地址就很有必要。域名转换为 ip 地址的过程称为 DNS 解析(也叫域名解析),管理域名和 ip 地址关系表的工具称为 DNS 服务器。

域名解析协议

        域名和 ip 地址的关系是通过域名解析协议(DNS,Domain Name System)来将域名和 ip 地址相互映射,将域名映射成 ip 地址称为正向解析,将 ip 地址映射成域名称为反向解析。

DNS 服务器

        域名服务器是指管理域名的主机和相应的软件,它可以管理所在分层的域的相关信息。一个域名服务器所负责管里的分层叫作 区 (ZONE)。域名的每层都设有一个域名服务器,比如根域名有一台根域名服务器,用来管理顶级域名和其地址;各个顶级域名有自己对应的顶级域名服务器,用来管理其下面的二级域名和地址;各个二级域名和多级域名有自己对应的权限域名服务器,用来管理其下面的三级域名和地址。

根域名服务器

        ICANN 维护着根域名,而根域名就是保存在根域名服务器中的,按照区的概念,根域名服务器管理的就是 NDS 根区,里面记录了顶级域名所在的 DNS 服务器地址,所以要访问一个从未访问过的域名,都得从根域名服务器开始,根域名服务器会告诉你接下来要去哪个顶级域名去查找想要的信息。根域名服务器原来只有13(ipv4 服务器 A-M)台时,全世界的人都要访问会给服务器造成很大的压力,所以当时便通过 ip 任播技术部署了很多的镜像服务器,我国境内有F、I、J、K、L服务器的镜像。

顶级域名服务器

        与根域名服务类似,顶级域名管理的就是其下面的二级域名和二级域名的地址了。当根域名服务告诉你要去某个顶级域名服务器访问时,你发出的网络请求就要继续带着要访问的服务器域名继续前往顶级域名查找想要访问的二级域名服务器地址,得到了二级域名服务器地址后就网络请求就会继续带着问题前往该地址寻求答案。

权限域名服务器

        由于从二级域名开始,域名的申请者就能够按照自己的意愿来设置域名,不像根域名跟顶级域名一样是规定好的,那么之前类似根域名服务器的管理规则就不再适用这种情况了。多级域名使用分区来管理,权限域名服务器就是负责管理一个“区”的域名服务器。权限域名服务器所涉及管理的权限范围就是一个分区,这里的管理方法就像是我们电脑桌面的文件夹,文件夹里有很多文件和子文件夹,子文件夹中还可以继续放文件个子文件夹,这样以不同的目录来区分文件路径的方法运用到权限域名的分区管理中。一般一个组织都是有多个域名的,以方便规划组织下面不同的业务,比如官网(www.aaa.com)和管理后台(admin.aaa.com),域名 www 和 admin 都可以放在 aaa 的下面,也可以 www.aaa 和 aaa 同级并列。

权威域名服务器

        也叫做本地域名服务器,是一种不在 DNS 层次结构之中,但是很重要的 DNS 服务器。本地域名服务器是电脑解析时的默认域名服务器,即电脑中设置的首选 DNS 服务器和备选 DNS 服务器。常见的有电信、联通、谷歌、阿里等 ISP(互联网服务提供商 Internet Service Provider)的本地 DNS 服务。每个互联网服务提供者给一所大学,甚至一所大学中的各个系,都可以拥有一个本地域名服务器,所以为什么很多大学高校的校园网能禁止访问相关的网站,这是其中一个能实现的技术点。当一台用户终端发出 DNS 查询请求时,这个查询请求报文就发送给该用户终端的本地域名服务器。本地域名服务器管理本地域名的解析和映射,并且能够向上级域名服务器进行查询。

DNS 查询方式

        当用户终端把网络请求发出后,网络请求在网络中不断的流转。先由权威域名服务器上报查询请求,从根域名服务器到顶级域名服务器,然后又访问权限域名服务器,在请求经过每个 DNS 服务器时,需要快速有效的查询完服务器并返回查询结果,根据 DNS 的查询方式可以分为“递归查询”和“迭代查询”。

递归查询

        在一个网络请求发送到域名服务器后,域名服务器中没有查询到对应的 ip 地址,域名服务器将代替提出请求的访问者(下级DNS服务器)进行域名查询,若域名服务器不能直接回答,则域名服务器会在服务器结构树中的各分支的上下进行递归查询,最终将返回查询结果给访问者,在域名服务器查询期间,访问者将完全处于等待状态。举个例子,上课时同学 A 要和同学 C 传小纸条,但是 A 和 C 之间隔着同学 B,这时候 A 和 C 要实现相互通信数据传输,那就要连成传输线路,那么 A 需要先把小纸条(请求)递给 B,然后 B 再递给 C。C收到小纸条了,再根据小纸条的内容回一个小纸条(返回数据),通过 B 又给回 A,A 在收到纸条之前,都是等待状态的。

迭代查询

        在一个网络请求发送到根域名服务器后,根域名服务器中没有查询到对应的 ip 地址,根域名服务器将告诉提出请求的访问者(下级DNS服务器)去哪个顶级域名服务器查询,访问者将请求又发到下一个顶级域名服务器,就这样访问者一直将请求不断发给不同的域名服务器,直到获取到 ip 地址或者最终结果。迭代查询一般用户域名服务器与域名服务器之间,这样能有效的降低根服务器的压力。

DNS 缓存

        缓存是非常重要的,网络技术发展到如今这个地步,各个技术方向都有缓存的应用与扩展。DNS 缓存就是将访问过的域名与 ip 地址记录保存一定的时间,以便于下次访问的时候又要去查取,DNS 缓存技术能够极大的提升 ip 地址获取效率。任何事物都有两面性,缓存也是把双刃剑,在缓存有效时间内,请求方拿到的 ip 地址不是最新,这就导致有时候对方更换了和域名绑定的 ip 地址时,就会访问失败,所以缓存有效时间是越短越好,但是越短就意味着 DNS 解析的工作任务加大,各个服务器的压力也会倍增。

缓存有效期(TTL

        网站会告诉请求到它这里的权威服务器,自己的 ip 地址缓存有效时间(TTL)会设置多久,然后权威服务器就会把这个 ip 地址保存在缓存服务器多久。这样在网站更换 ip 地址时,权威服务器就知道这个缓存的 ip 地址快要失效了,应该重新去获取。

DNS 缓存服务器

        互联网中每天有全世界的人在访问,那么多的网络请求对权威服务器来说都是巨大的压力,所以当第一次 DNS 解析成功后,权威服务器不仅仅会把解析成功的 ip 地址发给请求方,而且还会把这次解析备份给缓存服务器,而当其他人或者其他服务器访问到目前的服务器时,就不是权威服务器来干活了,而是缓存服务器把缓存有效时间内的 ip 地址缓存发给请求方。同样对的道理,那么多权威服务器,都有的缓存服务器后,就能分担自己一部分工作,降低了其他服务器的访问次数。

        ISP 服务器也是权威服务器,也会有缓存,因为上网的用户们都是从他们那里进入互联网,像国内的三大运营商,面对中国这么多网民每时每刻不停的发送网络请求,如果不借助缓存会很难办的。但是有些运营商为了减轻自己服务器的压力,用些偷梁换柱的方法,把网站设置的TTL更换成自己设置时间更长的TTL,这么做是减轻了直接服务器的压力,但是就苦了上网的用户们。

本地操作系统缓存

        说完网络缓存,再说说用户终端的缓存。用户终端都是机器硬件,具备存储功能,那么当然也能跟服务器一样缓存访问过的域名与 ip 地址,当然这都是操作系统的功劳,没有操作系统的驱动,光凭一堆硬件疙瘩,啥也干不了。电脑的各个操作系统,手机的各个操作系统,都有记录操作历史的功能,感兴趣的都可以深入了解。

本地软件缓存

        使用用户终端来上网,当然还得依靠软件,比如用手机上网就用浏览器或者各种具备浏览器功能的 app。各种上网的软件也有缓存功能,当在电脑的浏览器上访问一个网站,浏览器就会记录一条信息,包括发出的数据、收到服务器的响应数据,这条记录在浏览器的访问历史记录里面就能看到。当然浏览器 DNS 缓存当然不止这个,比如还有书签,cookie,缓存等等,如果不都是被清空了的,浏览器在用户开始输入网址的那一刻就开始在自己的各个缓存功能中疯狂查询了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值