Internet中的每台计算机都有一个唯一的IP地址,通过IP地址可以连接到对应的主机。但是,IP地址是一些抽象的数字,不方便记忆,最好能用一些有意义的字符组合来表示一台主机,于是就产生了域名系统(DNS,Domain Name System)。DNS把一些有意义的字符组合对应到抽象的IP地址,即通过DNS服务器保存主机名和IP地址之间的映射关系。
域名
网络中的地址方案有两套:IP地址系统和域名地址系统。这两套地址系统是一一对应的关系。IP地址用二进制数来表示,每个IP地址为32位二进制,由4个小于256的数字组成,数字之间用点分隔,例如220.181.28.53表示一个IP地址。而与网络中的数字型IP地址相对应的字符型地址称为域名。
一个域名一般由英文字母或阿拉伯数字以及横线“-”组成,最长可达67个字符(包括后缀),并且字母的大小写没有区别,每个层次最长不能超过22个字母。这些符号构成了域名的前缀、主体和后缀等几个部分,组合在一起构成一个完整的域名。
必须按行政管理机构的规则申请域名。如果某个域名已经被申请使用,那么无法使用相同的名称;如果在内网(未接入Internet的局域网)中使用域名,那么可以由用户(系统管理员)自行设置域名。
举例www.163.com来说明:它由两部分组成,163是该域名的主体,com是该域名的后缀,代表这是一个com国际域名。www是主机名,163.com是www的域名。
域名空间
域名空间指组成域名的一个完整结构。DNS域名空间被组织成一个树形结构,每个域名对应树中的一个结点。每个域代表名字空间中特定的一块,并由一个行政实体进行管理。而域名树的根称为“.”,在根之下是顶级域。顶级域分两种:第一种是普通顶级域,表示组织性或行政性机构,例如com(工、商和金融等企业)和edu(教育机构)。第二种是国家(或地区)代码顶级域,是因为Internet快速发展而出现的国家(或地区)代码,例如cn(中国)和us(美国)。一般用户可以在顶级域下申请易记又能体现一定含义的域名。
DNS的分层结构如下:
DNS服务器类型
域名服务器可以分为主DNS服务器、辅助DNS服务器和高速缓存服务器这3种类型。
1 主DNS服务器
该DNS服务器保存域中所有信息的权威性信息源,从管理员编辑生成的可读可写的区域配置文件中读取域信息。也就是说,该DNS服务器既可以接受新用户的注册,也可以给用户提供名称解析服务。
2 辅助DNS服务器
该DNS服务器向域中的用户提供DNS查询,主要目的在于减轻主DNS服务器的负载。与主DNS服务器的不同之处在于,该DNS服务器不维护本地的区域配置文件,将主DNS服务器中的区域配置文件复制到本地文件系统,区域记录信息是只读的。也就是说,该DNS服务器不能接受新用户的注册,只能为已经注册的用户提供名称解析服务。
3 高速缓存服务器
该缓存服务器只运行DNS服务器程序,而本地不存在区域配置文件。当DNS客户端查询某个域名时,该缓存服务器只是转向查找操作,将DNS服务器返回的结果保存在高速缓存中,以后再有用户查询该域名时,该缓存服务器可以立即返回解析结果。该缓存服务器的解析结果不具有权威性,提供的只是间接信息。
DNS解析的过程
DNS基于客户机/服务器模式,当DNS客户机使用某个域名时,向DNS服务器发送一个服务请求,服务器解析该请求,把解析结果返回给客户机。这样就完成了一次域名解析。因为Internet中存在大量主机,并且在不断地增加,所以构成DNS域名的这棵“树”以分布式数据库的形式保存在世界各地不同的DNS服务器中。
举例说明解析的过程:假设有这样一个局域网环境:在本地局域网中安装设置了一台DNS服务器,该服务器指向根域服务器,该局域网中每一台客户机的DNS都指向内网中这台DNS服务器。现在局域网中有一台客户机需要访问域名为wyh.com的主机,解析过程如下:
1 本地工作站从本地设置中查知本地DNS服务器的IP地址是内网中的一台工作站,因此将需解析的域名发往该主机。
2 本地DNS服务器首先在本地缓存和本地资料库中进行查找,若未找到相应的域名信息,则将向根域服务器发送查找信息。
3 根域服务器不知道具体域名对应的IP,查看到发过来的域名中的顶级域为com,则返回管理com的DNS服务器的IP地址。
4 本地DNS服务器收到管理com的DNS服务器的IP地址后,向com管理服务器发送查询信息。
5 com服务器中通常也不会保存具体域名的解析信息,根据域名返回管理该域名的DNS服务器的IP地址。
6 本地DNS服务器再次向wyh.com管理服务器发送解析请求。
7 管理wyh.com域名解析信息的服务器发回解析的信息。
8 本地DNS服务器把收到的解析信息保存在缓存中,并把解析信息返回给发出请求的本地工作站。
9 本地工作站使用获得的IP地址访问wyh.com主机。
以上过程模拟了经过4个DNS服务器查询的过程。在实际应用中,可能需要转发更多的DNS服务器才能获取解析信息。以上示例中,最好的情况是,访问本地DNS服务器时,可以从高速缓存中直接获取解析信息。
参考资料
《Linux服务器配置与管理》 P219-223