简介
互联网中通常通过IP地址标识主机,但是即使是IPV4协议对应的IP地址也有32位二进制,且互联网中主机数量浩如烟海,人们如果直接通过IP地址进行上网冲浪,是完全不可能的。
为了解决这样的困境,研究人员想到了另一种标识主机的方法,就是通过主机名如 xxx.com、xxx.cn、xxx.io等,这些名字便于记忆且易被用户接受。但是这样的主机名只是为了方便使用者,而主机之间的互相识别仍然是通过IP地址进行,为了让这两者联系起来,DNS服务应运而生。
DNS域名系统主要任务就是将主机名到IP地址进行转换。
DNS的组成:
- 一个由分层的DNS服务器实现的分布式数据库
- 一个使得主机能够查询分布式数据库的应用层协议
DNS协议运行在UDP之上,使用53号端口,属于应用层协议,但是DNS通常不与用户产生交互,主要是由其他应用层协议所使用,包括HTTP,SMTP,FTP等。
DNS功能:
- 进行主机名到IP地址的转换
- 主机别名,应用程序可以调用DNS获取主机别名对应的规范主机名以及IP地址
- 邮件服务器别名
- 负载分配,一个IP地址集合与同一个主机名相联系,当对此IP地址集合发起DNS请求时,会在这些IP地址集合对应的服务器集合中进行循环分配负载。
分布式、层次数据库
为了让全球各地能更好的使用DNS进行地址转换,DNS使用了大量的服务器,以层次方式组织,并分布在全世界范围内,没有一台DNS服务器拥有因特网上的所有主机的映射。
DNS服务器的分类:
- 根DNS服务器
- 顶级域DNS服务器(TLD)
- 权威DNS服务器
以解析 www.amazon.com
的IP地址为例:
- 客户首先与根服务器之一联系,根服务器会返回顶级域名com的 TLD服务器的IP地址
- 客户与这些TLD服务器之一联系,TLD服务器为amazon.com返回权威服务器的IP地址
- 客户与 amazon.com权威服务器之一联系,它为主机名
www.amazon.com
返回其IP地址
本地DNS服务器,严格说不属于DNS服务器的层次结构,但是很重要,一个区域如一个大学,公司等都会有一台本地的DNS服务器,主机发出DNS查询请求时,一般先发给本地域名服务器,本地域名服务器无法解析时,才会向DNS服务器中的根、顶级、权威服务器进行擦汗寻。
域名解析过程示意图:
两种解析过程:
- 递归查询
- 先找本地DNS服务器
- 若本地找不到,那么由本地DNS服务器向上找根DNS服务器
- 根DNS服务器向下找顶级DNS服务器
- 顶级DNS服务器向下找权威DNS服务器
- 找到之后,一层一层的返回报文
- 迭代查询
- 先找本地DNS服务器
- 若本地DNS服务器找不到,那么由本地DNS服务器向上找根DNS服务器
- 根DNS服务器找不到,本地DNS服务器找顶级DNS服务器
- 顶级DNS服务器找不到,本地DNS服务器找权威DNS服务器
- 找到之后,直接返回报文给本地DNS服务器
DNS缓存
为了改善时延性能,并减少网络中DNS报文数量,DNS广泛使用了缓存技术:
- 在一个请求链中,当某DNS服务器接收到一个DNS回答,它能将该回答中的信息缓存在本地存储器中
- 之后的请求到达此DNS服务器就能直接获得这个DNS对应的IP地址了,不需要再去向其他DNS服务器请求
- DNS服务器在一段时间后(通常设置为两天)将丢弃缓存的信息
参考
- 本文作者: xczll
- 本文链接: https://xczllgit.github.io/2020/03/27/computerscience/2020-03-27-internetDNS/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!