⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dns协议.htm

📁 internet协议集
💻 HTM
📖 第 1 页 / 共 5 页
字号:
          align=justify>在缓冲中进行匹配,如果在缓冲中找到QNAME,将所有和它关联的而且匹配QTYPE的RR复制到响应区,如果没有从认证权威来的授权,可以在缓冲中寻找最好的一个,将它放在认证区内,然后转到第6步;</P>
          <LI>
          <P align=justify>使用本地resolver响应请求。保存包括中间CNAME在内的结果到应答中。</P>
          <LI>
          <P 
      align=justify>仅使用本地数据,试着加入其它有用的RR到查询的附加部分。然后退出。</P></LI></OL></BLOCKQUOTE>
      <P align=justify>3.3.3. Wildcard</P>
      <P align=justify>在前面的算法中,我们对其拥有者以*开始的RR进行了特殊处理,这类的RR称为wildcards。Wildcard 
      RR可以看成合成RR的指令,在有合适的条件时,服务器创建RR,这个RR的拥有者名和查询名相同,而内容是从wildcard 
      RR获得的。这种机制经常用于创建一个区,这个区可用于在网络上从一个邮件系统向另一个邮件系统转发邮件。这种情况下,通常的假设是区中的所有名字都存在,只要没有说不存在,都认为有。</P>
      <P align=justify>wildcard 
      RR的内容遵守通常RR的格式,区中的wildcard有一个拥有者名,它控制者可以进行匹配的查询名。wildcard 
      RR的拥有者名是以下的形式:"*.&lt;anydomain&gt;",其中&lt;anydomain&gt;是任何域名,&lt;anydomain&gt;不应该再包括其它*标记,而且它应该在区的认证数据之中。我们可以把wildcard看成是通配符的作用。wildcard 
      RR在以下情况中不适用:</P>
      <UL>
        <LI>
        <P align=justify>查询在应该在别的区中;</P>
        <LI>
        <P align=justify>如果区中已经存在了它所代表的某个域。例如,如果wildcard 
        RR有"*.X",区中包括了B.X,那么wildcard就不代表B.X,A.B.X或X,而只能代表Z.X了。</P></LI></UL>
      <P 
      align=justify>在查询名中的*没有什么特殊作用,它只用于在认证权威区中检测wildcard,这样的查询是唯一可以在响应中获得包括拥有者名中包含*的查询请求,其它请求的响应都不能包含*。这样查询的结果不能缓冲。在合成RR时,wildcard 
      RR的内容不应该被改变。</P>
      <P 
      align=justify>下面是一个例子,我们假设一个大公司有一个大型的非TCP/IP网络,它要创建一个邮件网关。如果公司是X.COM,而TCP/IP网关为A.X.COM,下面的RR可能会在COM区中:</FONT></P>
      <TABLE cellSpacing=1 cellPadding=7 width="100%" border=1>
        <TBODY>
        <TR>
          <TD vAlign=top width="19%"><FONT face=宋体 size=3>
            <P align=justify>X.COM</FONT></P></TD>
          <TD vAlign=top width="12%">
            <BLOCKQUOTE><FONT face=宋体 size=3>
              <P align=justify>MX</FONT></P></BLOCKQUOTE></TD>
          <TD vAlign=top width="16%">
            <BLOCKQUOTE><FONT face=宋体 size=3>
              <P align=justify>10</FONT></P></BLOCKQUOTE></TD>
          <TD vAlign=top width="54%"><FONT face=宋体 size=3>
            <P align=justify>A.X.COM</FONT></P></TD></TR>
        <TR>
          <TD vAlign=top width="19%"><FONT face=宋体 size=3>
            <P align=justify>*.X.COM</FONT></P></TD>
          <TD vAlign=top width="12%">
            <BLOCKQUOTE><FONT face=宋体 size=3>
              <P align=justify>MX</FONT></P></BLOCKQUOTE></TD>
          <TD vAlign=top width="16%">
            <BLOCKQUOTE><FONT face=宋体 size=3>
              <P align=justify>10</FONT></P></BLOCKQUOTE></TD>
          <TD vAlign=top width="54%"><FONT face=宋体 size=3>
            <P align=justify>A.X.COM</FONT></P></TD></TR>
        <TR>
          <TD vAlign=top width="19%"><FONT face=宋体 size=3>
            <P align=justify>A.X.COM</FONT></P></TD>
          <TD vAlign=top width="12%">
            <BLOCKQUOTE><FONT face=宋体 size=3>
              <P align=justify>A</FONT></P></BLOCKQUOTE></TD>
          <TD vAlign=top width="16%">
            <BLOCKQUOTE><FONT face=宋体 size=3>
              <P align=justify>1.2.3.4</FONT></P></BLOCKQUOTE></TD>
          <TD vAlign=top width="54%"> </TD></TR>
        <TR>
          <TD vAlign=top width="19%"><FONT face=宋体 size=3>
            <P align=justify>A.X.COM</FONT></P></TD>
          <TD vAlign=top width="12%">
            <BLOCKQUOTE><FONT face=宋体 size=3>
              <P align=justify>MX</FONT></P></BLOCKQUOTE></TD>
          <TD vAlign=top width="16%">
            <BLOCKQUOTE><FONT face=宋体 size=3>
              <P align=justify>10</FONT></P></BLOCKQUOTE></TD>
          <TD vAlign=top width="54%"><FONT face=宋体 size=3>
            <P align=justify>A.X.COM</FONT></P></TD></TR>
        <TR>
          <TD vAlign=top width="19%"><FONT face=宋体 size=3>
            <P align=justify>*.A.X.COM</FONT></P></TD>
          <TD vAlign=top width="12%">
            <BLOCKQUOTE><FONT face=宋体 size=3>
              <P align=justify>MX</FONT></P></BLOCKQUOTE></TD>
          <TD vAlign=top width="16%">
            <BLOCKQUOTE><FONT face=宋体 size=3>
              <P align=justify>10</FONT></P></BLOCKQUOTE></TD>
          <TD vAlign=top width="54%"><FONT face=宋体 size=3>
            <P align=justify>A.X.COM</FONT></P></TD></TR></TBODY></TABLE><FONT face=宋体 
      size=3>
      <P align=justify>对于所有X.COM中的MX查询,都会得到A.X.COM。存在两个wildcard 
      RR是必须的,因为有A.X.COM,就必须要有*.A.X.COM,否则W.A.X.COM就查询不出来,原因请在本节中的wildcard 
      RR不适用的情况中寻找。</P>
      <P align=justify>3.3.4. 否定响应缓冲(可选)</P>
      <P 
      align=justify>DNS可以允许服务器提供一种否定响应缓冲服务,在这种服务下服务器返回一个否定响应和一个TTL,resolver可以认为在TTL的时间之内相同的查询都会获得否定响应。同样的,resolver可以进行一个配置多个类型的查询,并缓冲不存在的类型。</P>
      <P align=justify>实现的方法是当数据是被认证时服务器加入一个SOA 
      RR到响应的附加区域,SOA必须是那个区的,而且这个区必须中响应中数据的认证权威区,SOA的MINIMUM域控制缓冲否定响应的时间。在有些情况下,响应数据可能包括多个拥有者名,这时SOA机制应该用于匹配QNAME的数据上,它才是唯一被认证了的数据。服务器和resovler不应该试图添加SOA到非认证响应的附加区域,也不应该进行任何推测。</P>
      <P align=justify>这个功能是可选的,虽然现在它越来越有可能成为标准,但是服务器并非非要加SOA 
      RR到所有的认证响应中去,resolver也不一定非要缓冲否定结果。所有的resolver和支持循环查询的服务器都应该可以忽略SOA RR。</P>
      <P align=justify>3.3.5. 区的维护与传输</P>
      <P 
      align=justify>区管理员的部分工作是维护所有服务器上的区数据。当必须要进行修改时,修改必须让所有的名字服务器知道。这一过程可以通过FTP或其它什么过程完成,而推荐的方法是DNS协议的区传输部分所指出的方法。通常的自动更新模式是一个服务器是区的主服务器,管理员对区内的域名文件(master 
      file)进行修改,修改后管理员通知主服务器装载新的数据,其它的非主服务器定期和主服务器进行同步。</P>
      <P 
      align=justify>为了知道是否发生了修改,非主服务器必须检查SOA的SERIAL域,只要有改变,SERIAL域就会改变,这种改变可能是加一,也可能是其它的什么算法,反正变了就行。因为我们改变的域大小是有范围的,因此理论上必须有一个修改的时间间隔,基本上,老的复本必须在序列号(就是那个域)用完其空间一半时消失。实际上只要保证比较操作的正确性就可以了。</P>
      <P align=justify>非主服务器的定期同步由区内SOA 
      RR的参数REFRESH,RETRY和EXPIRE决定。当非主服务器装入新区时,它会在REFRESH秒后向主服务器查询新序列号,如果查询未能完成,它会每隔RETRY秒重新进行一次。如果查询得到的序列号和原来的序列号一样,则不需要进行改变。在REFRESH时间间隔后重新开始。如果非主服务器在EXPIRE间隔后不能进行查询,它必须抛弃现有的区数据。</P>
      <P 
      align=justify>当查询后知道区内的数据已经改变,非主服务器必须通过AXFR请求请求主服务器传送区数据。AXFR可能会被拒绝而产生错误,但是通常情况下会得到一系列响应信息。第一个和最后一个信息必须包括区内顶认证结点的数据。中间的信息包括区内其它RR的信息,包括认证的和非认证的。这些数据使非主服务器得到区数据的复本,因为必须保证数据的准确,我们必须使用基于连接的协议。以上的查询操作不但可以在主服务器非主服务器之间进行,而且可以在非主服务器之间进行。这可以提高整体的运行效率。</P>
      <P align=justify>4. RESOLVERS</P>
      <P align=justify>4.1. 介绍</P>
      <P 
      align=justify>Resolver是用户程序和域名服务器之间的接口,最简单的情况下,resolver接收从用户来的请求,返回符合本地数据格式的查询结果。resolver和请求DNS服务的程序在同一台机器上,但DNS服务器则在其它机器上,因为resolver可能要查询多个名字服务器,所有它需要有一个本地缓冲,而查询的时间则可能因具体查询不同而差别很大。resolver的一个重要作用是就是它有一个多个程序可以共享的缓冲区,这里保存着一些查询结果,使用这些结果可以减少对服务器反复的查询。</P>
      <P align=justify>4.2. 客户-resolver接口</P>
      <P align=justify>4.2.1. 典型函数</P>
      <P align=justify>这个接口因主机不同而不同,但有三个函数是大家必须都有的:</P>
      <BLOCKQUOTE>
        <OL>
          <LI>
          <P 
          align=justify>主机名到主机地址转换,此函数通常定义用来模拟原来基于HOSTS.TXT的函数。给定一个字符串,返回一个32位IP地址,在DNS下,它转换为请求类型A的RR请求。因为DNS不保存RR的顺序,函数会进行排序将返回的许多地址中的一个返回给用户。请注意:最好是返回多个地址,但单个地址是模拟原来基于HOSTS.TXT服务的。</P>
          <LI>
          <P 
          align=justify>主机地址到主机名转换,给定32位IP地址,返回字符串。查询时采用PRT查询,主机名加上"IN-ADDR.ARPA"后缀进行查询,如IP地址为1.2.3.4,则PTR 
          RR查询域名"4.3.2.1.IN-ADDR.ARPA"。</P>
          <LI>
          <P 
          align=justify>通用查询函数,调用者提供QNAME,QTYPE和QCLASS,希望所有匹配的RR,函数会使用DNS格式而非本机格式返回查询结果,结果中包括所有RR的内容。</P></LI></OL></BLOCKQUOTE>
      <P align=justify>在resolver执行上面的函数时,会返回以下的结果给客户:</P>
      <BLOCKQUOTE>
        <UL>
          <LI>
          <P align=justify>给定请求数据的一个或多个RR,此时resovler以合适的格式返回结果</P>
          <LI>
          <P align=justify>名字错误(NE),在查询的名字不存在是会返回NE</P>
          <LI>
          <P 
          align=justify>未找到数据错误,查询的名字存在,但合适类型的数据不存在时产生这种错误,如把主机地址用于邮箱地址时会返回错误</P></LI></UL></BLOCKQUOTE>
      <P 
      align=justify>需要注意的是,有时某些函数会在查询时名字错误和数据未找到错误会被合并为另一种类型的错误,但通常函数不会。一个原因是程序通常先查询一个名字(包括类型信息),然后是同一个名字的另外类型,如果两个错误合起来,反面会减慢查询速度。</P>
      <P align=justify>4.2.2. 别名</P>
      <P 
      align=justify>当试图解析一个特殊的名字查询时,resolver可能发现这是一个别名,如果可能这种情况会返回给客户。但是经常,当resolver碰到一个CNAME时,它会重新开始一个查询。然而,在执行通常函数而且CNAME 
      RR配置查询类型时,resolver不应该要别名。在有别名的时候有几种特殊情况。多级别名应该避免,因为太缺乏效率,但这也不应该被做为错误返回给客户。对于别名循环和别名指向不存在的名字时应该将错误返回给客户。</P>
      <P align=justify>4.2.3. 临时错误</P>
      <P 
      align=justify>有时候因为网络等原因,resolver可能不能完成某个请求,这时不应该返回没有名字或未查询到这类错误。这类错误对人类用户来说可是件烦心的事。在某些时候可以阻塞请求,但这并不是个好的解决之道,特别是服务器就等它完成以转向其它任务的时候。推荐的方法是返回错误指示现在出现临时错误。</P>
      <P align=justify>4.3. Resolver内部</P>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -