文章目录
DNS协议
DNS提供的服务
DNS简介
- 由于IP地址较为难记,因此引入了DNS协议
- DNS(Domain Name System),即域名系统
- 主机名用来标识主机,但是主机名几乎不提供主机在因特网中的位置信息,主机也可用IP地址来标识
- DNS是一个由分层的DNS服务器实现的分布式数据库
- 它是一个使得主机能够查询分布式数据库的应用层协议
- DNS服务器通常时运行BIND(Berkeley Internet Name Domain)软件的UNIX服务器
- DNS协议运行在UDP之上,使用53号端口
- DNS通常由其他应用层该协议所使用
- 域名结构:主机名…三级域名、次级域名(二级域名)、顶级域名、根域名(根域名一般不写,为.root)
服务
- DNS提供由主机名到IP地址之间的转换服务
- 应用程序通过调用DNS来获得主机别名对应的规范主机名以及主机的IP地址
一个主机通常有多个主机名,一般其中较为复杂的一个为规范主机名,其他的为主机别名,我们一般记着的为主机别名
- 一个邮件服务器和web服务器可以使用相同(别名化的)的主机名
- DNS用于在冗余的服务器之间进行负载分配
DNS数据库中存储着一个站点对应的多台服务器的IP地址集合,然后DNS可以返回域名对应的不繁忙的服务器IP地址
DNS工作原理概述
由于只是用一个DNS服务器会造成种种问题,如:
- 单点故障(若DNS服务器瘫痪,则整个互联网都会陷入瘫痪状态);
- 通信容量(所有的DNS请求都要一台服务器来处理);
- 远距离的集中式数据库(若请求主机和DNS服务器距离过远,会造成很大的时延);
- 维护(单个DNS服务器要为互联网中所有主机保留记录)。
因此DNS服务器采用分布式、层次的数据库
DNS服务器分类
- DNS使用大量的DNS服务器,他们以层次的方式组织,并且分布在全世界范围内
- DNS服务器的分层模型由树形结构来理解非常好理解。树的根为根DNS服务器,它的孩子为TLD服务器,TLD的孩子为顶级域服务器,顶级域服务器的孩子为权威DNS服务器…

- DNS域名服务器一般分为三种:根DNS服务器、顶级域DNS服务器、权威DNS服务器,除此之外还有一个本地DNS服务器
根DNS服务器
- 全球有400多个,由13个不同的组织进行管理
- 根DNS服务器负责提供TLD服务器的IP地址
- 根DNS服务器持有顶级域DNS服务器的NS记录和A记录
- 当本地DNS服务器无法解析域名时,首先会向根DNS服务器发送查询报文,根DNS服务器负责将顶级域DNS服务器的IP地址发送给本地DNS服务器,然后本地DNS服务器再去请求顶级域服务器
顶级域(TLD)DNS服务器
- 对于每个顶级域(com、org、net、edu和gov)和国家的顶级域都有TLD服务器或服务器集群
- TLD服务器负责提供权威DNS服务器的IP地址
- 顶级域DNS服务器持有权威DNS服务器的NS记录和A记录
- 本地DNS服务器通过根DNS服务器返回的顶级域的IP地址再次发送查询报文,顶级域DNS服务器将权威DNS服务器的IP地址进行返回
权威DNS服务器
- 一个组织为用户提供的可以访问的域名和IP地址的解析的服务器,为用户提供最权威的DNS域名解析,每个域名在互联网上都可以找到一台权威服务器
- 权威服务器持有主机名对应的A记录
- 本地DNS服务器根据顶级域DNS服务器返回的权威DNS服务器的IP发送查询报文,权威DNS服务器将主机名对应的IP地址进行返回
本地DNS服务器
- 通常每个ISP都有一台本地DNS服务器,也叫默认域名服务器
- 当一个DNS查询报文发出时,首先发送到本地DNS服务器

一趟DNS查询过程解析
- 首先,需要将域名转化为IP地址的应用程序(如,Web浏览器或者邮件服务器)会调用DNS客户端并指明需要转换的域名,如在浏览器上输入www.baidu.com网址进行请求访问
- 然后,DNS客户端会向本地DNS服务器发送查询报文,本地DNS服务器将查询报文发送到根DNS服务器
- 根DNS服务器将顶级域名(com)解析出来,并将负责顶级域名的顶级域DNS服务器(com DNS服务器)的IP地址列表进行返回给本地DNS服务器
- 本地DNS服务器再次向这些顶级域DNS服务器之一发送查询报文,顶级域DNS服务器将二级域名解析出来,然后将负责二级域名的DNS服务器的IP地址返回给本地DNS服务器
- 本地DNS服务器再次向权威DNS服务器发送查询报文,权威DNS服务器将域名对应的IP地址进行返回
- 本地DNS服务器将域名对应的IP地址返回给调用它的应用程序,交给应用程序进行处理

递归查询
递归查询要求服务器端接收到客户端请求,必须使用一个准确的查询结果恢复客户端,若DNS服务器本地没有缓存,则去请求其他服务器并将结果返回
迭代查询
实际中遵循的查询模式
从请求主机到本地DNS服务器的查询是递归的,其余的查询是迭代的,即上面的一趟DNS查询过程解析
DNS缓存
- 产生原因:为了改善时延性能并减少在因特网到处传输的DNS报文数量
- 在一个请求链中,当某DNS服务器接受一个DNS回答时,他能将映射缓存在本地存储器中
- DNS服务器一般通常在两天后丢弃缓存的信息
DNS记录和报文
DNS记录
- 所有的DNS服务器存储了资源记录(Resource Record,RR),RR提供了主机名到IP地址的映射
- 每个DNS回答中包含一条或多条资源记录
- 资源记录是一个4元组(Name, Value,Type,TTL)
- 根据Type值不同将DNS记录分为四种:
- Type=A,此时Name是主机名,Value是主机名对应的IP地址。A记录提供了标准的主机名到IP地址的映射
- Type=NS,此时Name是一个域,Value是知道该域名所在位置的权威DNS服务器的主机名。NS记录用来沿着查询链来路由DNS查询
- Type=CNAME,此时Value是别名为Name的主机的规范主机名。该记录能向查询的主机提供一个主机名对应的规范主机名
- Type=MX,此时Value是别名为Name的邮件服务器的规范主机名
当为了获取邮件服务器的规范主机名时,DNS客户端应当请求MX记录;为了获取其他服务器的规范主机名时,DNS客户端应该请求CNAME记录
DNS报文
DNS只有两种报文:查询报文和回答报文
DNS报文解析

- 首部区域:共有12个字节,分为6个字段
- 第一个字段(标识符):是一个12比特的数,用于标识该查询。这个标识符会被复制到回答报文中,来匹配用户发出的请求和收到的回答
- 第二个字段(标志):标志字段含有若干标志。比如,
- 1比特“查询/回答”标志指出是查询报文(0)还是回答报文(1);
- 被请求的权威DNS服务器会将1比特的”权威的“标志位被放置到回答报文中;
- 递归查询时会设置1比特的”希望递归“标志位;
- 若DNS服务器支持递归查询,他会在回答报文中对1比特的”递归可用“标志位
- 第三个字段(问题数)
- 第四个字段(回答RR数)
- 第五个字段(权威RR数)
- 第六个字段(附加RR数)
- 问题区域:包含正在进行的查询信息
- 名字字段:正在被查询的主机名
- 类型字段:查询类型,如NS查询、A查询等
- 回答区域:包含对最初请求的名字的资源记录。可能包含多条RR记录,一个主机名可能对应多个IP地址
- 权威区域:包含了其他权威副武器的记录
- 附加区域:包含了其他有帮助的记录。如一条MX请求的回答报文的回答区域包含一条邮件服务器的规范主机名的资源记录。该附加区域包含一个类型A记录,该记录提供了用于该邮件服务器的规范主机名的IP地址
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220526.html原文链接:https://javaforall.net
