前言

学习计算机网络,我们一定要知道全称是什么,能够帮助理解记忆。下面可能不会细致到每个名字都做解释,但会尽可能地帮助大家理解dns的全过程。

DNS概述

dns全称Domain Name Server,是通过tcp和udp实现的一个服务。目的是实现域名和ip的转换。访问dns是通过一个称为resolver的应用程序库完成的。

域名

域名的作用是将字符串和ip关联起来,方便人记忆。谈到域名,大家应该总是能看到 “树状结构“。下面举个例子:

dns服务架构 dns架构图_运维

简单介绍下上面这张图。root为根服务器,它和存储了gtld(generic top-level name)授权服务器的位置,因为root和gtld之间的关系不是分配于被分配关系,所以使用虚线。tum,aum为子域名,由上一级域名服务器分配管理,net与tum的关系依此类推。由此可见,这是一个树状结构,叶子节点由根节点管理。net,对tum‘可见,但对de不可见。所以拥有net域的组织也可以向下提供dns服务。
www.net.tum.de. 为四层深度,末尾的“.”也为一级,我们可以将该“.”和根服务器连起来记忆。

DNS解析全过程

网上找了好一会儿还是没找到特别好的图,所以只好拍照了,字也丑,大家凑活看啊,找到原图了一定放上来。

dns服务架构 dns架构图_dns服务架构_02


上面为example.com域名解析的完整过程,步骤以流程图的形式展现

resolver : 解释器
ISP1:附近dns服务器 GW.HOME (实际上也属于ISP的一部分)
ISP2:ISP中某个dns服务器
root :根服务器
gTLD: 顶级域名服务器
gTLD1: example.com的授权服务器(因为该域名为顶级域名服务器直接授权的)

dns解析流程图

dns服务架构 dns架构图_dns服务架构_03

知识补充

(1) isp网络种dns服务器之间通过递归查询,根服务器(root)和顶级域名(gTLD)服务器使用迭代查询,因为这两种服务器对性能要求更高。
(2) 递归查询 : 如rpc嵌套调用,或者http嵌套查询。A->ISP1->ISP2(缓存中存在)->ISP2->A,A得到结果,但过程中返回多次,这就是递归调用(联想递归调用函数栈)。
(3) 迭代查询 : ISP1->gTLD1->ISP1->没有查到->gTLD2->ISP1,相比递归查询,它只需gTLD服务器返回结果(无论成功或失败),无需gTLD堵塞直至获取最终结果。因此查询对性能要求高的gTLD服务器,使用迭代查询 。(联系迭代逻辑,迭代器每次移动,必然获取一个结果)
(4) 缓存种保存的映射有生命周期;无论dns查询成果还是失败,isp网络中dns服务器缓存都会在递归返回的过程中依次更新。