用于选择域名服务器的方法和系统的制作方法

文档序号:7961427阅读:113来源:国知局
专利名称:用于选择域名服务器的方法和系统的制作方法
技术领域
本发明一般涉及解析服务器请求。更具体地说,本发明涉及解析域名服务器请求。
背景技术
计算机通过发送和接收向或从特定地址如IP地址寻址的消息而在网络上通信。IP地址典型地是可能难以让人记忆的一系列数字,例如10.10.10.1。因此,每个IP地址典型地与更易于记忆的域名如www.ibm.com相关联。为了将域名与IP地址相关联,利用域名服务器使域名与IP地址相互关联。
很多计算机系统包括域名服务器表(“DNS表”),其顺序地列出多个潜在可用的域名服务器(“DNS”),该域名服务器可以接收对与用户输入的域名相关联的IP地址的域名服务器请求(“DNS请求”)。很多DNS包括多个DNS条目。在特定DNS不能通信或响应的情况下,请求计算机可能在获得所请求的IP地址并且由此获得与所请求的IP地址相关联的任何内容时发生延迟。
目前,请求计算机通过超时来等待DNS请求的失败,以尝试用来自DNS表的下一个DNS解析DNS请求。超时可以设为75秒长。对于某些用户,这样长的超时可能产生不可接受的延迟。
域名服务器表经常是在配置文件中加以维护。例如,域名服务器表包括采用一种格式列出的4个服务器。如果前三个服务器停工,则在尝试联系第四个服务器之前,名称解析将等待向前三个服务器的请求超时,对于每个后续的请求都是如此,直至前三个服务器中的至少一个恢复在线。服务器离线之后的第一个请求的超时延迟是不可避免的,这是因为请求服务器不知道潜在的延迟,并且经常是基于服务器负载容量和/或平均响应时间而确定服务器的次序。
因此,开发一种帮助DNS选择来克服这些和其它缺点是有挑战性的。

发明内容
本发明的第一实施例是一种选择域名服务器来解析域名请求的方法。该方法包括接收名称解析请求,并且将在域名服务器表中列出的至少一个域名服务器与时间戳相关联。该方法还包括基于时间戳而访问来自域名服务器表的域名服务器。
本发明的第二实施例是一种计算机可用介质,其包括用于选择域名服务器来解析远程计算机名称的计算机可读代码,其包括用于接收名称解析请求的计算机可读代码;以及,用于将在域名服务器表中列出的至少一个域名服务器与时间戳相关联的计算机可读代码。该介质还包括用于基于时间戳而访问来自域名服务器表的域名服务器的计算机可读代码。
本发明的第三实施例是一种用于为域名解析请求选择所要联系的域名服务器的系统,包括用于接收名称解析请求的装置;以及用于将在域名服务器表中列出的至少一个域名服务器与时间戳相关联的装置。该系统还包括用于基于时间戳而访问来自域名服务器表的域名服务器的装置。
根据下面对本发明各个实施例的详细描述,本发明的前述实施例和其它实施例、目的和方面、以及特征和优点将会变得更加清楚。本详细描述和附图仅仅用来说明本发明,而不是限制由所附权利要求及其等价物限定的本发明的范围。


图1示出了根据本发明一方面的选择域名服务器的方法的一个实施例;图2示出了根据本发明一方面的选择域名服务器的方法的另一个实施例;图3示出了根据本发明一方面的选择域名服务器的方法的另一个实施例;图4示出了根据本发明一方面的选择域名服务器的方法的另一个实施例;图5示出了根据本发明一方面的选择域名服务器的方法的另一个实施例;图6示出了根据本发明一方面的选择域名服务器的方法的另一个实施例;图7示出了根据本发明一方面的、用于解析域名服务器的系统的一个实施例;以及图8示出了根据本发明另一方面的、用于选择域名服务器的方法的另一个实施例。
具体实施例方式
图1示出了根据本发明一方面的、用于选择域名服务器来解析名称解析请求的方法100的一个实施例。方法100在步骤110开始。这里公开的任何创新性方法可以以任何次序执行,并且描述方法步骤的次序不限制可以执行这些步骤的次序。
方法100在步骤120通过接收名称解析请求而继续。在一个实施例中,在本地网络和诸如因特网的公共网络之间接口的服务器处接收该请求。在另一个实施例中,在具有与网络的直接连接的个人计算机处接收名称解析请求。DNS请求是发送到识别远程服务器的域名服务器的请求,其中所识别的远程服务器由通俗名称而非IP地址标识。DNS请求也被称作DNS解析请求。
在步骤130,将至少一个域名服务器与时间戳相关联。在一个实施例中,时间戳表示将尝试联系相关联的服务器的最早时间。例如,该时间可以由UNIX(R)系统指定。在另一个实施例中,时间戳是跟踪(track)特定时间之后或者直至其的流逝时间的递增或递减计时器。在一个实施例中,时间戳跟踪一小时的流逝时间。在一个实施例中,通过gettimeofday()确定如由UNIX系统指定的时间,这对于本领域的技术人员而言是公知的。
在一个实施例中,使用DNS表来实现域名服务器和时间戳之间的关联。下表1示出了示例性DNS表,其中当前时间先于如由UNIX系统指定为1091339493q的时间。

表1示例性DNS表如表1所示,示例性DNS表包括在此用IP地址列出的多个域名服务器、以及与每个域名服务器相关联的时间戳。在表1中,时间戳用如由UNIX系统指定的时间列出。时间戳可以为零,或者时间戳可以为非零值。
表1示出了4个服务器,它们以基于其IP地址的尾数字的1、2、3和4指定。根据本发明,在表1中,基于列出次序,服务器1优先于服务器2,服务器2优先于服务器3,并且服务器3优先于服务器4。
在一个实施例中,零时间戳表示接收名称解析请求的计算机当前不知道接收计算机和与零时间戳相关联的域名服务器之间的任何通信延迟。在一个实施例中,在配置文件(“config文件”)中维护DNS表,并且在安全位置维护它。在一个实施例中,在/tmp/.current_servers处维护DNS表。
相反,非零时间戳表示接收DNS请求的计算机当前知道通信延迟,并且该接收计算机将不向与非零时间戳相关联的服务器尝试名称解析,直至非零时间戳具有零值。
在步骤140,接收计算机基于时间戳而选择域名服务器。在一个实施例中,基于时间戳选择域名服务器包括访问DNS表,并且访问与零时间戳相关联的第一个所列出的DNS。
如表1所示,访问域名服务器“1”的先前尝试超时,并且访问域名服务器“2”的先前尝试也超时。域名服务器“3”和“4”在对请求的响应中尚未超时。这样,域名服务器“1”和“2”已被分配非零时间戳,而域名服务器“3”和“4”具有零时间戳,使得在表1所示的表当前时所作的请求将尝试联系域名服务器“3”,而不尝试联系域名服务器“1”和“2”。
图2示出了根据本发明一方面的、用于将域名服务器与时间戳相关联的方法200的另一个实施例。方法200在210开始。方法200在步骤230通过将域名服务器与时间戳相关联而继续。在一个实施例中,如同步骤130一样实现步骤230。
方法200在步骤240确定域名服务器延迟条件。在一个实施例中,确定域名服务器延迟条件包括从域名服务器接收故障通知。在另一个实施例中,确定域名服务器延迟条件包括不能在指定的时间段内从域名服务器接收响应,这被称作‘超时’故障。在另一个实施例中,在发出名称解析请求之前,向域名服务器发出‘ping(连接测试)’请求,并且响应于ping结果而确定域名服务器延迟条件。在一个实施例中,跟踪向DNS发出请求和接收响应之间的时间(“请求时间”),并且将其存储在与发出名称解析请求的计算机通信的存储器中。
在一个实施例中,响应于实际的名称解析请求而确定域名服务器延迟条件。在另一个实施例中,在没有名称解析请求的预定间隔上确定域名服务器延迟条件。例如,在占先地(preemptively)确定域名服务器延迟条件的实施例中,计算机基本上连续更新DNS时间戳。例如,计算机可以每分钟、每小时、每天或者其它设定间隔ping DNS表上的每个服务器。在另一个示例中,计算机可以以基于具有非零时间戳的服务器与具有零时间戳的服务器的比率的频率,ping DNS表上的每个服务器。在其它实施例中,仅仅第一个具有零时间戳的DNS才接收ping请求。
在步骤250,基于域名服务器延迟条件,更新与该域名服务器相关联的时间戳。在一个实施例中,更新时间戳涉及将零时间戳改变为非零值。在一个实施例中,更新时间戳涉及将时间戳改变为基于请求时间而确定的值。在另一个实施例中,更新时间戳包括确定当前时间并且相加预定时间以确定时间戳时间。例如,预定时间可以是一小时、一天、或者任何适当的时间。在一个实施例中,预定时间基于DNS列表上的DNS的数目。在另一个实施例中,预定时间基于与非零时间戳相关联的DNS的数目。在另一个实施例中,基于包括诸如ping响应时间的往返时间、或者没有得到响应的概率的因素,动态确定时间。
在另一个实施例中,响应于与非零时间戳相关联的DNS与具有零时间戳的DNS的数目或者相反的比例,动态确定和调整时间。在另一个实施例中,响应于与非零时间戳的DNS与具有零时间戳的DNS的数目或者相反的比例,调整另一个DNS的时间戳。
图3示出了根据本发明一方面的、用于基于域名服务器延迟条件而更新时间戳的方法300的一个实施例。方法300在步骤310开始。在步骤320,基于域名服务器延迟条件而更新时间戳。在一个实施例中,如同在步骤250中一样实现步骤320。
方法300在步骤330基于域名服务器延迟条件而将延迟值与域名服务器相关联。在一个实施例中,用请求时间或者从请求时间导出的时间值更新时间戳。
图4示出了根据本发明一方面的、用于更新时间戳的方法400的一个实施例。方法400在410开始。然后,方法300在步骤420基于域名服务器延迟条件而将延迟值与域名服务器相关联。
在步骤430,用延迟值更新时间戳。更新可以是固定、预定的时间段,或者动态确定的值。动态确定的值可以基于多个因素,包括到服务器的往返时间、以及向该服务器的名称解析请求的历史成功。在另一个实施例中,从服务器没有得到响应的概率用作延迟值的基础。
图5示出了根据本发明一方面的、用于基于时间戳而选择域名服务器的方法500的一个实施例。方法500在步骤510开始。
在步骤520,基于时间戳而访问域名服务器。在一个实施例中,如同在步骤140中一样实现步骤520。
在步骤530,基于相关联的时间戳,绕过至少一个域名服务器。在一个实施例中,绕过至少一个域名服务器包括基于相关联的非零时间戳而不向DNS请求名称解析。例如,如上面表1所示,绕过域名服务器例如将导致不向10.10.10.1和10.10.10.2请求名称解析,而是向10.10.10.3请求名称解析。
图6示出了根据本发明一方面的、用于基于时间戳而选择域名服务器的方法600的一个实施例。方法600在步骤610开始。
在步骤620,基于时间戳而访问域名服务器。在一个实施例中,如同步骤140一样实现步骤620。
在步骤630,基于相关联的时间戳,绕过至少一个域名服务器。在一个实施例中,如同步骤530一样实现步骤630。
在步骤640,基于相关联的时间戳的期满,访问被绕过的域名服务器。在一个实施例中,通过将当前时间与时间戳进行比较以确定当前时间是否在时间上先于或早于时间戳,确定相关联的时间戳的期满。使用任何适当的方法来确定当前时间,例如gettimeofday()查询。在一个实施例中,基于时间戳已期满的确定而以零值替换时间戳。
图7示出了根据本发明一方面的、用于选择域名服务器的系统700的一个实施例。系统700包括请求计算机720、DNS表710和域名服务器730。如图7所示,请求计算机720与DNS表710通信,以确定为了DNS解析请求而联系的域名服务器的IP地址。此外,请求计算机720能够与域名服务器730通信,以解析名称解析请求。
DNS表710可以在与请求计算机720相同或不同的位置驻留并且加以维护。请求计算机720可以被实现为连接到诸如因特网的网络的服务器或个人计算机。可以利用任何适当的通信协议安排(format)请求计算机720和DNS表710之间的通信。类似地,可以利用任何适当的通信协议安排请求计算机720和域名服务器730之间的通信。适当的通信协议包括但不限于因特网协议。
图8示出了根据本发明另一方面的选择域名服务器的另一方法800。方法800在810开始。
方法800在步骤820、830、以及840执行FOR循环。方法800针对DNS列表中(即,位于/.current_servers)的每个服务器确定(步骤820)与该服务器相关联的时间戳是否为零(步骤830)、以及时间戳是否期满(步骤840)。
响应于在步骤830确定时间戳为零,方法800在步骤850向所选DNS查询,以便解析远程计算机名称。响应于在步骤830确定时间戳为非零,方法800在步骤840确定时间戳是否期满,并且如果时间戳已期满,则在步骤850向所选DNS查询之前,在步骤860将时间戳设为零。在时间戳未期满的情况下,方法800返回到步骤820,并且再次循环。
在步骤850向所选服务器查询之后,方法800在步骤870确定查询是否成功。基于成功的查询,方法800在步骤890结束。在查询不成功的情况下,方法800在步骤880将被查询服务器的时间戳设为下一个联系时间,并且循环到步骤820。可选地,在一个实施例中,如同在方法200、300或400中一样实现时间戳设置。在另一个实施例中,将时间戳设为当前时间加上延迟值。该延迟值可以被实现为静态确定或动态确定,其中动态确定基于DNS表上的域名服务器的数目、或者DNS表上具有零或非零时间戳的域名服务器的数目。
实现从DNS表中选择域名服务器的算法的计算机代码的示例性实现如下。这些算法仅仅是示例性的,并且本发明不局限于这些编码示例。
示例一名称WhichServerToUse输入ServerList输出Server to query常量ServerTimeout[ServerID],TempFile(/tmp/.current_servers)START WhichServerToUseFor each entry in TempFile
if timestamp is non-zero/*该服务器停工。检查是否是使用该服务器的时间*/if current time>=timestamp/*是向服务器查询的时间*//*改变TempFile中的时间戳,从而没有其他人将尝试相同服务器*/edit TempFile and add timestamp next to server,where,timestamp=current_time+ServerTimeout[server]return server addresselsecontinue to next server in listendifelse/*时间戳为零,服务器开工*/return server addressendifendforEND WhichServerToUse示例二名称ServerList输入ServerList输出Server to query常量ServerTimeout[ServerID],TempFile(/tmp/.current_servers)START ProcessRequestFind Server using WhichServerToUseSENDSend request to serverif no responseedit TempFile and add timestamp next to serverwhere,timestamp=current_time+ServerTimeout[server]
find next server using WhichServerToUseGoto SENDelseedit TempFile and add timestamp of ZERO next to serverreturn response from serverendifEND ProcessRequestUNIX是在美国或其他国家的、开放组的注册商标。
虽然这里公开的本发明的实施例目前被认为是优选实施例,但是在脱离本发明的精神和范围的情况下可以进行各种改变和修改。本发明的范围在所附权利要求中表示,并且意欲在这里包括在等价含义和范围之内的所有改变。
权利要求
1.一种选择域名服务器来解析域名服务器请求的方法,包括接收名称解析请求;将在域名服务器表中列出的至少一个域名服务器与时间戳相关联;以及基于时间戳而访问来自域名服务器表的域名服务器。
2.如权利要求1所述的方法,其中将在域名服务器表中列出的至少一个域名服务器与时间戳相关联包括确定域名服务器延迟条件;以及与域名服务器延迟条件相关联地更新与域名服务器相关联的时间戳。
3.如权利要求2所述的方法,还包括基于域名服务器延迟条件而将延迟值与域名服务器相关联。
4.如权利要求3所述的方法,其中更新时间戳包括用延迟值更新时间戳。
5.如权利要求2所述的方法,其中响应于域名服务器延迟条件,将时间戳设为非零值。
6.如权利要求2所述的方法,还包括基于域名服务器延迟条件而预测停工时间,其中时间戳与所预测的停工时间相关联。
7.如权利要求1所述的方法,其中访问域名服务器包括基于相关联的时间戳,绕过来自域名服务器表的至少一个域名服务器。
8.如权利要求7所述的方法,还包括基于相关联的时间戳的期满,访问被绕过的域名服务器。
9.如权利要求8所述的方法,其中响应于从包括往返时间、响应概率、至少两个域名服务器之间的往返时间的比较的组中选择的因素,估计所预测的停工时间。
10.一种计算机可用介质,包括用于选择域名服务器来解析域名服务器请求的计算机可读代码,其包括用于实现前面方法权利要求的任一方法的计算机可读代码。
11.一种用于选择域名服务器来解析域名服务器请求的系统,包括用于接收名称解析请求的装置;用于将在域名服务器表中列出的至少一个域名服务器与时间戳相关联的装置;以及用于基于时间戳而访问来自域名服务器表的域名服务器的装置。
12.如权利要求11所述的系统,还包括用于确定域名服务器延迟条件的装置;以及用于与域名服务器延迟条件相关联地更新与域名服务器相关联的时间戳的装置。
全文摘要
本发明公开一种选择域名服务器来解析名称解析请求的方法,包括接收名称解析请求,并且将在域名服务器表中列出的至少一个域名服务器与时间戳相关联。该方法还包括基于时间戳而访问来自域名服务器表的域名服务器。还公开了一种包括用于实现类似操作的装置的系统。
文档编号H04L12/28GK1956400SQ20061008245
公开日2007年5月2日 申请日期2006年5月19日 优先权日2005年10月27日
发明者拉什米·纳拉西姆哈, 尼基尔·海奇, 亚历山大·梅德维德夫 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1