具体实施方式
尽管以下的详细说明为了说明的目的包含许多特定的细节,但是本领域普通技术人员可以理解,对于以下细节的许多变型和替换均在本发明的范围之内。因此,提出的下述本发明示例性实施例不失所要求保护的发明的一般性并且无意限制本发明。
技术背景
在涉及NAT的应用程序中,有时有益的是通过NAT所表现出的行为类型来表征NAT。STUN协议可以用于将网络地址转换表征为完全锥形NAT、受限锥形NAT、端口受限锥形NAT或者对称NAT。在完全锥形NAT的情况下,其也称作一对一NAT,将来自相同内部IP地址和端口的全部请求映射到相同的外部IP地址和端口。通过将分组发送到所映射的外部地址,外部主机能够将分组发送到内部主机。在受限锥形NAT的情况下,将来自相同内部IP地址和端口的全部请求映射到相同的外部IP地址和端口。与完全锥形NAT不同,只有内部主机已经预先将分组发送给外部主机的情况下,外部主机才能够将分组发送给内部主机。端口受限锥形NAT或者对称NAT与受限锥形NAT类似,但是限制包括端口号。具体而言,只有在内部主机先前已经将分组从内部主机上的特定端口发送到外部主机,外部主机才可以将分组发送到该特定端口。在对称NAT的情况下,将从相同内部IP地址和端口到特定目的地IP地址和端口的全部请求映射到唯一的外部源IP地址和端口。如果相同的内部主机将具有相同源地址和端口的分组发送到不同的目的地,则使用不同的映射。只有接收分组的外部主机能够将通用数据报协议(UDP)分组发送回内部主机。
上述分类的用处已经变得不那么大,因为在许多NAT实施方案中,NAT的行为可以在各种类型之间振荡。例如,许多NAT实施方案可以遵循端口保留设计。对于大多数通信而言,该NAT实施方案使用相同的值作为内部和外部端口号。然而,如果两个内部主机试图使用相同的端口号与相同的外部主机通信,则可以随机选择第二主机使用的外部端口号。有时可以将该NAT视作受限锥形NAT,并且其它时间可以视作对称NAT。
有时将NAT发现和NAT行为确定称作NAT穿透。例如,美国公开专利申请20070076729中描述了NAT穿透的实例,其全文引入作为参考。NAT行为发现可能是耗时的操作。例如,可以利用称作STUN的协议实现NAT发现。例如,IETF RFC 3489中描述了STUN协议的细节,其全文引入作为参考。在STUN协议中,将多个消息发送到中央NAT发现服务器(称作STUN服务器)并且接收该消息以建立NAT行为类型。由于NAT的过滤行为一些消息事务不得不等待超时(每次事务通常约为10秒)。在存在不可靠的通信信道的情况下,还可能重复发送消息。能够避免全部或部分这种操作的应用程序可以更快地开始。
协同NAT行为发现
在本发明的实施例中,本地网上的节点可以共享有关所发现的NAT行为以及该本地物理网络拓扑的其它方面的信息。此外,这些节点可以主动地协同以进一步确定NAT行为,而非被动地共享独立发现的NAT行为。如上所述,因为NAT发现可能耗时,因此这是十分重要的。此外,当尝试使用在被多于一个应用程序使用时具有变化行为的NAT设备时,会出现不小的问题。例如当针对特定本地端口配置静态端口映射时这会发生。
根据本发明的实施例,多个节点可以在相同NAT之后。节点之一可以通过常规的NAT发现和/或NAT穿透发现NAT的行为。该节点可以与相同NAT之后的其它节点共享NAT穿透信息。这可以使该NAT之后的其它节点不必花费时间执行NAT发现。可以将NAT信息存储在NAT之后的全部节点可以在它们正常尝试NAT发现之前访问的中央位置。
例如,图1表示了一种网络拓扑,其示出了根据本发明实施例的协同NAT行为发现。一般而言,局域网(LAN)101可以包括两个或更多个节点,例如节点A 102和节点B 104,它们可以与路由器108连接。路由器108与诸如因特网的广域网(WAN)106连接。路由器108可以具有与其相关的网络地址转换器(NAT)。对于节点102、104而言,在本发明实施例的范围内存在许多可能的配置。一般,节点可以配置为利用网际协议(IP)在网络上实现通信。节点A 102和节点B 104可以是IP使能的设备或者在不同设备或者相同设备上运行的IP使能的应用程序。本文中,术语IP使能的表示设备利用IP来与其它主机或者设备通信。例如、但无意限制,IP使能的设备或者应用程序可以包括网际协议堆栈或者类似的网络协议堆栈,以利用IP与其它主机或者设备通信。尽管图1为了示例起见示出了两个节点,但是本领域技术人员可以认识到,也可以以多于两个节点实现本发明实施例。
注意,本发明的实施例可以包含任何数量的节点。例如,节点A 102和节点B 104可以是任何能够联网(network capable)的设备或者在所述设备上运行的能够联网的应用程序。这样的节点包括但不限于计算机、手持互联网浏览器和/或电子邮件设备、IP话音(VoIP)电话、视频游戏控制台、手持视频游戏设备等。消息可以经由路由器108从一个节点传送到另一个节点。可以在路由器108上以硬件、软件、固件或者这些形式中两种或更多种的组合来实现NAT。
节点A 102、节点B 104和路由器108可以配置为根据网络协议彼此通信。例如,节点A 102和节点B 104可以配置(以软件或硬件或者两者的某种组合)有具有五层的网络协议堆栈103:应用层APP、传输层TRANS、网络层NET(有时称作IP层)、数据链路层DLL以及物理层PHYS。这些层对于本领域技术人员而言是公知的。节点102、104通常实现全部五个层。路由器108可以包括仅实现网络层NET、数据链路层DLL和物理层PHYS的协议堆栈105。在一些实施例中,一个或多个路由器可以包括全部五个协议堆栈层。这种路由器的一个示例是防火墙,其支持检查应用层数据的“应用层网关”。然而,所示的路由器108中协议堆栈105的配置相对而言更为常见。
应用层APP表示应用程序访问网络服务的级别。该层表示直接支持诸如文件传输、数据库访问以及电子邮件软件之类的应用程序的服务。应用层软件的示例包括HL7、Modbus、会话启动协议(SIP)以及简单传感器接口协议(SSI)。在TCP/IP套件的特定情况下,可以利用软件协议来实现应用层APP,例如超文本传输协议(HTTP)、会话启动协议(SIP)、简单邮件传输协议(SMTP)、短消息对等协议(SMPP)、简单网络管理协议(SNMP)、文件传输协议(FTP)、电传网络(TELNET)、网络文件系统(NFS)、网络时间协议(NTP)、实时传送协议(RTP)、动态主机配置协议(DHCP)以及域名系统(DNS)。例如在开放系统接口(OSI)协议中,应用层APP有时可以进一步分成表示层和会话层。表示层将来自应用层的数据转换成中间格式。该表示层还可以通过提供诸如数据加密的服务来管理安全问题,并且压缩数据使得在网络上需要传送的比特变少。会话层允许不同计算机上的两个应用程序建立、使用和终止会话。会话层可以在会话中的两个计算机之间建立对话控制,从而调整哪侧发送以及其何时发送以及发送多长时间。
传输层TRANS服务于来自应用层APP的请求,并且将服务请求发布到网络层NET。在一些协议中,传输层TRANS还可以处理错误识别和恢复。对于发送主机而言,在必要时传输层还可以将长消息重新打包成小分组以供发送。对于接收主机而言,传输层将分组重建成原始消息。接收主机的传输层还可以发送接收确认。特定传输层协议的示例包括传输控制协议(TCP)、用户数据报协议(UDP)以及流控制传输协议(SCTP),所有这些协议及其等价物均是本领域技术人员公知的。传输层TRANS是通常支持分组分割的层。注意,分割可能发生在产生消息的主机的传输层中或者沿着该主机与消息的预期接收者之间路径的任何路由器的传输层处。并不是所有的传输层实施方案都需要处理错误识别和恢复。例如,TCP处理错误识别和恢复,但UDP并不是这样。
网络层NET寻址消息并且将逻辑地址和名称转换成物理地址。其还确定从源到目的地计算机的路由。网络层还可以管理业务问题,例如切换、路由以及控制数据分组的拥塞问题。特定网络层协议的示例包括但不限于网际协议(IP)、互联网控制消息协议(ICMP)、IP安全(Ipsec)、地址解析协议(ARP)、路由信息协议(RIP)和开放最短路径优先(OSPF),所有这些协议及其等价物对于本领域技术人员而言是公知的。
数据链路层DLL将来自物理层PHYS的原始比特打包成帧(数据的逻辑结构分组)。该数据链路层还可以负责将这些帧从一台计算机转移到另一台计算机,而不会出错。在发送了一个帧之后,该数据链路层DLL等待来自接收计算机的确认。特定数据链路层协议的示例包括但不限于点对点协议(PPP)、串行线路网际协议(SLIP)和介质访问控制(MAC),所有这些协议及其等价物对于本领域技术人员来讲是公知的。数据链路层DLL通常限制了MTU大小。
物理层PHYS将比特从一台计算机发送到另一台计算机,并且调整比特流在物理介质上的传送。该层限定了电缆如何附接到网络适配器以及采用什么传输技术在电缆上发送数据。特定物理层协议和标准的示例包括但不限于RS-232、V.35、V.34、I.430、I.431、T1、E1、10BASE-T、100BASE-TX、POTS、SONET、DSL、802.11a、802.11b、802.11g、802.11n,所有这些协议和标准及其等价物对于本领域技术人员而言是公知的。
在节点A 102处产生的消息始于应用层APP并且逐渐地沿着协议堆栈向下到达物理层PHYS。当消息到达主机2104时,其在物理层PHYS被接收,并且逐渐地沿着堆栈向上到达应用层APP。在两个节点102、104之间的路径中,该消息可以在路由器108的物理层PHYS被接收,并且逐渐向上到达传输层TRANS,然后又沿着堆栈反向向下到达物理层PHYS,从而传输到路由器108。可以对沿着节点A 102与节点B 104之间路径的任何其它路由器(未示出)重复该过程。在对等情况下,一旦节点A 102与节点B 104之间已经建立了连接,则它们可以在例如应用层APP或者传输层TRANS直接通过对等连接通信。
如上所述,路由器108可以包括网络地址转换器。然而,对于本发明全部实施例而言这不是必须的。如果路由器108包括NAT,则节点A102和节点B 104不得不穿透该NAT,以便建立相互之间的、与LAN 101中连接的其它节点的或者与连接到WAN 106的其它节点的对等连接。为了促进NAT穿透,节点A 102和节点B 104可以获得并共享有关NAT的信息110。有多种获得并共享信息110的方法。例如并不失一般性,节点A 102和节点B 104可以通过对NAT穿透的单独尝试获得信息110。所述对NAT穿透的尝试可以包括使用STUN服务器112。可选的是,节点A 102和节点B 104可以从连接到LAN 101的其它节点获得信息110。
可以通过多种不同方式中的任意一种来共享信息110。例如,节点A 102和节点B 104可以本地地将该信息存储在例如缓存或者其它存储位置中。如果节点A 102和节点B 104是分开的设备或者分开的设备上的应用程序,则本地地存储信息尤其可以包括将信息存储在每个相应设备的特定存储位置。如果节点A和节点B是相同设备上的不同应用程序,则本地地存储信息尤其可以包括将信息存储在与该设备相关的特定存储位置。如果本地地存储信息110,则节点A和节点B可以在其各自尝试NAT穿透之前直接询问彼此,以获得信息110。在可选实施例中,可以将信息110存储在节点A 102和节点B 104通常均可访问的存储位置。该通常可访问的存储位置可以在与LAN 101或者WAN 106相连的另一个节点或者设备上。例如,该通常可访问存储位置可以是与WAN 106相连的公共数据库服务器114。在一些实施例中,可以由路由器108获得该信息110并将其存储在该路由器108中。这可能需要路由器108处的特殊实施方案。
例如,该信息110可以包括对于该路由器的唯一地址,例如全球唯一地址,如介质访问控制(MAC)地址或者内部IP地址。本文中使用的是MAC地址,也称作硬件地址或者适配器地址,其是附于大多数网络适配器的准唯一标识符。MAC地址通常是一个数字,其起到特定网络适配器名称的作用。因此,例如两个不同计算机中的网卡(或者内置式网络适配器)可以具有不同的名称或者MAC地址,如相同计算机中的以太网适配器和无线适配器那样,并且如路由器中的多个网卡那样。可以根据适当的协议,例如MAC-48、EUI-48以及EUI-64来分配设计为全球唯一的MAC地址。
此外,信息110可以包括有关路由器108所呈现的NAT行为(如果有的话)类型和/或路由器上的端口是否正在被连接到LAN 101的设备使用的信息。
可共享的其它NAT行为信息的示例包括但不限于:(i)经由NAT的有效会话的数目;或者(ii)NAT上的集合的业务负载。此外,信息110可以包括实现相对于对称NAT的端口预测的原子态的标志的值。该标志可以指示用于端口预测的特定原子是否被锁定。原子锁有时用于对称NAT穿透中的端口预测。锁定是有用的,因为如果在预测阶段期间,相同NAT下的其它节点生成另一个NAT绑定,则端口预测会失效。
根据本发明的实施例,节点A 102和节点B 104可以通过任何常规技术实现NAT发现,其可以以硬件、软件、固件或者三者中的两种或更多种的某种组合来实现。例如,图2A表示了一种类型的NAT发现。如图2A所示,节点A 102在启动202时可以向STUN服务器112发送对于NAT信息的请求204,该服务器112可以发回响应206。该响应206可以包括有关节点A 102之前的NAT类型的信息。随后,节点B 104在启动208时可以类似地发送请求210以及接收响应212。注意,响应206、212每个可以包括有关NAT行为的相同或类似信息,特别是在节点A 102和节点B 104位于相同NAT之后的情况下。然而,根据路由器108中NAT的性质,NAT行为可以随时间改变。本发明的实施例允许共享NAT行为信息,这样能够促进NAT穿透。
例如,如图2B所示,节点A 102和节点B 104可以如下所述共享NAT信息110。如图2A所示,节点A 102在启动202时可以向STUN服务器112发送对于NAT信息的请求204,该服务器112可以发回响应206。该响应206可以包括有关节点A 102之前的NAT类型的信息110。该信息110可以被本地存储在节点A 102处。随后,节点B 104在启动208时可以向路由器108之后的一个或多个其它节点发送请求209。例如,如图2B所示,节点B 104可以向节点A 102发送请求209。注意,可以将请求209广播给路由器108之后的所有其它节点,这是因为节点B 104可能不知道这些节点中的哪一个具有有关路由器的NAT行为的信息。接收到该请求209的任意节点可以用NAT行为信息回应。在本示例中,节点A 102之前已经获得了信息110。因此,节点A 102可以向节点B 104发送包含信息110或者该信息的某个有用子集的响应211。如果其它节点均未对请求209作出响应,则节点B 104可以例如通过向STUN服务器212发送请求210以及接收响应212来退回到常规的NAT发现。可以将从该响应获得的信息存储在本地,并且可以在请求时供其它节点使用。
还要注意,两个或更多个节点可以协同工作以确定路由器108的行为。例如,如图2C所示,节点A 102在启动202时可以向STUN服务器112发送对于NAT信息的请求204。该STUN服务器112可以发回包含NAT行为信息110的响应206,然后将该响应本地存储在节点A 102。NAT行为信息110可能是不完整的,例如其可能将NAT行为限制为具有不只一种可能的类型。随后,节点B 104在启动208时可以向路由器108之后的一个或多个其它节点(包括节点A 102)发送请求209。作为对请求209的答复,节点A102可以发送部分响应213。该部分响应213可以包括节点A 102能够获得的信息。部分响应213还可以指示需要哪些附加信息来表征路由器108的NAT行为。然后,节点B 104可以向STUN服务器112发送请求210并且作为答复接收响应212。该响应212可以提供表征路由器108的NAT行为所需的丢失信息。然后,节点B 104可以例如通过向节点A 102和/或路由器108之后的任何其它节点发送更新响应214来共享该信息。
注意,在图2C所示的示例中,部分响应和更新响应对的过程可以继续,直到完全确定了NAT行为的细节为止。如果路由器108为具有非确定行为的多个请求分配外部绑定,则这是非常有用的。
共享信息110对于改善NAT行为确定的效果是很明显的。通常,对于STUN服务器112的请求以及来自该服务器的响应可能受到与LAN101和WAN 106相关的延时(latency)的影响。LAN 101上从一个节点到另一个节点的请求通常仅受到与LAN 101相关的延时的影响。WAN延时一般比LAN延时大得多。例如,在理论WAN延时约为100毫秒并且LAN延时小于约1毫秒的情况下,在LAN 101上的各个节点之间共享NAT行为信息110可以将NAT行为确定阶段提高超过100倍。
此外,LAN 101上的节点在每个节点已经自己独立确定了NAT行为类型之后可以协同地共享NAT信息。在这种情况下,节点之间有关所确定的行为的传言可以识别出具有不适合的本地端口保留行为的路由器,这样可以有效地将路由器108从端口受限的变为对称行为。信息110的共享可用于诊断路由器108行为的变化。信息110的共享还可用于与不适合的本地端口保留相关的先验应急方案(workaround)NAT问题。例如,路由器108之后的多个节点可以向彼此广播它们希望使用路由器108上的哪些本地端口。如果另一个节点(例如节点B 104)已经在使用选定的端口,则给定的节点(例如节点A 102)可以改变选定的端口。此外,节点可以传播有关LAN 101的本地网络环境的其它不曾预料到的行为变化。例如,住宅NAT通常具有一个由ISP(因特网服务供应商,例如Comcast)使用称为DHCP的协议动态分配的全局IP地址。所分配的NAT的动态IP会过期,并且ISP可以分配另一个IP地址。如果是这样,则本地节点需要花费一些时间来探测这种事件。如果一个节点探测到这种事件,则其可以使用广播通知其它节点所述事件。
在图2B-2C所示的实施例中,将与NAT有关的信息110本地存储在路由器108之后的每个节点处。在其它实施例中,可以将信息110存储在路由器108之后的所有节点均可访问的某个公共位置。如上所述,所述公共位置可以是公共数据库服务器114或者与WAN 106相连的类似节点。可以使用例如超文本传输协议(HTTP)的适当协议来访问该公共数据库服务器114。
可选的是,该公共位置可以是构成LAN 101一部分的节点。例如,如图2D所示,可以将信息110存储在路由器108处。在本示例中,例如节点A 102的节点在例如启动202时可以向路由器108发送NAT信息请求205。该路由器108例如通过适当编程可以配置为向STUN服务器112发送请求204,并且作为答复接收响应206。然后,路由器108可以基于该响应206向节点A 102转发应答215。路由器108可以任选地根据响应206确定NAT行为信息110,并且将该信息存储在例如可被路由器108本地访问的存储器中。该应答215可以包括从响应206获得的NAT行为信息110。可选的是,该应答215可以包括向节点A 102转发响应206。当不同的节点随后请求NAT行为信息时,路由器108可以使用所存储的信息110直接作出响应。例如,在启动208时,节点B 104可以向路由器108发送NAT行为信息请求216。作为响应,路由器108可以基于所存储的NAT行为信息110发送应答218。
在图2D所示的示例中,已经假设了路由器108的地址对于其后的所有节点都是已知的。在这种情况下无需广播请求205、216和应答215、218。此外,在图2D所示的示例中,在每个节点与路由器108之间仅发送一个往返消息。作为对比,在常规情况下,每个节点与NAT STUN服务器对话,这通常需要多个往返消息。此外,路由器108可以任选地利用NAT STUN服务器112以懒惰方式执行行为确定,即只有在客户端对其发出请求时才进行。如果路由器的NAT行为是确定的,则这也可能出现在路由器108的初始化时。在NAT设备具有完全确定的行为的情况下,可以省略与NAT STUN服务器112的通信,这是因为路由器行为是已知的,并且可以直接传送到路由器108之后的节点。
上述的方法不仅仅是表面上类似于通用即插即用(UPnP)网关协议。本发明的实施例与UPnP存在多个方面的不同。最显著的是,当将UPnP设备添加到LAN时,该UpnP设备向LAN上的控制点宣传其服务。作为对比,在本发明的实施例中,LAN上的节点找到有关控制点(路由器上的NAT)的信息,并且使该信息可用于其它设备。
此外,缺乏对NAT行为的真正标准化使得现有的UpnP机制并不完全切实可行。特别是,UPnP主要仅由住宅路由器支持,而不是由其它更大规模的路由器支持。例如,提供从房间的因特网访问服务的酒店中的路由器通常不支持UPnP。另一个UPnP无法工作的情况是某些ISP可以为提供某些服务(例如热点(HOT SPOT)服务)的路由器提供私有地址。在这种情况下,节点获得的外部地址是最接近的UPnP NAT的私有地址。该节点仍然需要使用STUN服务器来获得可在因特网上路由的实际全局地址。此外,许多现有的路由器不支持UPnP,或者对于许多支持UPnP的路由器而言无法接通UPnP。
在本发明的可选实施例中,在本地网络101上的设备上运行的单一应用程序可以代表其它应用程序执行许多、但并非全部的这些操作。运行该应用程序的设备在本文中称为NAT代理。如果NAT代理仅在一个设备上运行,则可能无法确定某些与不同内部IP地址的绑定有关的NAT问题。可以通过在两个设备上运行该应用程序的至少两个实例来克服这个问题,尽管这样做会丧失许多使用上的便利。
参照图3A和3B可以理解利用NAT代理的实施例。如图3A所示,本地网络101可以包括与节点A 102相关的第一NAT代理116以及与节点B 104相关的第二NAT代理118。NAT代理116、118可以耦合到路由器108。NAT代理可以不时询问STUN服务器112,以便获得NAT行为信息110,并且与节点A 102、节点B 104以及路由器108之后的其它节点共享该信息110。例如,如图3B所示,第一NAT代理116可以向STUN服务器112发送请求204,并且作为答复接收响应206。类似的是,第二NAT代理118可以向STUN服务器112发送请求224,并且作为答复接收响应226。NAT代理116、118可以全部或者部分地从响应206、226导出NAT行为信息110。在已经导出信息110之后,与路由器108相连的节点之一可以询问NAT代理116、118NAT行为信息110。例如,节点A 102可以向NAT代理116、118广播请求228,它们可以分别发送响应230、232作为答复。
可以使NAT代理应用程序位于与请求应用程序相同的物理设备节点上。节点仅需要从任意NAT代理接收一个响应。在仅有一个代理负责在本地网络中发送响应的情况下,NAT代理可以以分级方式运行。这样做的不好的副作用是在否则冗余的网络配置内产生单一故障点。此外,可以将参照图3A和图3B所述的NAT代理技术与以上参照图2C所述的部分响应/更新响应技术组合起来,以实现对代理节点之间NAT行为类型的协同全面理解。
在前面的讨论中,已经假设了每个节点位于单一NAT之后。在某些网络配置中,节点也可以位于多于一个NAT之后。可以更改本发明的实施例以解决给定节点位于多于一个NAT之后的情况。例如,如图4所示,节点A 102和节点B 104均位于NAT 1之后。然而,节点B 102还位于NAT 2到NAT N之后。在本示例中,NAT 1可以是局域网101与广域网106之间的网关路由器的一部分。有关NAT 1存在和行为的信息可以用于节点A 102和节点B 104,以与WAN 106通信。此外,有关NAT 1和NAT 2到NAT N的信息可用于节点A 102和节点B 104相互通信的情况。
例如,节点102、104、120可以通过使用数据报报头内的字段来确定它们之前有多少个NAT,该字段的值在通往该数据报目的地的路径中遇到的每个NAT设备处都减少。例如,该字段可以是生存时间(TTL)字段。在Ipv 4中,TTL是指网际协议(IP)报头中的8比特字段。其为20个中的第9个八位位组。生存时间值可以视为IP数据报在互联网系统中能够存在的时间的上限。TTL字段可以由数据报的发送器来设定,并且被通往其目的地的路径上的每个主机减少。如果在数据报到达其目的地之前TTL字段达到零,则抛弃该数据报并且将互联网控制消息协议(ICMP)错误数据报(11-超时)发回发送器。常规上,该TTL字段用于避免无法送达的数据报不断在互联网系统中循环并且最终使该系统受不了大量的这种“永存”数据报的情况。理论上,生存时间可以以秒来测量,尽管传递数据报的每个主机必须将TTL减少至少一个单位。实际上,TTL字段每一跳都减少1。为了反映这种实际情况,在IPv6中将该字段命名为跳数限制。ICMP错误数据报识别超时之前该数据报到达的最后主机。称作跟踪路由(traceroute)的工具使用该ICMP错误消息来探测到达远端节点的路径。可以将TTL或者跳数限制字段用于以类似于跟踪路由命令中所使用的方式来确定节点A 102与节点B 104之间的NAT地址。
在本发明的实施例中,节点A 102和节点B 104及其它节点120可以共享与NAT 1以及NAT 2到NAT N的行为相关的信息110。节点102、104、120可以获得例如以上参照图2A-2D所述的NAT信息110,并且按照可供LAN 101上的所有节点访问的方式存储该信息。例如,可以将信息110缓存在服务器112上,例如公共数据库服务器或者STUN服务器。例如,该服务器112可以位于LAN 101与WAN 106之间。还要注意,主控(host)NAT 1和NAT 2到NAT N的设备还可以收集有关其自身的信息,并且将其与节点102、104、120共享。
本发明的实施例可以用于以无线节点实现NAT行为发现。例如,如图5所示,无线网络500可以包括第一、第二和第三无线接入点WAP1、WAP2和WAP3,它们处于地理上分布的位置。可以利用例如无线路由器来实现该无线接入点WAP1、WAP2和WAP3,它们可以分别包括网络地址转换器NAT1、NAT2和NAT3。可由相应的覆盖区域502、504、505来表征无线接入点WAP1、WAP2和WAP3。如果无线节点507位于覆盖区域之一内,则其可以访问网络501。例如,无线节点507可以是配置用于无线网络通信的任意设备。这种设备的示例包括但不限于笔记本计算机、便携视频游戏设备、便携音乐下载设备、便携IP话音(VoIP)设备以及便携因特网浏览器或者电子邮件设备,例如
是加拿大安大略沃特卢的Research in Motion LTD的注册商标。此外,这种设备包括包含两种或更多种功能的无线设备,例如VoIP、互联网、电子邮件和音乐下载。这种设备的示例是加利福尼亚库柏蒂诺的Apple Inc.生产的iPhone。
无线接入点WAP1、WAP2、WAP3可以通过路由器508与广域网506连接。此外,在路由器508与无线接入点WAP1、WAP2、WAP3之间分别连接有其它节点A、B、C。可以将有关网络地址转换器NAT1、NAT2、NAT3的信息510存储在耦合到路由器508的中央可访问缓存512处。有多种不同方式来获得并缓存该信息510。例如,无线节点507可以通过常规的NAT穿透收集部分信息510,并且将其与如图2B或2C所示的其它节点共享。此外,路由器508或者无线接入点WAP1、WAP2、WAP3可以如上参照图2D所述获得信息510。此外,其它节点A、B、C可以通过如上参照图3A和图3B所述作为代理节点来获得全部或者部分信息。此外,尽管所示的信息存储在单一位置512,但是可选的是可以将信息510分布在与网络501相连的节点上。在一些实施例中,可以将与无线网络地址转换器NAT1、NAT2、NAT3相关的信息本地存储在相应的无线接入点WAP1、WAP2、WAP3处。注意,信息510可以包括每个NAT或者无线接入点的地理位置。信息510还可以包括与NAT或者无线接入点相关的其它一般信息。该信息可以包括但不限于涉及本地餐馆、天气、与网络501相连的其它设备的标识、已经访问特定无线接入点的次数的信息以及其它一般信息。无线设备可以在通过任意无线接入点WAP1、WAP2、WAP3访问该网络510时访问该信息。
通过共享该信息510,可以增强该无线网络501上的服务质量。例如,无线节点507可以从一个覆盖区域移动到另一个覆盖区域,例如从第一无线接入点WAP1的覆盖区域502移动到第二无线接入点WAP2的覆盖区域504。可以组织该信息510,使得无线设备507能够请求相邻无线接入点,例如第二无线接入点WAP2的NAT信息。在一些实施例中,可以对设备507编程以根据例如GPS数据或者无线信号强度来确定无线设备行进的大致方向,并且使用该方向来估计该设备更可能遇到哪个无线接入点。
本发明的实施例还适用于NAT移动的情况。例如,可以将无线接入点WAP1、WAP2、WAP3安装在车辆上。无线节点507可以根据例如地理信息确定NAT是否是移动的。例如,无线节点507可以包括地理位置系统,例如全球定位卫星系统(GPSS)接收器。使用该系统,节点507可以在其遇到NAT时定位自己的位置。如果在节点507处于足够远离的两个不同位置时遇到相同的NAT,则该节点可以推断出NAT已经移动。
如上所述,存在可以结合本发明实施例使用的多种不同的节点配置。例如并不失一般性,图6是示出适于实现根据本发明实施例的NAT行为发现的节点600的部件的框图。例如并不失一般性,节点600可以实现为适于实现本发明实施例的计算机系统,例如个人计算机、视频游戏控制台、个人数字助理、无线设备或者其它数字设备。在一些实施例中,节点600可以是路由器。节点600可以包括配置为运行软件应用程序以及任选地运行操作系统的中央处理单元(CPU)601。CPU 601可以包括一个或更多个处理核。例如但并非限制,CPU 601可以是并行处理器模块,例如单元处理器。例如国际商业机器公司(International BusinessMachines Corporation)、索尼计算机娱乐公司(Sony ComputerEntertainment Incorporated)、东芝公司(Toshiba Corporation)享有版权的2005年8月8日发表的“Cell Broadband Engine Architecture”中详细描述了单元处理器体系结构的示例,在http://cell.scei.co.jp/可以下载到该文章的副本,该文章的全部内容在本文中引入作为参考。
在节点600中,存储器602可以耦合到CPU 601。存储器602可以存储供CPU 601使用的应用程序和数据。存储器602可以是集成电路形式,例如RAM、DRAM、ROM等。计算机程序603可以以能够在处理器601上执行的指令的形式存储在存储器602中。程序603的指令可以配置为尤其实施例如如上所述的NAT行为发现。特别是,程序603可以是在执行时使得节点600确定有关一个或多个NAT行为的信息并且以使该信息可被节点600或者一个或多个其它节点检索的方式存储该信息。此外,程序603可以配置为检索有关由一个或多个其它节点获得的一个或多个NAT行为的信息,并且使用该信息穿透一个或多个NAT。
存储器602可以包含由程序603生成或者可被程序603使用的数据。特别是,存储器602可以包含与一个或多个NAT相关的信息610。具体讲,信息610可以包括但不限于(i)NAT行为信息(例如,NAT是完全锥形、受限锥形、端口受限型的还是对称的),包括NAT行为是否包括端口保留;(ii)可用STUN服务器地址;以及(iii)公共数据库地址。可以将信息610存储在存储器602的能够被其它节点访问的扇区中。
节点600还可以包括为应用程序和数据提供非易失性存储的存储设备615。例如,存储设备615可以是固定盘驱动器、可移动磁盘驱动器、闪存设备、磁带驱动器、CD-ROM、DVD-ROM、蓝光、HD-DVD、UMD或者其它光学存储设备。节点600还可以包括常用于计算系统的公知支持功能620。所述支持功能可以包括诸如输入/输出(I/O)元件621、电源(P/S)622、时钟(CLK)623以及缓存624的特征。
可以将一个或多个用户输入设备625用于将用户输入从一个或多个用户传送到节点600。例如,用户输入设备625中的一个或多个可以通过I/O元件621耦合到节点600。适当输入设备620的示例包括键盘、鼠标、操纵杆、触摸垫、触摸屏、光笔、静止或视频照相机和/或麦克风。在A/V聊天的特定情况下,希望用户接口设备625包括照相机和麦克风。
网络接口626允许节点600通过电子通信网络627与其它计算机系统通信。例如,网络627可以是广域网,并且节点600可以在局域网上。该节点可以通过路由器608与网络627对接,该路由器608可以包括网络地址转换器NAT。在一些实施例中,节点600本身可以是例如以上参照图2D所述的路由器。网络接口626可以包括在局域网和广域网(如因特网)上的有线或无线通信。节点600可以在网络627上通过一个或多个消息分组628来发送和接收文件请求和/或数据。例如,网络接口626可以包括网卡、网络适配器或者网络接口卡(NIC),如以太网卡,或者是其一部分。网络接口626可以包括设计为允许节点600在网络627上通信的计算机硬件。网络接口626可以例如通过使用MAC地址提供对连网介质的物理访问并且提供低级寻址系统。因此,相对于网际协议堆栈,可以将网络接口626视为物理层设备以及数据链路层设备。
节点600还可以包括图形子系统630,其可以包括图形处理单元(GPU)635和图形存储器640。该图形存储器640可以包括用于存储输出图像的每个像素的像素数据的显示存储器(例如帧缓冲器)。该图形存储器640可以集成在与GPU 635相同的设备中、作为独立设备与GPU 635相连和/或在存储器602内实现。可以将像素数据从CPU 601直接提供给图形存储器640。可选的是,CPU 601可以向GPU 635提供限定希望的输出图像的数据和/或指令,根据该数据和/或指令,GPU 635可以生成一个或多个输出图像的像素数据。可以将限定该希望输出图像的数据和/或指令存储在存储器602和/或图形存储器640中。在实施例中,GPU 635可以配置(例如通过适当的编程或者硬件配置)有3D渲染(render)能力,以根据限定某个场景的几何图形、照明、遮光、纹理、运动和/或照相机参数的指令和数据来生成输出图像的像素数据。该GPU635还可以包括能够执行着色器程序(shader program)的一个或多个可编程执行单元。
图形子系统630可以周期性地从图形存储器640输出图像的像素数据以显示在显示设备650上。该显示设备650可以是能够响应于来自计算机系统600的信号显示视觉信息的任意设备,包括CRT、LCD、等离子和OLED显示器。节点600可以向显示设备650提供模拟或者数字信号。例如,显示器650可以包括显示文本、数字、图形符号或者图像的阴极射线管(CRT)或者平板屏幕。此外,节点600可以包括产生可听或以其他方式可探测的声音的一个或多个音频扬声器652。为了促进这种声音的产生,节点600还可以包括适于根据CPU 601、存储器602和/或存储设备615提供的指令和/或数据生成模拟或者数字音频输出的音频处理器655。在诸如A/V聊天或者IP话音(VoIP)的应用程序的特定情况下,有时希望节点600包括图形显示设备650和音频扬声器652。
节点600的各个部件,包括CPU 601、存储器602、支持功能620、数据存储设备615、用户输入设备625、网络接口626、图形子系统630、扬声器652和音频处理器655可以通过一个或多个数据总线660可操作地彼此连接。这些部件可以以硬件、软件、固件或者上述两种或更多种的某种组合实现。
本发明的实施例可以解决与NAT设备(执行网络地址转换的路由器)相关的网络部署中的关键问题。具有完全指定行为的路由器可用于以集中的方式实现NAT行为信息发现和分布。如果在所述路由器处无法完全收集各个应用程序的状态,则某些功能可能丢失。然而,对该机构的补充可以计及该缺陷,然而可能随之而来的是成本的增加。
在另外不同的本发明实施例中,公共NAT之后的对等网络节点可以协作以通过分散的方式更好地解决NAT穿透问题。现有解决方案不能解决随着变化的NAT设备行为所发生的全部问题,包括本地网络上多节点的协作。
尽管以上是对本发明优选实施例的完整说明,但是可以利用各种可选方式、修改和等价物。因此,不应参照以上说明书来确定本发明的范围,而是应当参照所附权利要求书及其全部等价物范围来确定。本文中所述的无论是否是优选的任何特征,均可以与本文中所述的无论是否是优选的任何其它特征组合。在以下的权利要求书中,不定冠词“一”除非明确指明均是指冠词之后的项的一个或多个的量。在以下的权利要求书中,表达方式第一和第二用于区分不同元件而非意味着任何特定的顺序或次序。所附权利要求书不应解释为包含装置加功能限定,除非在使用短语“用于......的装置”的特定权利要求中明确引用了这种限定。