【转】DNS查询过程

DNS查询过程

DNS的查询过程是指在客户端通过DNS服务器将一个IP地址转换为一个FQDN(Fully Qualified Domain Name,完全合格的域名),或将一个FQDN转化为一个IP地址,或查询一个区域的邮件服务器的过程。

DNS查询分类

1)按查询方式:

(1)递归查询。 当DNS服务器接收到查询请求时,不论成功或失败,都会做出对应的响应。(发生在DNS客户端与DNS服务器之间)

(2)迭代查询。 DNS服务器根据自己的高速缓存或区域的数据,以最佳结果响应。如果DNS服务器无法解析,它可能返回一个指针。指针指向下级域名的DNS服务器,继续该过程,直到找到拥有所查询名字的DNS服务器,或知道出错、超时为止。(发生在DNS服务器之间)

2)按内容分类

(1)正向查询: 由域名查找IP地址。

(2)反向查询: 有IP地址查找域名。

DNS查询过程实例

1)客户端将www.redhat.com的查询提交给本地DNS服务器(递归查询)。

2)本地DNS服务器检查区域数据库,由于该服务器没有redhat.com的授权,它将查询传递到根服务器(“.”DNS服务器),请求解析主机名称。根名称服务器把“com”DNS服务器IP地址返回给本地DNS服务器(迭代查询)。

3)本地DNS服务器将请求发给“com”DNS服务器,该服务器根据请求将“redhat.com”DNS服务器IP地址返回给本地DNS服务器(迭代查询)。

4)本地DNS服务器向“redhat.com”DNS服务器发送请求,由于该服务器具有“www.redhat.com”记录,它将www.redhat.com的IP地址返回给本地DNS服务器。

5)本地DNS服务器将www.redhat.com的IP地址发送给客户端。

3. TCP or UDP

DNS名字服务器使用的端口无论对UDP还是TCP都是53。使用tcpdump观察的所有例子都是采用UDP协议的,这说明在一般情况下,DNS协议采用的UDP协议。只有当名字解析器发出一个查询请求,并且返回响应中的TC(删减标志)比特被设置为1时,它就意味着响应长度超过了512个字节(DNS协议使用UDP协议时的最大包长度),而仅返回前512字节。在遇到这种情况时,名字解析服务器通常使用TCP重发原来的查询请求,它将允许返回的响应超过512个字节。既然TCP能将用户的数据流分为一些报文段,它就能用多个报文段来传送任意长度的用户数据。

此外,当一个域的辅助名字服务器在启动时,将从该域的主名字服务器执行区域传送。辅助服务器将定时(通常是3小时)向主服务器进行查询以便了解主服务器数据是否发生变动。如果有变动,将执行一次区域传送。区域传送将使用TCP,因为这里传送的数据远比一个查询或响应多得多。

DNS使用UDP,名字解析器和名字服务器都要自己处理超时和重传。加之DNS查询和响应通常经过广域网,分组丢失率和往返时间的不确定性在广域网上比局域网上更大。这样对于DNS客户程序,一个好的等一会和超时程序就显得更重要了。

——————————————-

以上摘自《Linux服务器配置全程实录》一书

转自:http://www.jinlie.net/?p=638

原文地址:https://www.cnblogs.com/sunada2005/p/3600385.html