DNS查询和响应的一般格式:
12字节长的首部和4个长度(可变)
QR:1个字节,0 是查询,1是响应;
opcode: 4bit, 0 标准查询,1是反向查询,服务器状态请求
AA:authoritative answer
TC:truncated,当应答的字节总长度超过512字节,只返回前512字节
RD是1bit,期望递归,recursion desired,告诉服务器必须处理这个查询,如果该位为0,且被请求的服务器名字,不能回答,则会返回能够解答的其他服务器列表。迭代查询。
RA 1bit,如果服务器支持递归查询,则在响应中该位设为1,表示可用递归。
zero ,必须为0
rcode,是4bit返回码,通常的值为0(没有差错)和3(名字差错)。名字差错只有从一个授权名字服务器上返回,表示查询中的域名不存在。
为了减少internet 上DNS的通信量,所有的名字服务器均使用高速缓存。在标准的U n i x实
现中,高速缓存是由名字服务器而不是由名字解析器维护的。既然名字解析器作为每个应用
的一部分,而应用又不可能总处于工作状态,因此将高速缓存放在只要系统(名字服务器)
处于工作状态就能起作用的程序中显得很重要。。这样任何一个使用名字服务器的应用均可获
得高速缓存。在该站点使用这个名字服务器的任何其他主机也能共享服务器的高速缓存。
DNS 端口号是tcp 53和UDP 53
一般DNS都是使用UDP,当名字解析器发出一个查询请求,并且返回响应中的T C(删减标志)比特被设置为1时,
它就意味着响应的长度超过了5 1 2个字节,而仅返回前5 1 2个字节。在遇到这种情况时,名字
解析器通常使用T C P重发原来的查询请求,它将允许返回的响应超过5 1 2个字节(回想在11 . 1 0
节讨论的U D P数据报的最大长度)。既然T C P能将用户的数据流分为一些报文段,它就能用多
个报文段来传送任意长度的用户数据。
D N S是任何与I n t e r n e t相连主机必不可少的一部分,同时它也广泛用于专用的互联网。层
次树是组成D N S域名空间的基本组织形式。
应用程序通过名字解析器将一个主机名转换为一个I P地址,也可将一个I P地址转换为与
之对应的主机名。名字解析器将向一个本地名字服务器发出查询请求,这个名字服务器可能
通过某个根名字服务器或其他名字服务器来完成这个查询。
所有的D N S查询和响应都有相同的报文格式。这个报文格式中包含查询请求和可能的回答资
源记录、授权资源记录和附加资源记录。通过许多例子了解了名字解析器的配置文件以及D N S的
优化措施:指向域名的指针(减少报文的长度)、查询结果的高速缓存、i n - a d d r . a r p a域(查
找I P地址对应的域名)以及返回的附加资源记录(避免主机重发同一查询请求)。
本文出自 “fiona wan” 博客,谢绝转载!
原文:http://fiona140428.blog.51cto.com/11324893/1757974