TCP/IP——DNS

时间:2024-04-09 12:59:58

一、概念

DNS:

域名系统(DNS)是一种用于TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的转换及有关电子邮件的选路信息。

这里提到的分布式是指在Internet上的单个站点不能拥有所有的信息。

DNS提供了允许服务器和客户程序相互通信的协议

对DNS的访问是通过一个地址解析器(windows的nslookup)来完成的

解析器通常是应用程序的一部分,解析器并不像TCP/IP协议那样是操作系统的内核,解析器不属于内核

操纵系统内核中的TCP/IP协议簇对于DNS一点都不知道

二、DNS基础

TCP/IP——DNS
DNS的名字空间和Unix的文件系统相似,也具有层次结构

命令标识中一律不区分大写和小写

命名树上任何一个节点的域名就是将从该节点到最高层的域名串联起来,中间使用一个点“.”分隔这些域名

域名树中的每个节点必须有一个唯一的域名,但域名树中的不同节点可使用相同的标识

以点“.”结尾的域名称为绝对域名或完全合格的域名FQDN,例如pwic.new.na.com.,如果一个域名不以点结尾,则认为该域名是不完全的

*域名的划分:

TCP/IP——DNS
arpa是一个用作地址到名字转换的特殊域

7个3字符长的普通域,有些书也将这些域称为组织域

所有2字符长的域均是基于ISO3166中定义的国家代码,这些域被称为国家域,或地理域

DNS系统特性:

NIC负责分配*域和委派其它指定区域的授权机构

一个独立管理的DNS子树称为一个区域(zone)。一个常见的区域是一个二级域,如noao.edu.

一旦一个区域的授权机构被委派后,由它负责向该区域提供多个名字服务器。当一个新系统加入到一个区域中时,该区域的DNS管理者为该新系统申请一个域名和一个IP地址,并将它们加到名字服务器的数据库中。着就是授权机构存在的必要性。

一个区域的管理者必须为该区域提供一个主名字服务器和至少一个辅助名字服务器。

主、辅名字服务器的主要区别在于主名字服务器从磁盘文件中调入该区域的所有信息,而辅名字服务器则从主服务器调入所有信息。我们将辅名字服务器从主服务器调入信息称为区域传送(使用TCP:53)

攻击:非法人员希望把主名字服务器里面所有映射都导出来,他伪装辅名字服务器欺骗主名字服务器通过TCP:53把主DNS服务器里面的东西全导过来,然后非法人员就知道主DNS所有的映射。

当一个名字服务器没有请求信息时,它将如何处理?它必须与其它的名字服务器联系

并不是每个名字服务器都知道如何同其他名字服务器联系。相反,没个名字服务器必须知道如何同根的名字服务器联系。

这样一个反复的过程:正在处理请求的名字服务器与根服务器联系,根服务器告诉它与另一个名字服务器联系

DNS的一个基本特性是使用超高速缓存

DNS报文格式:

TCP/IP——DNS
这个报文由12字节长的首部和4个长度可变的字段组成。

标识字段:由客户程序设置并由服务器放回结果。客户程序通过它来确定响应与查询是否匹配,如果我的请求报文是1,那么回应报文也是1

16bit的标志字段被划分为若干子字段:

TCP/IP——DNS
QR是1bit字段:0表示查询报文,1表示响应报文

Opcode是一个4bit字段:通常值为0(标准查询),其它值为1(方向查询)和2(服务状态请求)

AA是1bit标志,表示“授权回答”

TC是1bit字段,表示“截断的”,DNS最大只能回复512字节,如果有大于512字节的数据,只会回复前512字节,并置为TC位,告诉源端这不是完整的。

RD是1bit字段,表示“期望递归”,使用递归查询

RA是1bit字段,表示“可用递归”,这是通过递归查询跟你返回的

rcdo是一个4bit的返回码字段。通常的值为0(没有差错)和3(名字差错)

随后的4个16bit字段说明最后4个变长字段中包含的条目数,对于查询报文,问题(question)数通常是1,而其它3项则均为0。类似地,对于应答报文,回答数至少是1,剩下地两项可以是0或非0

DNS查询报文中的问题部分:

DNS查询报文中问题部分的格式:
TCP/IP——DNS
查询名是要查找的名字,它是一个或多个标识符的序列。每个标识符以首字节的计数值来说明随后标识符的字节长度,每个名字以最后字节为0结束,长度为0的标识符是根标识符。计数字节的值必须是0~63的数,因为标识符的最大长度仅为63,该字段无需以整32bit边界结束,即无需填充字节。一个域名存储的结构如下:
TCP/IP——DNS
查询类型:
TCP/IP——DNS
查询类通常是1,指互联网地址

三、DNS使用的UDP还是TCP

注意到DNS名字服务器使用的熟知端口号无论对UDP还是TCP都是53。这意味着DNS均支持UDP和TCP访问

当名字解析器发出一个查询请求,并且返回响应中的TC(删减标志)比特被设置为1时,它就以为着响应的长度超过了512字节,而仅返回前512个字节。在遇到这种情况时,名字解析器通常使用TCP重发原来的查询请求,它将允许返回的响应超过512个字节。既然TCP能将用户的数据流分为一些报文段,它就能用多个报文段来传送任意长度的用户数据

区域传送将使用TCP,因为这里传送的数据远比一个查询或响应多得多