[0022] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对照附图说明本发明的具体实施方式。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图,并获得其他的实施方式。
[0023] 如前所述,NAT是将私网内的设备的地址转换为公网上的地址。例如,当客户端处于NAT设备的内网时,连接到服务器上的地址实际上是NAT设备映射的地址,而不是客户端从内网的DHCP服务器获取的地址作为客户端本身的地址。当客户端与服务器通信时,NAT设备会将客户端本身的地址映射为公网上的地址(映射地址),例如,可以是NAT设备在公网上分配到的地址。客户端发出报文时,其报头的源地址是客户端本身的地址。当到达NAT设备时,报头中的源地址就被修改为前述映射后的地址。服务器接收到的报文的报头中的源地址就是该映射地址。也就是,在服务器接收到的数据报文的报头中的源地址实际上是NAT设备在建立连接时分配给客户端的映射地址,而不是客户端发出上述数据报文时写入报头的地址。
[0024] 在本说明书中,术语“私网”与“内网”的含义相同,而术语“公网”与“外网”的含义相同,均为本领域公知的术语。
[0025] 在图1示出的网络拓扑结构中,移动设备10通过网关20与服务器30连接。网关20是NAT设备,此时,移动设备10实际上处于网关20的私网中。
[0026] 同时,如图1所示,计算机40通过路由器50、网关60连接到服务器30。路由器50为NAT设备,此时计算机40处于路由器50的内网中。同时,当网关60也是NAT设备时,则路由器50的整个内网实际上也是处于网关60的内网中。这就形成了两级串联的NAT拓扑结构。
[0027] 在这种情况下,移动设备10的地址是所处的网关20的内网中的DHCP服务器分配给移动设备10的地址。DHCP服务器可以是集成在网关20上的模块,也可以是单独的服务器。
[0028] 当移动设备10与服务器30通信时,服务器30接收到的数据报文的报头中的源地址实际上是网关20的分配给移动设备10的地址,而不是移动设备10本身的地址。
[0029] 类似地,计算机40从路由器50的内网上的DHCP服务器分配到IP地址作为计算机40本身的地址。通常,路由器50本身会具有DHCP服务端的功能。也就是,路由器50会将一个IP地址分配给计算机40作为其本身的地址。而路由器50本身的地址是网关60的内网上的DHCP服务器分配给路由器50的地址。
[0030] 当计算机40与服务器30通信时,计算机40发出数据报文时,报头的源地址是计算机40本身的地址。当数据报文经过路由器50时,路由器50将报头中的源地址映射为路由器50在网关60的内网上的地址。而当数据报文经过网关60时,网关60将报头中的源地址映射为网关60在公网上的地址。当服务器30收到报文时,报头中的源地址就不是计算机40本身的地址,也不是路由器50本身的地址,而是网关60在公网上的地址。
[0031] 在上述拓扑结构中,按照本发明的通信方法,在移动设备10与服务器30之间经过网关20建立连接。为了方便描述,移动设备10本身的地址为第一地址,而服务器30收到的报文的报头中的源地址为第二地址,也就是服务器保存的移动设备10的地址。则比较第一地址与第二地址。如前所述,网关20为NAT设备时,移动设备10本身的地址(第一地址)与服务器接收到的报文中的源地址(第二地址)是不同的。反之,当第一地址与第二地址不同时,可以确定在移动设备10与服务器30的链路上存在NAT设备。
[0032] 在一个例子中,可以由移动设备10向服务器30发出请求,获取服务器上的报文的源地址,而后在移动设备10端进行所述的比较。或者,在另外的例子中,可以是服务器30向移动设备10发出请求以获取移动设备10的第一地址,并在服务器10端进行所述比较。
[0033] 类似地,在计算机40与服务器30建立连接。比较计算机40本身的地址(第一地址)与服务器30收到的报文的源地址(第二地址)。如前所述,当路由器50或者网关60为NAT设备时,所述第一地址与所述第二地址是不同的。反之,当第一地址与第二地址不同时,也可以确定在链路上存在NAT设备。
[0034] 对于客户端10与服务器30的连接,当第一地址与第二地址不同时,进一步比较网关20的地址与服务器30上的得到的第二地址。如前所述,通常情况下,NAT设备所映射的公网地址实际上就是NAT设备本身在公网上的地址。因此,当网关20的地址与服务器30上的第二地址相同时,则确定网关20与服务器30之间没有更多的NAT设备。这样,客户端10与服务器30之间可以基于UPnP协议进行通信。
[0035] 对于计算机40与服务器30的通信。当第一地址与第二地址不同时,比较路由器50的地址与服务器上的第二地址。路由器50实际上在网关60的内网,其地址是网关60的内网上的地址。路由器上的第二地址实际上是网关60在公网上的地址。因此,路由器50的地址与第二地址是不同的。反之,就可以确定,在路由器与服务器之间还存在其他NAT设备。在这个例子中,就是网关60。
[0036] 此时,计算机40与服务器30之间通过UPnP协议进行通信也不能穿透NAT设备。计算机40与服务器30之间可以通过长连接的方式进行通信。
[0037] 在一个例子中,可以是服务器将第二地址发送到计算机40,并且计算机40向路由器50请求获取路由器的地址,并且在计算机40进行比较。或者,计算机40向路由器50请求获取路由器的地址并发送给服务器30,在服务器30处比较路由器的地址与第二地址。
[0038] 在上面的描述中,本领域技术人员能够了解基于UPnP协议通信以及通过长连接的方式进行通信可以采用任何适当的方案。
[0039] 如上所述,上述的方法可适于不同的网络拓扑中完成NAT穿透。
[0040] 由此,在另一实施例中,一种通信装置,包括:第一判断单元100,其判断前述的第一地址与所述服务器上存储的第二地址是否相同;以及,第二判断单元200,其判断所述第二地址与路由器或网关的地址是否相同。
[0041] 当该第一地址与该第二地址不同时,则第一判断单元100向该第二判断单元传输指令,判断第二地址与路由器或网关的地址是否相同。
[0042] 当该第二地址与路由器或网关的地址相同时,则第二判断单元将指令发送给第一通信单元300,其构造为基于UPnP协议在移动设备或计算机与服务器之间进行通信。
[0043] 当该第二地址与路由器或网关的地址不同时,则该第二判断单元将指令发送给第二通信单元400,其构造为基于长连接方式在所述移动设备或计算机与所述服务器之间进行通信。
[0044] 进一步,该装置还包括信息获取单元500,其获取所述第一地址、第二地址和路由器或网关的地址,并将所述第一地址和第二地址发送至所述第一判断单元,以及将所述第二地址和路由器或网关的地址发送至所述第二判断单元。
[0045] 在一个例子中,该信息获取单元设在移动设备或计算机上,其通过网络协议向服务器发出请求获取第二地址,以及通过网络协议向路由器/网关发出请求获取路由器/网关的地址。该第一和第二判断单元设在移动设备或计算机上。该第一和第二通信单元可以由设在移动设备/计算机、路由器/网关以及服务器上的网络通信模块组成。
[0046] 应当说明的是,上述实施例均可根据需要自由组合。以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。