DNS 协议是如何工作的?

DNS协议是一种用于将域名转换为IP地址的分布式数据库系统。

DNS协议详解

一、简介

dns 协议

域名系统(Domain Name System,缩写:DNS)是互联网的一项核心服务,它作为将域名和IP地址相互映射的分布式数据库,能够使人更方便地访问互联网,DNS使用TCP和UDP端口53,当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符,DNS协议是用来将域名转换为IP地址(也可以将IP地址转换为相应的域名地址)。

二、DNS应用层协议

1. DNS资源记录

在介绍DNS层协议之前,先了解一下DNS服务器存储的资源记录(Resource Records,RRs),一条资源记录(RR)记载着一个映射关系,每条RR通常包含如下表所示的一些信息:

字段 含义
NAME 名字
TYPE 类型
CLASS
TTL 生存时间
RDLENGTH RDATA所占的字节数
RDATA 数据

NAME和RDATA表示的含义根据TYPE的取值不同而不同,常见的:

若TYPE=A,则name是主机名,value是其对应的ip;

若TYPE=NS,则name是一个域,value是一个权威DNS服务器的主机名,该记录表示name域的域名解析将由value主机名对应的DNS服务器来做;

dns 协议

若TYPE=CNAME,则value是别名为name的主机对应的规范主机名;

若TYPE=MX,则value是别名为name的邮件服务器的规范主机名;

TYPE实际上还有其他类型,所有可能的type及其约定的数值表示如下:

TYPE value meaning
A 1 a host address
NS 2 an authoritative name server
MD 3 a mail destination (Obsolete use MX)
MF 4 a mail forwarder (Obsolete use MX)
CNAME 5 the canonical name for an alias
SOA 6 marks the start of a zone of authority
MB 7 a mailbox domain name (EXPERIMENTAL)
MG 8 a mail group member (EXPERIMENTAL)
MR 9 a mail rename domain name (EXPERIMENTAL)
NULL 10 a null RR (EXPERIMENTAL)
WKS 11 a well known service description
PTR 12 a domain name pointer
HINFO 13 host information
MINFO 14 mailbox or mail list information
MX 15 mail exchange
TXT 16 text strings

2. 整体及Header部分

DNS请求与响应的格式是一致的,其整体分为Header、Question、Answer、Authority、Additional五部分,如下图所示:

Header部分是一定有的,长度固定为12个字节;其余4部分可能有也可能没有,并且长度也不一定,这个在Header部分中有指明,Header的结构如下:

下面说明一下各个字段的含义:

dns 协议

ID:占16位,该值由发出DNS请求的程序生成,DNS服务器在响应时会使用该ID,这样便于请求程序区分不同的DNS响应。

QR:占1位,指示该消息是请求还是响应,0表示请求;1表示响应。

OPCODE:占4位,指示请求的类型,有请求发起者设定,响应消息中复用该值,0表示标准查询;1表示反转查询;2表示服务器状态查询,3~15目前保留,以备将来使用。

AA(Authoritative Answer):占1位,表示响应的服务器是否是权威DNS服务器,只在响应消息中有效。

TC(TrunCation):占1位,指示消息是否因为传输大小限制而被截断。

RD(Recursion Desired):占1位,该值在请求消息中被设置,响应消息复用该值,如果被设置,表示希望服务器递归查询,但服务器不一定支持递归查询

RA(Recursion Available):占1位,该值在响应消息中被设置或被清除,以表明服务器是否支持递归查询。

Z:占3位,保留备用。

RCODE(Response code):占4位,该值在响应消息中被设置,取值及含义如下:0:No error condition,没有错误条件;1:Format error,请求格式有误,服务器无法解析请求;2:Server failure,服务器出错;3:Name Error,只在权威DNS服务器的响应中有意义,表示请求中的域名不存在;4:Not Implemented,服务器不支持该请求类型;5:Refused,服务器拒绝执行请求操作;6~15:保留备用。

QDCOUNT:占16位(无符号),指明Question部分的包含的实体数量。

ANCOUNT:占16位(无符号),指明Answer部分的包含的RR(Resource Record)数量。

NSCOUNT:占16位(无符号),指明Authority部分的包含的RR(Resource Record)数量。

ARCOUNT:占16位(无符号),指明Additional部分的包含的RR(Resource Record)数量。

三、DNS报文格式

DNS定义了两种报文,一种为查询报文;另一种是对查询报文的响应,称为响应报文,无论是查询报文还是响应报文,都有12个字节的头和查询问题,DNS响应报文格式和DNS查询报文格式类似,但有一些字段的意义有所不同,以下是对这两种报文格式的详细说明:

1. DNS查询报文格式

字段 长度(字节) 含义
Transaction ID 2 标识符,用于匹配请求和响应
Flags 2 标志位,包括多个子字段,例如QR(查询/响应)、Opcode(操作码)、AA(授权回答)、TC(可截断)、RD(期望递归)、RA(可用递归)等
Questions variable 一个问题部分,包含要查询的名字和类型
Answers variable 回答部分,包含零个或多个回答(resource records)
Authority RRs variable 权威名称服务器部分,包含零个或多个权威名称服务器记录
Additional RRs variable 附加资源记录部分,包含零个或多个附加资源记录

2. DNS响应报文格式

字段 长度(字节) 含义
Transaction ID 2 标识符,用于匹配请求和响应
Flags 2 标志位,包括多个子字段,例如QR(查询/响应)、Opcode(操作码)、AA(授权回答)、TC(可截断)、RD(期望递归)、RA(可用递归)等
Questions variable 一个问题部分,包含要查询的名字和类型
Answers variable 回答部分,包含零个或多个回答(resource records)
Authority RRs variable 权威名称服务器部分,包含零个或多个权威名称服务器记录
Additional RRs variable 附加资源记录部分,包含零个或多个附加资源记录

3. DNS头部字段详细说明

Transaction ID:标识符,用于匹配请求和响应,在请求报文中由客户端设置,在响应报文中由服务器复用,这确保了客户端可以匹配发送的请求和收到的响应。

Flags:标志位,包含多个子字段,每个子字段占用特定的位数,其中主要的子字段包括:

QR:查询/响应标志,0表示查询报文,1表示响应报文。

Opcode:操作码,指示请求的类型,0表示标准查询,1表示反向查询,2表示服务器状态查询,其他值保留供将来使用。

AA:授权回答标志,表示是否由权威服务器回答,只在响应中有效。

TC:可截断标志,表示由于长度限制,报文是否被截断。

RD:期望递归标志,表示是否希望服务器递归查询。

RA:可用递归标志,表示服务器是否支持递归查询。

Questions:问题部分,包含要查询的名字和类型,这部分的长度是可变的,取决于具体的问题数量,每个问题包含一个名字和一个查询类型,名字是以域名的形式表示的,查询类型可以是A、NS、CNAME、MX等。

Answers:回答部分,包含零个或多个回答,每个回答对应一个问题,包含一个资源记录,资源记录的类型与查询类型相同。

Authority RRs:权威名称服务器部分,包含零个或多个权威名称服务器记录,这些记录指向权威名称服务器,用于进一步查询。

Additional RRs:附加资源记录部分,包含零个或多个附加资源记录,这些记录通常是与查询相关但不直接回答查询的信息,如别名记录等。

4. DNS头部标志位详细说明

QR:查询/响应标志,0表示查询报文,1表示响应报文。

Opcode:操作码,指示请求的类型,0表示标准查询,1表示反向查询,2表示服务器状态查询,其他值保留供将来使用。

AA:授权回答标志,表示是否由权威服务器回答,只在响应中有效。

TC:可截断标志,表示由于长度限制,报文是否被截断。

RD:期望递归标志,表示是否希望服务器递归查询。

RA:可用递归标志,表示服务器是否支持递归查询。

Z:保留位,目前未使用。

RCODE:响应码,指示响应的状态,0表示没有错误条件,1表示格式错误,2表示服务器失败,3表示域名解析错误,4表示不支持的请求类型,5表示请求被拒绝执行,其他值保留供将来使用。

QDCOUNT:问题计数,表示问题部分包含的问题数量,通常为1。

ANCOUNT:回答计数,表示回答部分包含的资源记录数量,可以为0或更多。

NSCOUNT:权威名称服务器计数,表示权威名称服务器部分包含的资源记录数量,可以为0或更多。

ARCOUNT:附加资源记录计数,表示附加资源记录部分包含的资源记录数量,可以为0或更多。

四、DNS工作原理

DNS是一种可以将域名和IP地址相互映射的层次结构的分布式数据库系统,DNS系统采用递归查询请求的方式来响应用户的查询,为互联网的运行提供关键性的基础服务,目前绝大多数的防火墙和网络都会开放DNS服务,DNS数据包不会被拦截,因此可以基于DNS协议建立隐蔽信道,从而顺利穿过防火墙,在客户端和服务器之间传输数据,DNS允许终端用户设备将给定的人类可读URL转换为网络可以理解的机器可用IP地址,Internet Engineering Task Force(IETF)标准组对HTTP和DNS进行了标准化定义,原始的DNS标准是在1987年发布的,因为用户在使用网络浏览器的同时需要使用其他应用程序,例如将电子邮件地址转换为IP地址。

五、DNS工作机制详解

假设运行在用户主机上的某些应用程序(如 Web浏览器或邮件阅读器)需要将主机名转换为IP地址,这些应用程序将调用DNS的客户端,并指明需要被转换的主机名,DSN客户端收到DNS后,会使用UDP通过53端口向网络上发送一个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系统中,域名空间是一个层次结构的概念,顶级域(Top Level Domain, TLD)如.com、.org、.net等位于根域之下,每个顶级域又可以进一步划分为二级域、三级域等,这种层次结构的设计有助于管理大量的域名和资源记录,资源记录(Resource Record, RR)是DNS数据库的基本单位,它们包含了主机名到IP地址的映射以及其他相关信息,常见的资源记录类型包括A记录(主机地址)、NS记录(名字服务器)、CNAME记录(别名)和MX记录(邮件交换器)等,每种类型的资源记录都有其特定的作用和用途,例如A记录用于将主机名映射到IPv4地址;NS记录用于指定某个域的权威名称服务器;CNAME记录用于将一个主机名映射到另一个主机名(通常是更常见的名字);而MX记录则用于指定邮件交换服务器的优先级和位置,这些不同类型的资源记录共同构成了一个完整的DNS数据库系统,通过对这些资源记录进行管理和更新可以实现对域名系统的控制和维护,同时这些资源记录也支持递归查询和迭代查询两种方式来满足不同场景下的需求,递归查询是由本地DNS服务器为客户机完全解析域名的过程;而迭代查询则是本地DNS服务器向其他DNS服务器逐步查询直到得到最终结果的过程,这两种查询方式各有优缺点并适用于不同的应用场景中,总之通过合理利用各种类型的资源记录以及选择合适的查询方式可以有效地提高DNS系统的性能和可靠性。

八、域名服务器

在DNS系统中,域名服务器扮演着至关重要的角色,它们是存储和管理域名资源记录的核心组件,根据功能和作用的不同可以将域名服务器分为以下几类:根域名服务器(Root Name Server)、顶级域(TLD)DNS服务器和权威DNS服务器(Authoritative DNS Server),根域名服务器是整个DNS系统的起点,它们不存储具体的域名信息而是指向顶级域(TLD)DNS服务器的位置,当用户发起一个DNS查询时首先会向本地域名服务器发送请求;如果本地域名服务器无法直接回答该请求则会将请求转发给根域名服务器;根域名服务器再返回相应的TLD服务器地址给本地域名服务器;最后由本地域名服务器向TLD服务器发起查询并获得最终结果返回给用户,顶级域(TLD)DNS服务器负责管理特定顶级域下的所有二级域名信息,com、.net等顶级域都有自己的TLD服务器来管理其下的二级域名如example.com、sample.net等,这些TLD服务器不仅存储了自身管理的域名信息还提供了指向下级权威DNS服务器的链接以便进行进一步查询,权威DNS服务器是指负责特定域或子域内所有主机信息的DNS服务器,它们保存了该域或子域内的完整资源记录信息包括A记录、MX记录、NS记录等,当本地域名服务器收到一个针对某个特定域或子域的查询请求时它会首先检查自己的缓存是否有该域的信息;如果没有则会向相应的权威DNS服务器发起查询以获取最新的数据返回给用户,总之不同类型的域名服务器在整个DNS系统中各司其职共同协作完成了从用户发起查询到最终获得结果返回给用户的整个过程,它们之间的协调配合确保了整个系统的高效运转和稳定性,同时随着互联网的发展和技术的进步未来还会有更多新型的域名服务器和技术加入到这个大家庭中来进一步提升整个系统的性能和安全性。

九、解析器(Resolver)

解析器(Resolver)是DNS系统中的一个重要组成部分,它是一个运行在用户计算机上的程序或库函数负责将用户发出的域名解析请求转发给本地的DNS服务器并等待其返回结果后再将结果返回给用户程序或应用程序,解析器的主要功能包括以下几个方面:首先它负责接收来自应用程序或其他系统的DNS查询请求并将其转发给本地的DNS服务器进行处理;其次它可以缓存最近使用的域名及其对应的IP地址以提高后续查询的速度和效率;此外一些高级解析器还支持负载均衡功能可以根据预定义的规则选择最优的DNS服务器来处理用户的请求从而提高整个系统的响应速度和可靠性;最后解析器还可以根据需要进行递归查询或迭代查询以满足不同场景下的需求,递归查询是指由解析器代表客户端完全解析域名直到得到最终结果的过程;而迭代查询则是解析器向其他DNS服务器逐步查询直到得到最终结果的过程,这两种查询方式各有优缺点并适用于不同的应用场景中,总之解析器作为连接用户和DNS服务器之间的桥梁在整个系统中起到了至关重要的作用它不仅简化了用户的操作流程还提高了整个系统的效率和稳定性为互联网的发展做出了重要贡献!

来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/81099.html

Like (0)
小编小编
Previous 2024年12月2日 08:13
Next 2024年12月2日 08:36

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注