本文参考《计算机网络 自顶向下法》
DNS提供主机名与IP地址之间的转换
DNS由以下两部分组成:
DNS运行在UDP之上,使用53号端口
DNS除了提供主机名与IP地址转换以外,还提供以下服务:
DNS是一个提供简单、直接的转换服务的黑盒子
事实上,这个黑盒子极为复杂。它由分布于全球的大量DNS服务器以及定义了DNS服务器与查询主机通信方式的应用层协议组成
单点DNS服务器的缺陷:
为了处理扩展性问题,DNS使用了大量的DNS服务器。大致来说,有3种类型的服务器:根DNS服务器、顶级域(Top-Level Domain.TLD)DNS服务器和权威DNS服务器
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pftYUZEO-1660376594358)(D:\note\笔记仓库\图片\bb19b910f18a43dd9741fde39b7756d2.png)]](https://1000bd.com/contentImg/2022/08/16/195431583.png)
根DNS服务器:因特网上有13个根DNS服务器,这13个服务器实际上是一个冗余的计算机网络以提供安全性和可靠性;它主要提供TLD服务器的IP地址
顶级域DNS服务器:负责顶级域名,如com,org,net,edu,gov以及各个国家的顶级域名,主要提供权威DNS服务器的IP地址
权威DNS服务器:互联网上的每一个能够公共访问的主机都具有一个DNS记录,这些记录由某些组织机构的权威服务器保存。例如常见的服务提供商以及学校和公司都会实现和维护自己的权威服务器来保存一些主机DNS记录。
本地DNS服务器:该DNS服务器不属于上述的层次结构。但它发挥着极其重要的作用
每个ISP(如一个居民区的ISP或者一个机构的ISP)都有一台本地DNS服务器,这些本地DNS服务器通常“邻近”用户主机。当主机发出DNS请求时,该请求被发往本地DNS服务器,它起着代理的作用,并将该请求转发到DNS服务器层次结构中。
各种DNS服务器交互的过程如图所示:
假设主机cse.sicnu.edu需要查询gaia.cs.umass.edu的ip地址,会发生的流程如下:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ecTyFoJJ-1660376594359)(D:\note\笔记仓库\图片\未命名文件 (1)].png)](https://1000bd.com/contentImg/2022/08/16/195431634.png)
TLD服务器不一定知道用于主机的权威DNS服务器的IP地址,通常是TLD服务器只是知道中间的某个DNS服务器,该中间DNS服务器依次才能知道用于该主机的权威DNS服务器。(例如上述例子中,权威服务器和gaia.cs.umass.edu的主机之间可能还有处理dns.cs.umass.edu前缀的权威服务器)
上述例子中利用了递归查询和迭代查询:
实战中,常常是采用上述的方式进行解析。(只有从请求主机到本地DNS服务器的查询是递归的,其余的查询都是迭代的)
如上述可见,我们为了获得一份主机名的映射,发送了8份DNS报文。消耗太多,所以我们需要引入缓存这一概念。
为了改善时延性能并减少在因特网上到处传输的DNS报文数量,DNS缓存有如下作用
DNS服务器在接收到一个DNS回答(包含主机名到IP地址的映射)时,将映射缓存在本地存储器中。
由于主机和主机名与IP地址间的映射并不是永久的,DNS服务器在一段时间后,将丢弃缓存的信息。
本地DNS服务器也可以缓存TLD服务器的IP地址,因而允许本地DNS服务器绕过查询链中的根DNS服务器,事实上,因为缓存的存在,大多数DNS查询中,根服务器都被绕过了。
由此可见,通过DNS缓存可以大大的减少因特网上到处传输的DNS报文数量。
这里有一些内容,本文没有说明,感兴趣的可以自己去查一下,主要是为了说明最终会去通过本地DNS服务器去执行递归查询操作
所有的DNS服务器共同构成了DNS分布式数据库,在这些DNS服务器中存储了资源记录(Resource Record),RR提供了主机名到IP地址的映射。每个DNS回答报文包含一条或多条资源记录。
RR是一个4元组:(Name,Value,Type,TTL)
TTL是该记录的生存时间,它决定了资源记录应当从缓存中删除的时间。
Name和Value的值取决于Type:
在DNS查询链中,通常在获得一个NS类型的RR时,会携带一个A类型的RR,A类型的RR记录了NS类型的RR中Value的DNS服务器的IP地址。
例如如下格式:
(umass.edu,dns.umass.edu,NS)
(dns.umass.edu,128.119.40.111,A)
DNS只有两种报文:查询报文和回答报文,且具有相同的格式。
em,这里就不详细说明了
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mbGGXnar-1660376594360)(D:\note\笔记仓库\图片\image-20220813153321096.png)]](https://1000bd.com/contentImg/2022/08/16/195431806.png)
在DNS数据库中插入记录是用于我们为自己的网站注册域名的时候使用,主要需要做以下两步来保证我们的域名能够被公开访问