DNS文本
DNS(Domain Name System,域名系统)是互联网的核心基础设施之一,负责将人类可读的域名转换为机器可读的IP地址,本文将详细介绍DNS报文的产生和传送、DNS报文格式、资源记录类型及其格式、以及支持IPv6对DNS所作的改动。
二、DNS报文产生和传送
1. 使用UDP和TCP报文传送
DNS同时使用UDP和TCP发送报文,常规的报文交换比较简陋,因此很适合利用非常快速的UDP,DNS自己负责处理丢失请求的检测和重传,如果一段特定的时间后没有收到特定的响应,则必须重新发送请求,重传发送的速率通常设置在2~5秒钟以防止互联网上出现过多的DNS流量,对于比较大的或者比较重要的信息交换,尤其是地区传输来说,则用TCP,这既是因为其可靠性(它是一种面向连接、有确认的、可靠的协议,它自动提供了那些我们确保能够成功完成地区传输和其他冗余操作所需要的机制),也是因为它可以处理任意长度报文(UDP DNS报文的长度限制在512字节,当然如果实现了可选的DNS拓展机制EDNSO,则DNS UDP报文512字节的长度限制就可以取消)。
2. DNS报文处理及通用报文格式
DNS查询和响应采用一种通用的报文格式,这种报文格式包含5个区,这些区分别为客户机所请求的查询、服务器响应的回答和控制整个过程的首部信息提供了存放的位置,如下图所示:
首部区:总是在所有报文中出现,长度固定,除了含有重要的DNS控制信息之外,它还含有一个标志(QR)用来指明一个报文是查询还是响应,首部中还有4个“计数”字段,这些字段用来告诉报文接收方其他四个区中的记录数量。
问题区:当客户机发去一个查询时,它就创造一个首部区中的字段已经填充好的报文,报文的问题区中包含一个到多个查询(信息请求),它将QR标志设置为0以说明这是一个查询,并在首部的QDCount字段中放置一个数字来说明问题区中问题的数量,其他区中的数量通常为0,因此将它们在首部中的计数字段(ANCount、NSCount和ARCount)都设置为0。
回答区:当服务器接收到查询时,将对查询进行处理并执行其中所请求的信息检索操作,它使用查询报文为基础来创建自己的响应报文,首部和问题区被复制到响应报文,而QR标志被设置为1以说明这是一个回答,为了向客户端提供信息,首部的某些字段也要修改,服务器要设置RCode(响应代码)字段来指出查询时成功还是出现了错误。
权威机构区:服务器还要填充报文的其他3个区:回答、权威机构和附加信息,这些区公用一个基本格式,每个区携带一到多个RR(一种通用的记录格式)。
附加信息区:这些区公用一个基本格式,每个区携带一到多个RR(一种通用的记录格式)。
三、DNS报文首部格式
在DNS报文中,首部区带有数个重要的标志,另外它还指出报文中使用了其他哪些区,图82说明了在所有DNS报文中所使用的首部地区的格式,表82、表83和表84中对其进行了详细的描述,对于在一次交换中客户机和服务器以不同的方式使用字段情况,我们在表82中提到了两者用法之间的区别。
字段名称 | 长度(字节) | 描述 |
Transaction ID | 2 | 事务ID,用于匹配请求和响应 |
标志 | 2 | 包括QR、opcode、AA、TC、RD、RA、rcode等 |
QDCount | 2 | 问题区中的问题数量 |
ANCount | 2 | 回答区中的资源记录数量 |
NSCount | 2 | 权威机构区中的资源记录数量 |
ARCount | 2 | 附加信息区中的资源记录数量 |
四、DNS问题区格式
DNS查询在问题区总是至少包含一条记录,用来说明本次交换中的客户机试图查找什么内容,这些记录会不经更改地复制到响应报文中,以便在需要的时候提供客户机参考,表85和表86详细描述了用于DNS报文问题区中每一条记录的格式,图83对其作了图示说明。
字段名称 | 长度(字节) | 描述 |
QNAME | 可变 | 查询的名称 |
QTYPE | 2 | 查询的类型 |
QCLASS | 2 | 查询的类别 |
五、DNS通用RR格式
某些信息类型对多有RR而言都是共同的,而其他信息类型对每种记录类型而言则是唯一的,为了处理这种情况,所有RR都使用一种通用字段格式来表示,其中包含RData字段,该字段根据记录类型变化而变化,表87中描述了这种通用RR格式,图84对其进行了图示说明。
字段名称 | 长度(字节) | 描述 |
NAME | 可变 | 记录的名称 |
TYPE | 2 | 记录的类型 |
CLASS | 2 | 记录的类别 |
TTL | 4 | 生存时间 |
RDLEN | 2 | RData字段的长度 |
RData | 可变 | 根据记录类型变化而变化的实际数据 |
六、通用RR的RData字段格式
RData字段有一到多个为RR携带实际有效载荷的子字段构成,下面我将介绍常见的RR类型。
1. A(地址)RR(类型值1)
A(地址)是DNS中最常见的RR类型,它包含一个与某个域名相关联的32比特IP地址。
字段名称 | 长度(字节) | 描述 |
地址 | 4 | IPv4地址 |
2. NS(名字服务器)RR(类型值2)
NSDName数据字段携带着一台名字服务器的域名。
字段名称 | 长度(字节) | 描述 |
NSDName | 可变 | 名字服务器域名 |
3. CName(规范名)RR(类型5)
CName数据字段包含一个已使用别名引用的命名对象的真实名字
字段名称 | 长度(字节) | 描述 |
CName | 可变 | 规范名,命名对象的规范(真实)名字 |
4. SOA(权威结构起点)RR(类型6)
SOA记录标记了一个DNS地区的起点,并包含着有关这个地区应该如何管理和使用的重要信息,SOA记录是最复杂的RR类型,表85介绍了它的格式,图85对其进行了图示说明。
字段名称 | 长度(字节) | 描述 |
MNAME | 可变 | 主要名字服务器的名字 |
RNAME | 可变 | 负责该区域的管理员的邮箱地址 |
SECONDS | 32位 | SOA记录的序列号 |
REFRESH | 32位 | 辅助名字服务器应该多久刷新一次他们的高速缓存 |
RETRY | 32位 | 如果主名字服务器不可到达,辅助名字服务器过多久重试 |
EXPIRE | 32位 | 辅助名字服务器的记录在被认为失效之前应该保持多长时间 |
MINIMUM TTL | 32位 | 名字服务器的最小负缓存生存期(TTL) |
5. PTR(指针)RR(类型12)
PTR记录携带一个指向某条RR的指针,用于反向地址查找,它包含一个数字字段。
字段名称 | 长度(字节) | 描述 |
PTRName | 可变 | 指针域名 |
6. MX(邮件交换)RR(类型值15)
专用MX记录包含着有关邮件服务器的信息,这些邮件服务器用于向域发送电子邮件,每条记录记录包含两个字段。
字段名称 | 长度(字节) | 描述 |
优先 | 2 | 优先级值,值越低表示优先级越高 |
交换 | 可变 | 邮件交换服务器的域名 |
7. TXT(文本)RR(类型16)
TXT记录含有关于命名对象的附加描述性信息。
字段名称 | 长度(字节) | 描述 |
TXTData | 可变 | 文本数据 |
七、支持IPV6对DNS所作的改动
大多数修改(并非全部)与报文格式和RR有关,以下是一些主要的改动:
AAAA记录:用于IPv6地址解析,代替原来的A记录。
A6记录:用于将域名直接解析为128位的IPv6地址。
AAAA记录:用于反向解析IPv6地址(从IPv6地址解析到域名)。
AXFR授权传输:允许部分传输区域文件,而不是整个区域文件。
OPT资源记录:用于实验目的,可以放置在任何地方。
NSEC,链记录:用于安全方面,提供一种链式验证机制。
NSEC3记录:提供一种链式验证机制,比NSEC更安全。
DNSSEC签名:增加了对DNS响应的真实性和完整性的验证。
八、相关问题与解答栏目
1、什么是DNS?
回答:DNS(Domain Name System,域名系统)是互联网的核心基础设施之一,负责将人类可读的域名转换为机器可读的IP地址,它通过分布式数据库系统实现全球范围内的域名解析服务。
2、什么是DNS递归查询?
回答:递归查询是指DNS服务器为客户机完全解析域名(直到获得最终的IP地址)的过程,如果本地域名服务器无法解析,它会代表客户机向其他DNS服务器进行查询,直到得到答案为止。
3、如何防止DNS缓存中毒攻击?
回答:为了防止DNS缓存中毒攻击,可以采取以下措施:
使用DNSSEC(DNS Security Extensions)对DNS响应进行数字签名验证。
配置DNS服务器只接受来自可信来源的动态更新。
定期清理或限制DNS缓存的时间。
来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/119001.html