紧接着的16个 bit 又可以做进一步的细分,标示了报文的性质和一些细节,比如说是查询报文还是响应报文,需要递归 查询与否(一般服务器都支持递归查询,而且不需要任何设置,BIND 就是这样)
查询问题后面有查询类型,包括 A,NS,CNAME,PTR,HINFO,MX,如果熟悉 BIND 的话,就知道在 zong 的配置 文件里面,每一条记录都记载了各自的类型,比如 A 就是 IP 地址,NS 就是名字服务器。
响应报文可以回复多个 IP,也就是说,域名可以和多个 IP 地址对应,并且有很多 CNAME。
反向查询
正向查询指的是通过域名得到 IP 的查询,而反向查询就是通过 IP 得到域名。例如用 host 命令,host ip 就可以得到服务器的域名, host domainName 就得到 IP。
稍微知道一点数据结构的人都能意识到,在正向查询的域里面做反向查询,其做法只有遍历整个数据集合----对于 DNS 来说,那 就是遍历整个数据库, 这将带来巨大的负担,所以 DNS 采取了另一种方法,使用另一棵子树来维护 IP-〉域名的对应表。这个子树的根节点是 in-addr.arpa,而一个 IP 例如192.168.11.2)所具有的 DNS 地址就是 2.11.168.192.in-addr.arpa(ip 倒置)。在 DNS 系统里面,一个 反向地址对应一个 PTR 纪录(对应 A 纪录),所以反向查询又叫 做指针(PTR)查询。
其他问题的讨论
1DNS 服务器高速缓存
BIND9默认是作为一个高速缓存服务器,其将所有的查询都转交到根服务器去,然后得到结果并放在本地的缓冲区,以加快查询
速度。如果有兴趣可以安装一个 BIND9来尝试一下。而自己定义的 zone 则可以规定其在缓存中的时间,一般是1天(就是配置文件中 的1D)。