--- title: 计算机网络-域名系统DNS mathjax: true date: 2019-06-28 21:34:24 tags: [计算机网络] --- # 功能 把互连网上的主机名转换为IP地址 # 要点 当某一个应用进程需要把主机名解析为IP地址时,该应用进程就调用**解析程序**,并成为DNS的一个**客户**。 把待解析的域名放在**DNS请求报文**中,以**UDP用户数据报**方式发给**本地域名服务器**。 本地域名服务器在查找域名后,把对应的IP地址放在**回答报文**中返回,应用进程获得目的主机的IP地址。 若本地域名服务器不能回答该请求,则此域名服务器暂时成为DNS的另一个**客户**(递归查询),并向其他域名服务器发出查询请求(一般迭代查询),直至找到能够回答该请求的域名服务器。 # 域名结构 采用**层次树状结构**的命名方法。 **域**:名字空间中一个可被管理的划分,域还可以划分为子域,子域还可以划分为子域,形成顶级域、二级域、三级域等等。 DNS不规定一个域名需要包含多少个下级域名,也不规定每一级的域名代表什么意思。 域名是从右往左看的,越往右等级越高。 # 域名服务器 DNS服务器的管辖范围是**以区为单位**,区可能等于或小于域,但一定不能大于域,即区是域的子集。 一个服务器所负责管辖(或有权限的)的范围叫做**区**。 一个区中的所有节点必须是能够连通的。 **每个区**设置响应的**权限域名服务器**,用来保存该区中的所有主机的域名到IP地址的映射。 ## 根域名服务器 根域名服务器是最高层次的域名服务器。 所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址。 ## 顶级域名服务器 负责管理在该顶级域名下注册的所有二级域名。 ## 权限域名服务器 负责一个区的域名服务器。 ## 本地域名服务器 **当一台主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。** 不管哪一个**本地域名服务器**,若要对一个域名进行解析,**只要自己无法解析,就首先要求助于根域名服务器**。 # 域名解析过程 ## 主机向本地域名服务器查询 一般采用**递归查询**。 如果本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器会以DNS客户的身份,向其他根域名服务器继续发出查询请求报文(即**替主机继续查询**)。 递归查询的结果: - 查到的IP地址 - 报错,表示无法查询到所需的IP地址 ## 本地域名服务器向根域名服务器查询 一般采用**迭代查询**。 根域名服务器收到本地域名服务器发出的迭代查询请求报文时,本地域名服务器收到的查询结果有两种: - 查到的IP地址 - 下一步向哪个域名服务器查询 顶级域名服务器在收到本机域名服务器的查询请求后,收到的结果有两种: - 查到的IP地址 - 下一步向哪个权限域名服务器查询 就这样,本地域名服务器就这样进行迭代查询,最终把得到的结果返回给发起查询的主机。 # 高速缓存域名服务器 功能:用来存放**最近查询过的域名**以及**从何处获得域名映射信息**的记录。 好处:**提高DNS查询效率**,**减轻根域名服务器的负荷**和**减少互联网上的DNS查询报文数量**。 --- 作者:[@臭咸鱼](https://github.com/chouxianyu) 转载请注明出处: 欢迎讨论和交流! ---