目录
一.Basic Function&Brief History
2.1 Domain Namespace&Resource Record
3.1 DNS server正确解析domain name返回IP地址的方法
一.Basic Function&Brief History
互联网应用程序联系远程主机以获取资源时,往往得到的是该主机的主机名(hostname)或是该资源的域名,而不是IP地址。比如我们访问baidu.com,交给我们的应用程序也只是baidu.com这一域名(或主机名),而不是该(资源所在)主机对应的IP地址。
域名(或主机名)是以ASCII字符形式标识资源所在位置、人能够理解而机器无法理解的高级名;而IP地址是以二进制数形式标识(资源所在的)主机所在的位置、人不能理解而机器可以理解的低级名。类似于高级语言和机器语言的关系。
而DNS的作用,就是用于进行对应的域名与IP地址的转化的。(不过转化是双向的,目前只遇到过由域名向IP地址的转化)
DNS协议是query/response形式的,基于UDP/TCP协议(客户端向DNS服务器请求使用UDP,DNS服务器之间互相备份使用TCP),主机端口号为53。
历史上,DNS sever是centralized control的,也就是大量域名归一个中心DNS server管理。而且域名空间是扁平化的,极易产生重复。所以现在的域名系统采用了层次化的结构,并且交由分布式的服务器进行维护。
现在再来理解一下什么是DNS。从数据上理解,它就是一个数据库,存放IP地址和域名的映射关系;从机制上理解,它就是一个协议,用于解析域名得到IP地址。
二.从数据库层面理解DNS
2.1 Domain Namespace&Resource Record
Domain Namespace是DNS数据库存储域名的方式,可以理解为树(tree)这个数据结构。每一个结点都对应一个域、域名和RR(resource record)。RR是这个域名对应的数据,往往是ipv4、ipv6的地址,这个我们在后面可以看到。
1.树的根节点通常记为.,被称为root domain。
2.每一个结点都称为一个domain(域),这和域名是不同的。
3.根节点下的结点被称为是top-level domains,不要叫做first-level domain。顶级域可以分为两类:一般域(generic domain)和国家域(country domain)。
4.如何获取结点(域)对应的域名?自下而上向根节点遍历,并将依次得到的域从左向右排列并用.分开。如xx域的域名为xx.cs.mit.edu。域名中的域从左往右愈来愈抽象。
5.域名不区分大小写。一个域至多63 char,一个域名至多255char。完整的域名也可以称为FQDN(fully qualified domain name)
每一个结点对应着一个或多个RR,存储着与该domain有关的信息,比如ipv4地址,ipv6地址,别名,权威服务器等等。我们所需要的IP地址就存储在RR中。
RR可以理解为一个结构体,其数据域有:1.owner(RR所属域的域名);2.type(RR存储信息的类型,A代表ipv4的地址,AAAA代表ipv6的地址,MX代表该域名使用的邮箱服务器的域名,CNAME代表该域名的别名,NS表示该域名所在的DNS权威服务器的域名);3.class(该域名使用的协议族,通常是internet协议组,为IN);4.TTL(time to live作为缓存能够存在的时间,单位s);5.RDATA(存储的数据,类型由type定义了)。下面是例子。
2.2 DNS server
上面