域名系统(DNS)是一种用于TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的转换及有关电子邮件的选路信息。从应用的角度上看,对DNS的访问是通过一个地址解析器(resolver)来完成的。在Unix主机中,该解析器主要是通过两个库函数gethostbyname(3) 和gethostbyaddr(3)来访问的,前者接收主机名字返回IP地址,而后者接收IP地址来寻找主机名字。解析器通过一个或多个名字服务器来完成这种相互转换。
RFC 1034说明了DNS的概念和功能,RFC 1035详细说明了DNS 的规范和实现。
DNS的名字空间和Unix的文件系统相似,也具有层次结构。
每个结点有一个至多63个字符长的标识。这颗树的树根是没有任何标识的特殊结点。命名标识中一律不区分大写和小写。命名树上任何一个结点的域名就是将从该结点到最高层的域名串连起来,中间使用一个点“.”分隔这些域名。域名树中的每个结点必须有一个唯一的域名,但域名树中的不同结点可使用相同的标识。以点“ .”结尾的域名称为绝对域名或完全合格的域名FQDN(Full Qualified Domain Name),例如sun.tuc.noao.edu.
顶级域名被分为三个部分:
1) arpa是一个用作地址到名字转换的特殊域。
2) 7个3字符长的普通域。有些书也将这些域称为组织域。
3) 所有2字符长的域均是基于ISO3166中定义的国家代码,这些域被称为国家域,或地理域。
7个普通域的正式划分
域 描述
com 商业组织
edu 教育机构
gov 其他美国政府部门
int 国际组织
mil 美国军事网点
net 网络
org 其他网络
普通域中只有.gov和.mil域局限于美国
DNS中域名的授权,只有一个机构,即网络信息中心NIC负责分配顶级域和委派其他指定地区域的授权机构
DNS报文一般格式
The header contains the following fields: 1 1 1 1 1 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ID | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |QR| Opcode |AA|TC|RD|RA| Z | RCODE | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | QDCOUNT | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ANCOUNT | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | NSCOUNT | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ARCOUNT | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
ID:标识字段由客户程序设置并由服务器返回结果。客户程序通过它来确定响应与查询是否匹配。
QR :0表示查询报文,1表示响应报文。
Opcode:通常值为0(标准查询),其他值为1(反向查询)和2(服务器状态请求)。
AA:表示“授权回答(authoritative answer)”。该名字服务器是授权于该域的。
TC:表示“可截断的(truncated )”。使用UDP时,它表示当应答的总长度超过512字节时,只返回前512个字节。
RD:表示“期望递归( recursion desired)”。该比特能在一个查询中设置,并在响应中返回。这个标志告诉名字服务器必须处理这个查询,也称为一个递归查询。
RA:表示“可用递归”。如果名字服务器支持递归查询,则在响应中将该比特设置为1。
Z:3 bit字段必须为0。
RCODE:通常的值为0(没有差错)和3(名字差错)。名字差错只有从一个授权名字服务器上返回,它表示在查询中制定的域名不存在。
随后的4个16 bit 字段说明最后4个变长字段中包含的条目数。对于查询报文,问题( question )数通常是1,而其他3项则均为0,。类似地,对于应答报文,回答数至少是1,剩下的两项可以是0或非0。
DNS名字服务器使用的熟知端口号无论对UDP还是TCP都是53。这意味着DNS均支持UDP和TCP访问。这两种协议都在什么情况下采用以及采用的理由都是什么呢?
当名字解析器发出一个查询请求,并且返回响应中的TC(删减标志)比特被设置为1时,它就意味着响应的长度超过了512个字节,而仅返回前512个字节。在遇到这种情况时,名字解析器通常使用TCP重发原来的查询请求,它将允许返回的响应超过512个字节。既然TCP能将用户的数据流分为一些报文段,它就能用多个报文段来传送任意长度的用户数据。
DNS主要使用UDP,无论是名字解析器还是名字服务器都必须自己处理超时和重传。
在windows上输入ipconfig/all查看dns服务器