1、DNS是一个分布式数据库系统用来提供主机名和IP地址之间的映射,之所以称为分布式原因的原因是因特网上没有一台主机知道这类映射的全部信息,当然也不可能做到,因为数据量实在太大了
2、应用程序通过一个叫resolver的程序(也可以认为是DNS的客户端)调用DNS服务,通常在UNIX系统下由gethostbyname(由主机名得到IP地址)和gethostbyaddr(由IP地址得到主机名)这两个库函数实现
3、不是每个name server都知道如何和其他所有的name sever通信的,但它们都必须知道如何和root name server通信。例如当它们不知道请求的主机名www.baidu.com的IP地址时,首先需要和root name server进行通信,取得顶级域名服务器com的IP地址,然后进一步和它进行通信,由此不断地递归查找,知道找到目标主机名的IP地址为止
4、DNS报文格式如上图所示,其中identification字段用来唯一标识一个报文。flags字段是该报文的标志位,其中几个重要的字段为:1)QA:当QA为0时为询问报文,QA=1时为响应报文,2)AA字段的意思为“autoritative answer”,即返回的IP地址的确是在该服务器的域名管理范围内的,而不是从其他途径获得的,3)RD,“recursion desired”,如果该字段没被置位,并且被访问的域名服务器没有authoritative answer,那么该服务器就会返回一串其他其他域名服务器的信息用于域名解析,4)RA,"recursion available",置位,表示服务器支持递归查询,通常除了根域名服务器以外的服务器都支持。最后numbers of questions代表问题的数量,问题的具体内容在扩展的questions字段,对于answers等其他三个字段的意义也是类似的
5、DNS报文中的questions字段的格式如上图所示,其中query name为询问的主机名。重点需要关注的是question type字段,因为询问得到的回答就是和它相对应的。它分为好几种类型,最常见的为 1)A,表示询问query name对应的IP地址。2)PTR,表示询问IP地址对应的主机名,最后的query class字段一般设为1,表示IP地址
6、至于最后的answers,authority,additional information字段的格式是一样的,如上图所示,其中domain name为要查找的域名,type与之前的question type相对应,time-to-live字段表示的是该信息能在客户端缓存中保存的时间,一般为2天。最后的两个字段分别表示结果的长度和具体内容。例如对于A类型的查找,那么长度字段就为4,数据就是查询的域名对应的IP地址
7、Caching:为了减少重复的DNS查询带来的网络带宽的消耗,通常会将第一次查询得到的结果放在name server的缓存中,而不是resolver中,因为resolver是与具体应用绑定的。
8、TCP or UDP:通常DNS的询问和应答都是通过UDP传输的,但是UDP的数据报长度往往小于512个字节,当应答报文的长度大于512时,报文就会被截断。此时就需要改用TCP进行传输,因为TCP可以用报文段进行分次传输的,并没有对数据有长度上的限制