280 likes | 576 Views
TCP/IP 基本原理 第十一章 DNS 域名解析. 本章学习要求 : 掌握: DNS 域名系统、区、域、域名的概念 掌握:域名系统的两种解析方式 掌握:逆向解析原理 掌握:域名解析的原理 了解: IP v6 DNS 的工作原理. 11.1 两类名称转换方法. 人们认为,与其 1 强记 IP 地址,远不如起个好记的名称。网络管理员喜欢给计算机起些有意义的名称。比如, APPSERVR 。在 Internet 网上,人们给 Web 站点起个容易记忆的名称,如 www.myweb.com 。这样,我们可以记住我们网络上的主机名以及我们想访问的 Web 站点名。
E N D
本章学习要求: • 掌握:DNS域名系统、区、域、域名的概念 • 掌握:域名系统的两种解析方式 • 掌握:逆向解析原理 • 掌握:域名解析的原理 • 了解:IPv6 DNS 的工作原理
11.1 两类名称转换方法 人们认为,与其1强记IP地址,远不如起个好记的名称。网络管理员喜欢给计算机起些有意义的名称。比如,APPSERVR。在Internet网上,人们给Web站点起个容易记忆的名称,如www.myweb.com。这样,我们可以记住我们网络上的主机名以及我们想访问的Web站点名。 然而,TCP/IP却不能用这些单词去寻找其他主机,TCP/IP需要的是IP地址。于是,我们使用的名称必须先被转换为IP地址,然后,TCP/IP才可以以使用。转换——或者翻译——名称为IP地址被称为名称转换。在把名称转换为IP地址之后,主机才能认出目的地在本地还是在远程,才能继续通信。这类似了你知道一个人名,想去找电话号码。TCP/IP选用下列两类名称转换方法之一:主机名转换方法或NetBIOS名称转换方法。 • 主机名转换方法 把主机的普通名称转换为IP地址的最普通方法是主机名转换方法。大多数TCP/IP转换使用程序采用这类方法。主机名转换有7个方法完成对IP地址的转换。在报告有错之前,TCP/IP将试用没一种方法。这7中主机名转换的方法是: • 本主机:可用HOSTNAME命令获得本主机名称。 • 主机HOSTS文件:位于\SYSTEMROOT\SYSTEM32\DRIVERS\ETC目录下。
DNS • NetBIOS名称缓存器:位于本地主机RAM中,可用nbtstat – c来查看。 • WINS:Windows Internet Name Service,是一个微软NetBIOS名称服务器。 • 广播 • LMHOSTS文件:与HOSTS文件位于相同的目录下。 使用主机名转换方法的普通使用工具和程序包括Ping、FPT和Web浏览器(HTTP)。 • NetBIOS名称转换 有些微软网络应用程序是为被称为NetBIOS的应用程序接口(API) 而写的。程序员使用一个普通接口帮助应用程序更好地与网络上的其他计算机进行通信。这些程序被称为NetBIOS应用程序。 NetBIOS应用程序使用NetBIOS名称,也称为计算机名称。在缺省情况下, NetBIOS名主机名相同。 NetBIOS有6中方法将NetBIOS名称转换为IP地址。如果这6种方法执行后仍不能转换,就向用户显示一个出错信息。 NetBIOS的6种名称转换方法是: • NetBIOS名称缓存器 • WINS
广播 • LMHOSTS文件 • 主机文件 • DNS 使用NetBIOS名称转换方法的应用程序有Windows Explorer、NT Explorer和微软的网络应用程序(如net use和net view命令)。 • NetBIOS名称转换方法和主机名称转换方法的比较 在查找TCP/IP配置问题时,必须知道应用程序使用哪类名称转换。两种方法有类似的地方。但方法被使用的顺序不同,每种方法采取独特的路径将名称转变为IP地址。下表列出了两类转换使用方法的顺序。
表中列出的某些方法只适用于试图转换的计算机正在使用微软的TCP/IP客户机时。有可能客户机没有设置某种转换方法,如客户机没设置使用WINS作为转换方法,这个方法就被忽略。只有微软的客户机有NetBIOS名称。表中列出的某些方法只适用于试图转换的计算机正在使用微软的TCP/IP客户机时。有可能客户机没有设置某种转换方法,如客户机没设置使用WINS作为转换方法,这个方法就被忽略。只有微软的客户机有NetBIOS名称。 总之,命名体系包括两种,一种是NetBios名称:包含16个字符,前15个用户指定,第16个用作名称后缀。每个NetBios名称必须唯一。另一种是 DNS名称:两部分组成,前面是主机名,后面是域名。主机名最多可以有255个字符,可包含字母和数字符号、连字符和句点,可以对同一计算机分配多个主机名。 DNS是当今Internet的基础架构,众多的网络服务(如Http,Ftp,Email等等)都是建立在DNS体系基础之上的。权威人士指出:"一旦你理解了DNS,你才真正懂得了Internet"。因此,DNS的重要性是不言而喻的。
11.2 DNS的引入 DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,主要是用来命名计算机服务器,(如netedu.ustc.edu.cn) 代替枯燥而难记的IP地址(如“202.38.80.200”)以定位相应的计算机和相应服务。因此,要想让名称能被网络所认识,需要在名称和IP地址之间有一位“翻译官”,能将相关的域名翻译成网络能接受的相应IP地址。DNS就起这样的作用。 11.2.1域名系统 域名系统是一个分布式数据库,它是本地负责控制整个分布式数据库的部分段。每一段中的数据通过客户/服务器模式在整个网络上均可存取,通过采用复制技术和缓存技术使得整个数据库可靠的同时,又拥有良好的性能。 域名服务器包含数据库的部分段的信息,并可提供给被称之为解析器的客户来访问。DNS的数据库结构形成一个倒立的树状结构,根的名字用空字符串来表示,但在文本中用“.”来书写。树的每一个节点都表示整个分布式数据库中的一个区(zone),每个区可再进一步划分成域(domain),每个域都有一个标识(LABEL),标明了它与父域的关系。域有一个域名(domain name),给出它在整个分布式数据库中的位置。在DNS中,域名全称是从该域到根的标识序列,以“.”分隔这些标识。该标识最多可包含63个字符。树中每一节点的完整域名为从该节点到根之间路径上的标识序列。
如果根域在节点的域名中出现,该名字看起来就象以点结尾(实际上是以点和空标签作结尾)。这些以点结尾的域名被称之为绝对域名(Absoulte Domain Name),不以点结尾的域名被称之为相对域名。 域(Domains) 即为树状域名空间中的一棵子树,域的域名同该子树根节点的域名一样,也就是说,域的名字就是该域中最高层节点的名字。举例来说,zhuhai.gd.cn域的顶端就是名为zhuhai.gd.cn的节点。 在DNS中,每个域分别由不同的组织进行管理。每个组织都可以将它的域再分成一定数量的子域并将这些子域委托给其他组织进行管理。域既能包括主机又能包括其他域(它的子域)。域名被用做DNS数据库中的索引.子域中任何域名被认为是域的一部分。 事实上,主机即为域,域名仅是DNS数据库中的索引,“主机”可由指向相关主机信息的域名来索引,域包含所有其域名在该域的主机。 在域名树中,叶节点的域通常代表主机,它们的域名可指向网络地址,硬件信息和邮件路由信息。在树内的节点,其域名既可命名一台主机,也可指向有关该域的子孙或子域的结构信息。在域名树中的内部域名并不受唯一性限制,它们既可表示它们所对应的域,又可代表网络中某台特定的主机.例如,sun.com既是sun的域,又是在sun和internet间转发信件的邮件服务器的域名。
11.2.2 域名服务器 存储有关域名空间信息的程序被称为域名服务器(name server)。通常域名服务器拥有部分域名空间(称之为区zone)的完整信息。域名服务器可以拥有多个区的授权。 • 区与域的关系 区包含了域中除了代理给别处的子域外所含有的所有域名和数据。如果域的子域没有被代理出去,则该区包含该子域名和子域中的数据。 DNS定义了两类域名服务器:primary Master 和 secondary Master。PM域名服务器从它所运行的主机上的文件获得它所负责的区的数据,SM域名服务器则是从其它的具有该区授权的域名服务器上获得它的区的数据。SM域名服务器会定期查询PM域名服务器以保证区数据为最新版本。 一般情况下,最好设立一台PM域名服务器和若干台SM域名服务器,这样可以分担负载.以及确保区中所有主机都有比较靠近的域名服务器,方便访问。
11.2.3 解析器 运行在主机上并需要域名空间信息的重新需要解析器(Resolver),在bind中解析器仅仅是一组库例程,并编译进象telnet和ftp这样的程序中。它们并非独立的进程。解析器所做的工作是,汇集查询,发送查询并等待应答,未得到应答时重发查询。 11.2.4 地址到域名的映射 在域名空间的数据是通过名字来进行索引的,找到一个给定域名的地址相对容易。但是要找到映射给一定地址的域名就要在树上的每一个域名空间作穷尽搜索。如果这样的话,效率将相当低。为了解决这个问题,创建一个以地址为索引的域名空间,这部分名字空间被称为in-addr.arpa域。 in-addr.arpa域中的节点以Doted-octet(将32bitIP地址表示为由“.”分隔开的四个8bit 的十进制形式的方法) 形式表示IP地址。IP地址在名字空间以相反的方向表示,因为名字从叶读到根。例如,www.zhuhai.gd.cn的IP地址为202.105.177.100,则相应的in-addr.arpa子域为177.105.202.in-addr.arpa,使IP地址中的第一个字节出现在树的最高层使的管理员有能力沿着网络联接将in-addr.arpa域代理出去。例如177.105.202.in-addr.arpa可以被代理给网络177.105.202的管理员。
逆向解析实质上是将IP地址表达成一个域名,这样逆向解析的很大部分 (包括服务器通信端,算法甚至软件)就可以纳入正向解析之中。即用正向解析的方法解决逆向解析的问题。 例如, 在SUN的Solaris 2.4 版本中专门有一个逆向映射的文件, 即: host.rev, 用于逆向解。 其内容格式如下: 120.128.in-addr.arpa IN SOA integv.integralis.edu 99.16 IN PTR integv.integralis.edu 98.16 IN PTR issws.integralis.edu ......... ...... ....... ……... 11.2.5 缓存与生存期 名字服务器在处理递归查询时,可能要进行多次查询才能得到信息,在这过程中,名字服务器可以获得很多有关域名空间的信息,名字服务器将所以这些信息都缓存起来以加速以后的查询.除了加速查询外,缓存还使得我们不必再次查询根名字服务器,这样可使得我们不必过分依赖根名字服务器而大大减轻根名字服务器的负载。 生存期(TTL)为所容许的名字服务器对数据缓存的时间长度,一旦生存期到了,名字服务器必须丢弃缓存数据并从授权的名字服务器中重新获取新的数据.这样可以确保域数据在整个网络上的一致性。
11.3 DNS服务的原理 11.3.1 工作过程 Internet的域是一个树型结构,根接点由一个“.”表示,下面位高层域(例如:cn, jp, com, net, org....),在往下有第二层、第三层或更多的层次,例如www.qysl.net中net为高层,qysl为第二层,就是主机名了。DNS是一个巨大的分布式数据库。它是通过名字服务器(name server)提供一个指定的域的信息来实现的。在每个区,至少有两个以上的保存其所在区的所有主机授权信息的名字服务器。所以为了获得www.qysl.net中www这台机器的IP地址,就必须与qysl.net区的名字服务器联系。DNS域名采用客户机/服务器模式进行解析。在Windows系列操作系统中都集成了DNS客户机软件。下面以Web访问为例介绍DNS的域名解析过程,如下图所示。
一个完整的域名解析过程如下。 (1)在Web浏览器中输入地址http://www.qysl.net(为了说明原理而虚构的域名),Web浏览器将域名解析请求提交给自己计算机上DNS客户机软件。 (2)DNS客户机软件向指定IP地址的DNS服务器发出域名解析请求:“请问www.qysl.net代表的Web服务器的IP地址是什么”。 (3)DNS服务器在自己建立的域名数据库中查找是否有与“www.qysl.net”相匹配的记录。域名数据库存储的是DNS服务器自身能够解析的数据。 (4)域名数据库将查询结果反馈给DNS服务器。如果在域名数据库中存在匹配的记录“www.qysl.net对应的是IP地址为192.168.1.2的Web服务器”,则转入第(9)步。 (5)如果在域名数据库中不存在匹配的记录,DNS服务器将访问域名缓存。域名缓存存储的是从其他DNS服务器转发的域名解析结果。 (6)域名缓存将查询结果反馈给DNS服务器,若域名缓存中查询到指定的记录,则转入第(9)步。 (7)若在域名缓存中也没有查询到指定的记录,则按照DNS服务器的设置转发域名解析请求到其他DNS服务器上进行查找。 (8)其他DNS服务器将查询结果反馈给DNS服务器。 (9)DNS服务器将查询结果反馈回DNS客户机。 (10)DNS客户机将域名解析结果反馈给浏览器。若反馈成功,Web浏览器就按照指定的IP
客户机由网络应用软件和DNS客户机软件构成。DNS服务器上有两部分数据,一部分是自己建立和维护的域名数据库,存储的是由本机解析的域名;一部分是为了节省转发域名解析请求的开销而设立的域名缓存,存储从其他DNS服务器解析的历史记录。客户机由网络应用软件和DNS客户机软件构成。DNS服务器上有两部分数据,一部分是自己建立和维护的域名数据库,存储的是由本机解析的域名;一部分是为了节省转发域名解析请求的开销而设立的域名缓存,存储从其他DNS服务器解析的历史记录。 11.3.2 两种工作模式 有两种询问原理,分为Recursive和Interactive两种。前者是由DNS代理去问,问的方法是用Interactive方式,后者是由本机直接做Interactive式的询问。由上例可以看出,我们一般查询名称的过程中,实际上这两种查询模式都是交互存在着的。 • 递归式(Recursive):DNS客户端向DNS Server的查询模式,这种方式是将要查询的封包送出去问,就等待正确名称的正确响应,这种方式只处理响应回来的封包是否是正确响应或是说是找不到该名称的错误讯息。 • 交谈式(Interactive):DNS Server间的查询模式,由Client端或是DNS Server上所发出去问,这种方式送封包出去问,所响应回来的资料不一定是最后正确的名称位置,但也不是如上所说的响应回来是错误讯息,他响应回来告诉你最接近的IP位置,然后再到此最接近的IP上去寻找所要解析的名称,反复动作直到找到正确位置。
11.4 DNS 资源记录 每个 DNS 数据库都由资源记录构成。一般来说,资源记录包含与特定主机有关的信息,如 IP 地址、主机的所有者或者提供服务的类型。
11.5 IPv6的域名系统 IPv6具有很多优点。首先,它提供了巨大的地址空间,其次,IPv6的地址结构和地址分配采用严格的层次结构,以便于进行地址聚合,从而大大减小了路由器中路由表的规模。再次,IPv6协议支持网络节点的地址自动配置,可以实现即插即用功能。而且,IPv6协议对主机移动性有较好的支持,适合于越来越多的互联网移动应用。另外,IPv6协议在安全性、对多媒体流的支持性等方面都具有超过IPv4的优势。IPv6网络中的DNS非常重要,一些IPv6的新特性和DNS的支持密不可分。本文从IPv6 DNS的体系结构、IPv6的地址解析、IPv6地址自动配置和即插即用、IPv4到IPv6的过渡等几方面对IPv6时代的DNS进行了分析和研究。 IPv6网络中的DNS与IPv4的DNS在体系结构上是一致的,都是采用树型结构的域名空间。IPv4协议与IPv6协议的不同并不意味着需要单独两套IPv4 DNS体系和IPv6 DNS体系,相反的是,DNS的体系和域名空间必须是一致的。即,IPv4和IPv6共同拥有统一的域名空间。在IPv4到IPv6的过渡阶段,域名可以同时对应于多个IPv4和IPv6的地址。以后随着IPv6网络的普及,IPv6地址将逐渐取代IPv4地址。
11.5.1 DNS对IPv6地址层次性的支持 IPv6可聚合全局单播地址是在全局范围内使用的地址,必须进行层次划分及地址聚合。它的层次结构如下表所示: 其中: FP(001):用于可聚合全局单播地址的格式前缀(FP:Format Prefix)(3比特);TLA ID:顶级聚合标识符(Top-Level Aggregation Identifier);RES:为将来使用而保留;NLA ID:次级聚合标识符(Next-Level Aggregation Identifier);SLA ID:站点级聚合标识符(Site-Level Aggregation Identifier);INTERFACE ID: 接口标识符;
IPv6全局单播地址的分配方式如下:顶级地址聚合机构TLA(即大的ISP或地址管理机构)获得大块地址,负责给次级地址聚合机构NLA(中小规模ISP)分配地址,NLA给站点级地址聚合机构SLA(子网)和网络用户分配地址。IPv6地址的层次性在DNS中通过地址链技术可以得到很好的支持。下面从DNS正向地址解析和反向地址解析两方面进行分析。 11.5.2正向解析IPv4的地址正向解析的资源记录是“A”记录。IPv6地址的正向解析目前有两种资源记录,即,“AAAA”和“A6”记录。其中,“AAAA”较早提出[4],它是对“A”记录的简单扩展,由于IP地址由32位扩展到128位,扩大了4倍,所以资源记录由“A”扩大成4个“A”。“AAAA”用来表示域名和IPv6地址的对应关系,并不支持地址的层次性。 “A6”在RFC2874[5]中提出,它是把一个IPv6地址与多个“A6”记录建立联系,每个“A6”记录都只包含了IPv6地址的一部分,结合后拼装成一个完整的IPv6地址。“A6”记录支持一些“AAAA”所不具备的新特性,如地址聚合,地址更改(Renumber)等。 首先,“A6”记录方式根据TLA、NLA和SLA的分配层次把128位的IPv6的地址分解成为若干级的地址前缀和地址后缀,构成了一个地址链。每个地址前缀和地址后缀都是地址链上的一环,一个完整的地址链就组成一个IPv6地址。这种思想符合IPv6地址的层次结构,从而支持地址聚合。
其次,用户在改变ISP时,要随ISP改变而改变其拥有的IPv6地址。如果手工修改用户子网中所有在DNS中注册的地址,是一件非常繁琐的事情。而在用“A6”记录表示的地址链中,只要改变地址前缀对应的ISP名字即可,可以大大减少DNS中资源记录的修改。并且在地址分配层次中越靠近底层,所需要改动的越少。其次,用户在改变ISP时,要随ISP改变而改变其拥有的IPv6地址。如果手工修改用户子网中所有在DNS中注册的地址,是一件非常繁琐的事情。而在用“A6”记录表示的地址链中,只要改变地址前缀对应的ISP名字即可,可以大大减少DNS中资源记录的修改。并且在地址分配层次中越靠近底层,所需要改动的越少。 在下例中,节点host.example.com地址由example.com(SLA)分配, example.com的地址由example1.net(NLA)分配,而example1.net的地址则是由ISP-A.net(TLA)分配。下面的多条记录就组成了一个完整的IPv6 DNS地址链。如果example1.net改变ISP,需要改变其DNS中的ISP地址前缀,而它的网络用户example.com则无需改变DNS设置。例1:IPv6DNS地址链:$ORIGIN example.com. host IN A6 64 0:0:0:0:42::1 company.example1.net.$ORIGIN example1.net.company IN A6 32 0:0:201:1860:: SUBSCRIBER-X.ISP-A.net$ORIGIN ISP-A.net.SUBSCRIBER-X IN A6 0 3ffe:8050::例2:把例1中的地址翻译成"AAAA"记录表示的形式:$ORIGIN example.com.host IN AAAA 3ffe:8050:201:1860:0:0:0:0:42::1
11.5.3 反向解析 IPv6反向解析的记录和IPv4一样,是“PTR”,但地址表示形式有两种。一种是用 “.”分隔的半字节16进制数字格式(Nibble Format),低位地址在前,高位地址在后,域后缀是“IP6.INT.”。另一种是二进制串(Bit-string)格式,以“\[”开头,16进制地址(无分隔符,高位在前,低位在后)居中,地址后加“]”,域后缀是“IP6.ARPA.”。半字节16进制数字格式与“AAAA”对应,是对IPv4的简单扩展。二进制串格式与“A6”记录对应,地址也象“A6”一样,可以分成多级地址链表示,每一级的授权用“DNAME”记录。和“A6”一样,二进制串格式也支持地址层次特性。 总之,以地址链形式表示的IPv6地址体现了地址的层次性,支持地址聚合和地址更改。但是,由于一次完整的地址解析分成多个步骤进行,需要按照地址的分配层次关系到不同的DNS服务器进行查询。所有的查询都成功才能得到完整的解析结果。这势必会延长解析时间,出错的机会也增加。因此,需要进一步改进DNS地址链功能,提高域名解析的速度才能为用户提供理想的服务。
11.5.4 IPv6中的即插即用与DNS IPv6协议支持地址自动配置[6][7],这是一种即插即用的机制,在没有任何人工干预的情况下,IPv6网络接口可以获得链路局部地址、站点局部地址和全局地址等,并且可以防止地址重复。IPv6支持无状态地址自动配置和有状态地址自动配置两种方式。 在无状态地址自动配置方式下,需要配置地址的网络接口先使用邻居发现机制获得一个链路本地地址。网络接口得到这个链路本地地址之后,再接受路由器宣告的地址前缀,结合接口标识得到一个全局地址。而有状态地址自动配置的方式,如DHCP(动态主机配置协议),需要一个DHCP服务器,通过客户机/服务器模式从DHCP服务器处得到地址配置的信息。IPv6节点通过地址自动配置得到IPv6地址和网关地址。但是,地址自动配置中不包括DNS服务器的自动配置。如何自动发现提供解析服务的DNS服务器也是一个需要解决的问题。正在研究的DNS服务器的自动发现的解决方法可以分为无状态和有状态两类。 在无状态的方式下,需要为子网内部的DNS服务器配置站点范围内的任播地址。要进行自动配置的节点以该任播地址为目的地址发送服务器发现请求,询问DNS服务器地址、域名和搜索路径等DNS信息。这个请求到达距离最近的DNS服务器,服务器根据请求,回答DNS服务器单播地址、域名和搜索路径等DNS信息。节点根据服务器的应答配置本机DNS信息,以后的DNS请求就直接用单播地址发送给DNS服务器。
11.5.5 IPv6过渡阶段与DNS 在IPv4到IPv6的过渡过程中,作为Internet基础架构的DNS服务也要支持这种网络协议的升级和转换。IPv4和IPv6的DNS记录格式等方面有所不同,为了实现IPv4网络和IPv6网络之间的DNS查询和响应,可以采用应用层网关DNS-ALG结合NAT-PT的方法[9],在IPv4和IPv6网络之间起到一个翻译的作用。例如,IPv4的地址域名映射使用“A”记录,而IPv6使用“AAAA”或“A6”记录。那么,IPv4的节点发送到IPv6网络的DNS查询请求是“A”记录,DNS-ALG就把“A”改写成“AAAA”,并发送给IPv6网络中的DNS服务器。当服务器的回答到达DNS-ALG时,DNS-ALG修改回答,把“AAAA”改为“A”,把IPv6地址改成DNS-ALG地址池中的IPv4转换地址,把这个IPv4转换地址和IPv6地址之间的映射关系通知NAT-PT,并把这个IPv4转换地址作为解析结果返回IPv4主机。IPv4主机就以这个IPv4转换地址作为目的地址与实际的IPv6主机通过NAT-PT通信。示意图如下页示。
对于采用双协议栈方式的过渡方法,在DNS服务器中同时存在“A”记录和对于采用双协议栈方式的过渡方法,在DNS服务器中同时存在“A”记录和 "AAAA"(或"A6")记录。由于节点既可以处理IPv4协议,也可以处理IPv6 协议,因此无需类似DNS ALG的转换设备。无论DNS服务器回答“A”记录还是 "AAAA"记录,都可以进行通信。
本章习题 • 参见教师网页:http://staff.ustc.edu.cn/~leeyi