允许数据传输穿越防火墙的方法和设备 相关申请
本申请要求享有2001年2月20日在先提交的美国临时专利申请60/269,357,该申请的名称是“允许实时媒体传输穿越计算机网络上的防火墙的方法和设备”(METHOD AND APPARATUS TOPERMIT REAL-TIME MEDIA DELIVERY TO TRAVERSEFIREWALLS ON A COMPUTER NETWORK)。
【技术领域】
本发明涉及经由计算机网络的数据传输的领域,尤其涉及那些允许使用基于分组的传输协议的数据传输穿越防火墙的方法。
背景技术
连接到类似互联网这种广域网的计算机通常会受到防火墙的保护。防火墙通常用于保护工作在局域网上的计算机,但是它们还可用于保护那些接入广域网的个体计算机,其中包括服务器。在本申请中,术语“客户计算机”包括任何一种接入广域网的计算机,并且还包括一个在这种计算机上运行的程序。这种计算机可以而不是必须工作在一个局域网上,并且该计算机可以执行广域网上的服务器的功能。
防火墙通常执行许多功能。它们使内部计算机免受广域网上外部计算机的攻击,同时允许内部计算机接入广域网。通过允许多个客户计算机共享广域网上一个受限的网际协议(IP)地址,并且通过调节局部网络内部变化而不必对广域网上其它计算机的接入进行重新配置,防火墙还可使局部网络的管理更为有效。
防火墙通常是网络网关服务器上的一个程序或是相关程序的集合,它对每个网络分组进行检查,以便确定是否将其转发到其目的地。为了在内部计算机与外部广域网之间创建一个阻挡层,防火墙通常会使用NAT(网络地址转换)或NAPT(网络地址及端口转换)。NAT是客户计算机使用的(如果客户计算机工作在一个内部网络上,则是内部网络已知地)内部IP地址到外部广域网已知的不同IP地址的转换。防火墙把内部IP地址映射到一个或多个全球的外部IP地址,并且把涉及输入分组的外部IP地址反向映射为内部IP地址。NAPT则是内部IP地址及内部端口到外部网络已知的不同外部IP地址和外部端口的转换。使用NAPT的防火墙通常对输入分组进行筛选,以确保它们来自先前识别的IP地址和端口。也就是说,只有在预先有一个请求从防火墙离开并到达某个IP地址和端口的时候,来自这个IP地址和端口的请求才会穿越防火墙。
经由互联网的数据传输已经成为一件非常平常的事情。很多互联网数据传输被用于把音频和/或视频数据从一个实况播送或者基于点播的流媒体服务器传送到流媒体客户机,以便在客户计算机之间提供实时的交互式通信(例如“聊天”)以及将网页内容从网络服务器传送到网络客户机,此外还可用于网络程序之间许多其他类型的通信。不同的协议被用于发送不同类型的数据。举例来说,文本聊天通常是使用传输控制协议(TCP)来进行发送的,而音频/视频会议以及实况播送的音频/视频流则通常使用UDP(用户数据报协议)来进行发送的。经由直接与互联网相连的服务器(也就是不在防火墙之后)而进行的通信通常不会受到客户端防火墙的阻碍;登录到服务器上的操作通常会打开一条从服务器经由防火墙的返回路径。然而,防火墙通常会阻拦直接进行的客户机-客户机的通信或是“对等(peer-to-peer)”通信。所尝试的一种解决方案是打开防火墙的某些端口,但是这种解决方案:(i)需要修改防火墙设置,这是大多数网络管理员不愿执行的操作;以及(ii)不会对那些执行任何端口转换的防火墙起到作用。本发明提供了一种方法,该方法允许基于分组的数据传输穿越那些使用NAPT或NAT的防火墙,而不改变防火墙设置。作为一种更加通用的情况,本发明是在使用NAPT的防火墙的环境中公开的。然而,本发明中提供的方法同样适用于使用NAT的防火墙,并且适用于使用NAPT或NAT的其他类型的设备,例如路由器。
【发明内容】
因此,本发明提供了一种将数据分组从第一计算机经由广域计算机网络发送到第二计算机的方法,从第一计算机发送的数据分组具有一个标明第一计算机的第一源地址,从第二计算机发送的数据分组具有一个标明第二计算机的第二源地址,其中第一计算机受到第一防火墙的保护,在把数据分组从第一计算机发送到广域网时,该防火墙将第一源地址转换成一个第一外部地址,而第二计算机则受到第二防火墙的保护,在将数据分组从第二计算机发送到广域网的时候,该防火墙会将第二源地址转换成一个第二外部地址,第一和第二防火墙经由广域计算机网络来进行通信,该方法使用了一个经由广域计算机网络而与第一和第二计算机进行通信的指定的接收计算机,所述方法包括:a)第一和第二计算机将第一和第二数据分组发送到指定的接收计算机;b)指定的接收计算机将来自第一数据分组的第一外部地址传递到第二计算机,并且把来自第二数据分组的第二外部地址传递到所述第一计算机;c)第二计算机将一个数据分组发送到第一外部地址;以及d)第一计算机将一个数据分组发送到所述第二外部地址。
通过附加地让第二计算机把一个数据分组发送到第一外部地址,该方法提供到了数据的双向传输。该方法可以适于受到防火墙保护的多台计算机在广域网上进行通信。防火墙可以是NAT或NAPT。如果IP地址和端口是在防火墙那里进行转换的,或者只有IP地址在防火墙那里进行了转换,那么本方法尤其会起到作用。指定的接收计算机可以是任何类型的计算机,其中包括而非局限于所指定的服务器、数据传输所涉及的对等计算机、或是数据传输未曾涉及的对等计算机。
本发明还提供了一种用于执行前述方法的计算机程序产品,以及一种经由广域网而在两个受到防火墙保护的计算机之间发送数据分组的系统。
【附图说明】
图1是描述本发明优选实施例的示意图;以及
图2是一个描述本发明优选实施例的流程图。
【具体实施方式】
图1示意性描述了局域网(14)上的一个客户计算机C1(12),它受到NAPT防火墙FW1(16)的保护,希望经由互联网10而将实况播送的视频数据流这种UDP数据流发送到局域网(22)上受到NAPT防火墙FW2(24)保护的客户计算机C2(20)。在这个示意图中,C1具有内部IP地址H1,它会使用内部端口h1来发送UDP数据流。防火墙FW1将这些地址和端口转换成外部IP地址F1和外部端口f1(18)。C2具有内部IP地址H2,它会使用内部端口h2来接收UDP数据流。防火墙FW2将会在外部地址F2以及外部端口f2(26)接收那些指定给C2的UDP分组。C1和C2都登录到一个服务器S1(28)上,其目的是建立一条路径而把UDP数据流从C1发送到C2。然而,UDP数据流并不是通过服务器发送的。该数据流是以客户机-客户机的形式来进行发送的,从而利用了可以从经由互联网的对等通信中得到的效率和可升级性。
大多数防火墙都会阻止对等通信。只有在(i)输入UDP分组的源和目的地地址分别匹配于最近输出的UDP分组的目的地和源地址,以及(ii)输入UDP分组的源和目的地端口分别匹配于最近输出的UDP分组的目的地以及源端口的时候,NAPT防火墙FW1和FW2才会准许输入UDP分组通过。如果C1或C2尝试将一个分组发送到另一方,如果这个输入分组没有满足这些标准,那么接收者的防火墙将会对其加以阻拦。
本发明允许C1通过以下步骤来向C2发送一个UDP数据流:
(1)C1将一个UDP分组U1发送到服务器S1。C1启动从其内部IP地址和UDP端口(H1:h1)开始进行的传输。防火墙FW1在其外部接口将这个IP地址和端口转换成F1:f1。
(2)当S1从F1:f1接收到分组U1时,S1可以将F1和f1识别为外部IP地址和外部端口,由此FW1将会发送始于C1的UDP数据流。
(3)C2将一个UDP分组U2发送到服务器S1。C2启动从其内部IP地址和UDP端口(H2:h2)开始进行的传输。防火墙FW2在其外部接口将这个IP地址和端口转换成F2:f2。
(4)当S1从F2:f2接收到分组U2时,它可以将F2和f2识别为外部IP地址和外部端口,在这个IP地址和端口上,FW2将会接收C1发送到C2的UDP数据流。
(5)S1向C2告知F1:f1即为C1发送UDP数据流的外部IP地址和端口。
(6)S1向C1告知,F2:f2即为指定给C2的UDP数据流应该发至的外部IP地址和端口。
(7)C2使用其内部端口h2而将一个UDP分组U3发送到F1:f1。防火墙FW2会从F2:f2发送该分组。这个分组将会被防火墙FW1所阻拦。然而,如在步骤(8)所述,它会提示防火墙FW2传递那些由C1发送并且指定给C2的后续分组。
(8)当C1随后从其内部端口h1发送一个包含了指定给C2的UDP分组的数据流时,防火墙FW1会把它们从F1:f1发送到F2:f2。由于步骤(7)中发送的分组,因此防火墙FW2会把F1:f1识别为来自F2:f2的分组最近发至的地址和端口。因此,它允许从F1:f1发送到F2:f2的分组穿过防火墙,并且将其转发到H2:h2,也就是C2的内部IP地址和端口。
因此,本发明产生了一种方法,借助于这种方法,C1发起的UDP数据流传递到C2。这个方法可用于流媒体应用,其中C1将一个实况播送或基于点播的数据流发送到C2。与步骤(1)到(8)相似但被反过来执行的步骤允许C2发起的UDP数据流穿过防火墙F1到达C1。因此,C1和C2可以使用那些依赖于UDP数据流的双向传输的应用,例如视频会议。由多个客户计算机C1,……,CN执行的相似步骤允许经由NAPT防火墙来进行一对多、多对一或多对多的UDP数据流传输。
对作用于一个使用NAPT的防火墙的方法而言,步骤(1)和(3)中所发送分组的类型通常与步骤(8)中发送数据所使用的类型相同(也就是TCP、UDP等等)。其原因在于:许多计算机应用程序或防火墙使用了不同的端口来发送和接收不同类型的数据。然而,如果不是这种情况的话,那么步骤(1)和(3)中所发送分组的类型不必与步骤(8)所用类型相同。另外,防火墙FW1在步骤(1)中发送初始分组时使用的外部IP地址和端口必须与随后在步骤(8)中开始向C2发送数据时使用的外部IP地址和端口相同(尽管如以下更加全面描述的那样,该方法可以适配成与IP地址和端口中的后续变化相适应)。由于目前大多数使用NAPT的防火墙程序在内部IP地址和端口以及发送相同类型分组的外部IP地址和端口之间创建了一一映射,因此,假如将客户计算机C1的软件编写为从相同的内部IP地址和端口发送这二者的传输,那么在实施中通常会发生这种情况。同样,防火墙FW2在步骤(3)中必须使用与步骤(8)中开始接收数据时所用外部IP地址和端口相同的外部IP地址和端口来发送分组。假如将客户计算机C2上的软件编写成了在步骤(3)发送分组所用内部IP地址和端口等同于步骤(8)中接收分组所用的内部IP地址和端口,那么在实施中通常也会发生这种情况。
对本领域技术人员来说,很明显,该方法很容易适配成支持C1与C2之间的双向数据传输,从C1到客户计算机C2、……、CN的一对多的数据传输,从客户计算机C2、……、CN到C1的多对一数据传输,或是客户计算机C1、……、CN之间的多对多数据传输。同样,本发明是结合受到防火墙保护的C1和C2来进行描述的,这是因为这种情况提供了关于本发明的最清楚的描述。然而,本发明很容易适于只有接收客户计算机受到防火墙保护的情况。
指定的接收计算机可以是任何类型的计算机,其中包括而非限制于:指定的服务器、数据传输所涉及的对等计算机、或是数据传输未曾涉及的对等计算机。
对本领域技术人员来说,根据前述公开,很明显,在实施本发明的过程中有可能进行许多替换和修改,而不脱离本发明的实质或范围。举例来说,可能的修改和替换可以包括而非局限于以下内容:
1.对于阻止分组损失或延迟的牢固性而言,C1和/或C2可以在步骤(1)和(3)中向S1发送多个分组,而不是单个分组。分组可以一直被发送,直到接收到S1已经接收了其中一个分组的确认为止。
2.并且对于阻止分组损失或延迟的牢固性而言,C2可以在步骤(7)中发送多个分组,而不是单个分组。分组可以一直被发送,直到接收到FW1已经接收了其中一个分组的确认为止。
3.该方法还可以在C1或C2使用分离端口来发送和接收UDP数据流的时候被使用。举例来说,如果C1使用h1来发送UDP数据流并且使用h3来接收数据流,那么防火墙FW1分别将这些端口转换成f1和f3。C2必须从其接收端口向f1发送一个UDP分组,而C1必须从f3向C2的发送端口发送一个UDP分组。这些分组将会打开某些路径,并且C1将会经由这些路径而向C2进行发送(经由f1),C2则会经由该路径而向C1进行发送(经由f3)。
4.在双向通信的情况下,防火墙FW1和FW2使用相同外部端口来发送和接收UDP数据,数据流中的初始数据分组可用作打开路径所需要的分组(如步骤(7))。初始数据分组有可能会被阻拦,直到在另一个方向上发送了一个分组。然而,使用UDP传输的应用通常会抵抗分组丢失,并且只要初始一个或多个数据分组的丢失相对于所讨论的应用并不重要的话,那么该方法都会起到作用。
5.如果防火墙FW1(或FW2)因为任何原因(例如长数据传输或静寂时间)而改变了发送UDP数据时使用的外部IP地址或端口,那么该方法可以适配成刷新那些标识外部IP地址和端口的数据,以便保持开放的传输路径。举例来说,如果FW1改变了用于发送那些源自C1的UDP数据的外部IP地址或端口,那么与上述步骤(1)一样,新分组将会周期性发送到中间服务器S1,以便标识FW1使用的任何新的IP地址或端口。然后可以使用新数据来重复进行剩余步骤(2)到(8)。该方法需要的所有条件是:在一段足以在步骤(1)把初始分组发送到S1的时段中由FW1使用的同一外部发送IP地址和端口来自与UDP数据流中的初始数据分组相同的IP地址和端口。
6.在上述最佳模式中,服务器S1被用作中介来接收C1和C2发出的UDP分组,并且使用包含在这些分组中的信息来识别FW1和FW2所使用的外部端口。然而,用于向每个终端告知其他外部端口的任何其他装置也可以根据本发明来工作。举例来说,C1和C2可以使用不同的回声服务器S1和S2,它们会将任何一个UDP分组返回其来源。这就使得C1和C2能够分别识别F1:f1以及F2:f2。C1和C2可以使用其他任何装置,例如用户进行的信息脱机交换,或者直接到另一方或经由一个普通服务器进行的TCP传输,由此相互告知F1:f1以及F2:f2。
7.本方法可以在客户计算机经由服务器计算机来进行通信的情况下使用,尽管在这种情况下,由于客户计算机通常会在登录到服务器的时候打开一条返回路径,因而通常并不需要本方法。
8.本方法还可用于仅仅接收客户计算机位于防火墙之后、但却没有防火墙保护发送客户计算机的情况。
9.尽管在使用UDP分组的实时音频和视频通信环境中描述了上述方法,但是对本领域技术人员来说,很明显,本发明具有与其他形式的基于分组的数据传输相关的应用。
10.通过从接收分组中推导出映射方案,然后使用所推导的映射方案从每个客户计算机的外部接收IP地址及端口将所需分组发送到其他每个客户计算机的外部接收IP地址和端口,本方法还适于那些不在内部和外部IP地址及端口之间创建一一映射的防火墙。
11.虽然结合NAPT防火墙而对本发明进行了描述,但是如果防火墙FW1和FW2是NAT防火墙,那么本发明也能以相同方式操作。在这种情况下,NAT FW1会将H1:h1转换成F1:h1,而NATFW2则将H2:h2转换成F2:h2。在其他方面,本发明是相同的。
说明书附图
图1
28服务器S1;10互联网;16防火墙FW1;14客户计算机C1;22客户计算机C2;24防火墙FW2
图2(从上到下)
C1从其内部IP地址及UDP端口(H1:h1)发送一个UDP分组U1
防火墙FW1将这个IP地址和端口转换成F1:f1
C2从其内部IP地址及UDP端口(H2:h2)发送一个UDP分组U2
防火墙FW2将这个IP地址和端口转换成F2:f2
S1告知S2:F1:f1即为C1发送UDP数据流的IP地址和端口,并且S1告知C1:F2:f2即为指定给C2的UDP数据流应该发至的IP地址和端口
C2使用其外部端口h2而将一个UDP分组U3发送到F1:f1,并且防火墙FW2从F2:f2发送该分组
C1从其内部端口h1发送一个指定给C2的UDP分组,并且防火墙FW1将其从F1:f1发送到F2:f2
防火墙FW2将F1:f1识别为它从F2:f2发送的分组所发至的地址和端口,并且它允许从F1:f1发送到F2:f2的分组穿越该防火墙,并且防火墙FW2将这些分组转发到H2:h2,也就是C2的内部IP地址和端口