专利名称:基于nat的udp流媒体服务器的网关穿透方法
技术领域:
本发明属于网络多媒体技术领域,涉及一种基于NAT的UDP流媒体服务器的网关穿透方法。具体地说,主要涉及在网络多媒体中,使流媒体服务器ClearServer可以识别内网客户端的IP(网络协议)地址和端口号,将服务器端的多媒体数据能够顺利发送到客户端的方法,从而实时有效的在因特网中传送多媒体信息。
背景技术:
流媒体(Media Streaming)技术是指支持多媒体数据流通过网络从服务器向客户端传送,接收方边接收边播放的技术。流媒体应用通常要求视频和音频连续、清晰和实时地播放,这就对网络服务提出了要求1)必须实时传输数据,仅能够容忍少量的延迟(数百毫秒);2)传送数据相对可靠,容忍一定数量的数据丢失;3)确保一定的带宽,以保证传输的数据量能够实时地播放。
Internet(因特网)给网络应用程序提供两种服务TCP(传输控制协议)和UDP(用户数据报协议)。TCP通过确认和重传机制保证数据无错顺序地传送,同时采用拥塞控制策略和发送速率控制解决传输中的拥塞问题以及发送速率与接受速率不匹配问题。但是TCP采用上述控制策略的时候却牺牲了数据的传输速度,所以对于传输数据量较大的流媒体应用来说,采用TCP传输难以保证数据传输的实时性。而UDP传输方式没有TCP的拥塞控制和发送速率控制,也没有提供数据传输的可靠性保证,但是却保证了传输的速度,满足了流媒体应用中的关键因素——实时性,所以越来越被流媒体应用系统所采纳。
ClearServer是一种新兴的UDP流媒体服务器,实现了视频质量和发送速率的控制以及符合工业标准的拥塞控制以此大幅度的提高流媒体服务质量,并有自适应网络带宽的传输功能,可按网络实际状况调节媒体传输码率,解决了流媒体传输中的时延问题,即采用UDP传输协议能够获得较高的传输率。ClearServer服务器端接收到包含客户端请求信息的RTSP(Real Time Streaming Protocol实时流协议)数据包请求之后,解析数据包取得客户端的IP地址和端口号,根据取得的客户端IP地址和端口号,将客户请求的多媒体数据发送到客户端。但是,这种接收和发送机制存在这样的一个问题如果一台intranet(内网)机器在点播ClearServer的时候,由于内网机器IP地址对于普通的Internet上的机器而言是不可知的,即对于流媒体服务器ClearServer来说,包含客户端请求信息的RTSP数据包中的IP地址和端口号是不可识别的,根据这个数据包中的IP地址和端口号,ClearServer无法将客户端请求的流媒体数据发到客户端。
由于UDP传输协议是一个面向无连接的服务,即没有在两个进程之间建立连接的初始“握手”阶段,所以在一个进程想要往另一个进程发送一批字节的时候,发送方进程必须将目的进程的地址加入到发送的字节中。当点播ClearServer的时候,客户端发送的RTSP请求字节中包含客户端的IP地址和端口号信息。当RTSP请求到达ClearServer后,ClearServer将它解析,得到客户端的IP地址和端口号信息,然后服务器回应客户端的RTSP请求。在向客户端发送UDP流媒体数据之前,先对要发送的流媒体数据进行“包装”,以解析RTSP请求所得的客户端IP地址和端口为发送目的地,然后将UDP数据包发出。
在内网中,任何一台计算机的IP地址仅仅是一个临时的IP地址,即内网外部的机器无法识别这个IP地址。所以内网的某台计算机点播ClearServer服务器的时候,客户端发送到服务器端的分组中包含的IP地址实际上“虚拟”的,以这个IP地址为发送目的地的UDP数据包无法到达客户端。所以,必须找出一种方法,找到内网客户端的“地址”,使得服务器端能够根据这个“地址”能找到客户端,从而将流媒体数据发送到客户端。
发明内容
本发明的目的在于提供一种使流媒体服务器Clear Media Server可以识别内网客户端的IP地址和端口号,将服务器端的多媒体数据顺利发送到客户端的方法,我们称其为ClearNat方法。目前网络上运行的网关普遍都提供NAT服务,即网络地址转换。本发明适用于穿透提供NAT服务的网关,以下称之为NAT服务器。本方法需要为内网的机器的客户端建立内网IP地址、端口与NAT服务器IP地址、端口的映射,以使流媒体服务器ClearServer能将媒体数据穿透NAT服务器发送到内网机器的播放器上。该方法的计算复杂度较低,效果好,对主控服务器的其他应用进程没有影响,且在流媒体服务器ClearServer中能支持大的内网并发用户的使用。
对于流媒体服务器来说处于内网的客户端所在计算机的IP地址、端口是不可见的,也就是说,通过RTSP交互,服务器ClearServer得到的内网IP地址、端口其实是不可用的,即无法将点播节目的UDP数据包发送到处于内网的客户端。而网关提供的NAT服务使得服务器有途经正确得发送UDP数据包。当内网的计算机向外网发送UDP数据包时,NAT服务器会记录内网计算机的IP地址、端口(记为A、B),并在NAT服务器上随即选择一个端口C,转发从内网发送过来的UDP数据包,并将NAT服务器上的端口C与内网IP地址A、端口B组成一个映射,此后,从外网发回给NAT服务器端口C的UDP数据包都会被转发到内网IP地址A的端口B。因此,只要UDP流媒体服务器将数据包发向NAT服务器上正确的端口,那么UDP数据包就能够被转发到处于内网的客户端。关键在于,要让UDP流媒体服务器ClearServer建立内网IP地址、端口与NAT服务器IP地址、端口的映射。通过运行在客户端与服务器端两方的程序的配合,能够做到这一点,这也就是ClearNat方法的基本原理。据此,称本发明为基于NAT的UDP流媒体服务器的网关穿透方法。
本发明的具体工作步骤如下首先,需要一个OCX(ActiveX控件)运行在客户端浏览的点播网页上。当用户点击网页上的点播链接后,由网页告知OCX,用户名信息、用户点播影片名信息和流媒体服务器ClearServer的IP地址。OCX根据这些信息构建UDP数据包,其中数据段的内容包括用户的内网IP地址、内网UDP接收端口和点播的节目名。内网UDP接收端口其实就是用户的视频播放器等待接收UDP数据包的端口,OCX可以根据不同播放器的不同配置来动态决定端口号(在RTSP协议下,通常为4个连续的端口)。UDP数据包构建完成后,发送到流媒体服务器ClearServer的IP地址(实际实现中约定端口8888,非强制)。每个UDP数据包对应一个端口映射,四个连续的端口映射形成一组。
然后,ClearServer服务器端有一个clearnat进程,负责接收和处理OCX发送过来UDP数据包。在收到一个UDP数据包后,先解析UDP协议头部,获得UDP数据包来源的IP地址和端口,也就是NAT服务器的IP地址和端口。接着解析UDP数据段,获得用户的内网IP地址和端口(用户名和节目名是用于判断这个UDP数据包是否反映了最新的信息,以防止产生重复和错误的映射关系)。再将NAT服务器的IP地址和端口与内网IP地址和端口组成一对端口映射关系,并记录下来,然后接着接收下一个UDP数据包。当集齐4个连续的端口映射后,就把它们作为一组完整的端口映射关系,并将完整的每一组映射关系,通过IPC(进程间通信)方式传递给ClearServer的主控服务器。主控服务器接收映射关系组,并保存在关系组记录表中。
最后,当ClearServer主控服务器需要向客户端发送UDP数据包的时候,先去查看映射关系组记录表。对于来自于内网的客户端点播,服务器就用映射关系中的NAT地址、端口替换掉客户端所在计算机的内网IP地址、端口。即,以NAT IP地址、端口作为UDP数据包的发送目的地。
这样,ClearServer实际上就会向NAT服务器发送UDP数据包,而当数据包到达NAT服务器后,就会被正确得转发到处于内网的客户端。让内网用户也能享受视频点播的服务。
图1是本发明的方法结构图。
图2是OCX的工作流程图。
图3是clearnat进程的工作流程图。
图4是主控服务器中处理映射关系并进行地址端口替换的功能模块的工作流程图。
具体实施例方式
为了解决现有技术中的问题,本发明提供了一种新颖的使UDP数据包顺利穿透网关(NAT服务器)的方法,即ClearNat方法,参见图1。图1描述的是ClearNat方法的结构。图中圆圈的标号反映的是数据流程的顺序。IP地址和端口仅仅是示例性的。
下面详细说明ClearNat方法的工作流程。
第一,本发明需要在内网客户端的点播网页上运行一个OCX。OCX的工作流程参见图2。当用户进行VOD(Video On Demand)点播时,首先会点击视频点播网页上某一个节目的链接。这样,网页就会把一些必要的信息传递给在网页上运行的OCX,对应图中步骤202。信息包括用户名、点播的节目名和点播服务器ClearServer的IP地址。OCX接收到这些信息后,就到了步骤204。OCX需要确定本机播放器监听接收UDP视频数据的端口。一般而言,对于Apple公司的QuickTime Player,会以6970为起始,每4个连续的端口为一个播放器工作。例如,一台计算机上,第一个QuickTime Player使用端口6970-6973,第二个QuickTime Player使用端口6974-6977,以此类推。对于MicroSoft公司的WindowsMedia Player,可以为它指定接收UDP视频数据的端口,OCX每次动态地选择一组空闲的端口供Windows Media Player使用。这样,OCX就根据用户使用的播放器确定本机UDP数据接收端口,并绑定。接着进入步骤206,OCX将确定的本机端口号,连同本机IP地址、用户名、点播节目名写入UDP数据包的数据段中。每个端口对应一个UDP数据包,4个合为一组。最后,步骤208中,根据网页处得来的ClearServer服务器的IP地址,将步骤206中构建的UDP数据包发向ClearServer的8888端口(实际实现中的约定)。考虑到内网到外网的链路一般环境不会很好,UDP可能会出现丢包,则在步骤208中,可以采取冗余发送的策略,将每个UDP数据包发送多遍,可以有效降低丢包率。实际上,由复旦大学(内网环境)发向清华大学(外网环境),每个UDP数据包发送3遍就几乎可以确保没有丢包。
第二,在UDP流媒体视频点播服务器ClearServer端,运行一个名为clearnat的进程。它的功能是接收、处理OCX发过来的UDP数据包,并将完整的、最新的端口映射关系组发送给主控进程。clearnat的工作流程参见图3。步骤302中clearnat启动并在约定的8888端口监听,当接收到一个UDP数据包后,就开始处理。步骤304,解析UDP协议头,获得NAT服务器的IP地址和端口;解析UDP数据段,获得用户名、点播节目名、内网IP地址和端口。如果UDP协议头中的IP地址与UDP数据段中的内网IP地址相同,则说明该用户是在外网上进行点播,不需要用到本发明的方法,程序继续等待下一个UDP数据包。如果是内网点播,则将NAT服务器的IP地址和端口与内网的IP地址和端口组成一个映射关系。然后查询自己维护的映射关系记录表(步骤306),如果有重复的记录,说明这是个冗余的UDP数据包,则简单地丢弃它;否则再根据用户名、点播节目名来判断这个映射关系的时效性(步骤308),即是否反映了最新的用户点播请求,是,则将这个映射关系记录(步骤310);否,则简单丢弃。进入步骤312,每次记录下一个映射关系,就去检查整个映射关系记录表,看看是否集齐完整的一组映射关系,即,同一个内网IP地址上的4个连续端口的映射关系。如果没有,就继续等待下一个UDP数据包的到来;如果得到完整的一组映射关系,就将这一映射关系组,通过IPC(Inter-Process Communication进程间通信)方式传递给主控服务器(步骤314),然后继续等待UDP数据包。
第三,在主控服务器上,有一个功能模块,负责处理从clearnat进程发送过来的信息,并在服务器发送UDP数据前进行必要的IP地址和端口的替换。图4描述了这个功能模块的流程。它在主控服务器的消息循环中等待来自clearnat的信息(步骤402),接收到clearnat发送过来的映射关系组信息后(步骤404),首先到自己的映射关系组记录表中查询是否有相同的记录(步骤406),如果有相同的记录则丢弃此映射关系组,继续等待映射关系组信息,如果没有则把此记录添加到记录表中(步骤408)。每当有客户端的点播请求到达主控服务器时(步骤410),就去映射关系组记录表中查询,看看是否有对应该用户的映射关系记录(步骤412),如果没有,则表明该用户是普通的外网点播客户端,无需使用本发明的方法,(步骤414);如果有,则表明该用户是通过内网点播的客户端,那么在向这个客户端发送UDP数据的时候,就用映射关系组中的NAT服务器IP地址和端口,替换内网IP地址和端口。
本发明的性能如下复杂度N个客户端,处理NAT信息所需要多做的计算包括加减计算和查表计算计算复杂度为O(N2)。
处理时间ClearNat信息处理中主要是对信息表的查询和处理操作。表1是信息表查询操作所需的CPU时间进行测试。测试环境处理器迅驰1.5G,内存512M,操作系统WindowsXP。
表1 查询表操作所需CPU时间主控进程对NAT端口映射表的查询和处理等操作所需时间非常少,即使NAT端口映射表中的节点数目达到100000,做一次查询和处理所需的时间也基本上会小于1ms。
对并发数的影响由于查表操作所需时间比较少,只有客户端达到100000以上时每次查表操作所需时间才超过10ms。当N=1000000时,这对于主控进程(Main Process)的调度也许就会带来一些困难。但是这个并发数是在假定每个客户都是内网用户,并通过NAT服务器进行视频点播。在实际应用中,服务器的客户肯定有很大一部分是通过公网直接连接到流媒体服务器上进行视频点播的。
总之,采用本发明所述的ClearNat方法,可以让流媒体服务器ClearServer发送的UDP数据包顺利穿透网关(NAT服务器),为处于内网的客户端提供优质的视频点播服务。
本公开的方式描述了本公开和本发明的最佳模式,应该理解并且认识到,有许多等效于在此公开的示例性实施例的方式,并且在不脱离本发明的范围和精神的情况下可以进行修改和变形,本发明不受示例性实施例的限制而只受附加的权利要求的限制。
权利要求
1.一种使流媒体服务器ClearServer可以识别内网客户端的IP地址和端口号,将服务器端的多媒体数据顺利发送到客户端的方法,其特征在于具体步骤如下a.将一个OCX运行在客户端浏览的点播网页上;当用户点击网页上的点播链接后,由网页告知OCX,用户名信息、用户点播节目的信息和流媒体服务器ClearServer的IP地址;OCX根据这些信息构建UDP数据包,其中数据段的内容包括用户的内网IP地址、内网UDP接收端口和点播的节目名称;UDP数据包构建完成后,就会发送到流媒体服务器ClearServer的IP地址(实际实现中约定端口8888,非强制)。每个UDP数据包对应一个端口映射,四个连续的端口映射形成一组;b.ClearServer服务器端有一个clearnat进程,负责接收和处理OCX发送过来UDP数据包;在收到一个UDP数据包后,解析UDP协议头部,获得UDP数据包来源的IP地址和端口;解析UDP数据段,获得内网的IP地址和端口;clearnat将完整的一组映射关系通过IPC(进程间通信)方式发送给主控服务器;c.主控服务器接收映射关系组,并保存在映射关系组记录表中;当主控服务器需要向客户端发送UDP数据包的时候,先去查看映射关系组记录表,对于来自于内网的客户端点播,服务器就用映射关系中的NAT地址、端口替换掉客户端所在计算机的内网IP地址、端口。
2.如权利要求1所述的方法,其特征在于,在步骤b中,包括将NAT服务器的IP地址和端口和内网IP地址和端口组成一对端口映射关系,并记录下来,然后接着接收下一个UDP数据包;当集齐4个连续的端口映射后,就把它们作为一组完整的端口映射关系,并将完整的每一组映射关系,通过IPC(进程间通信)方式传递给ClearServer的主控服务器进程。
全文摘要
本发明属于网络多媒体技术领域,具体是使流媒体服务器发送的UDP(用户数据报协议)数据包穿透网关的一种方法,即ClearNat方法,。根据该方法流媒体服务器ClearServer可以识别内网客户端的IP地址和端口,将NAT服务器的IP地址和端口与内网客户端的IP地址和端口做一个映射,通过替换IP地址和端口,将服务器端的UDP数据发送到NAT服务器,再由NAT服务器把数据转发到处于内网的客户端,实现穿透网关,从而有效的在因特网中实时传送多媒体信息。该方法的计算复杂度较低,效果很好,对主控服务器的其他应用进程没有影响,且在流媒体服务器ClearServer中能支持大的内网并发用户的使用。
文档编号H04L12/56GK1694430SQ200510026160
公开日2005年11月9日 申请日期2005年5月25日 优先权日2005年5月25日
发明者叶德建, 孙澔峻, 张佐 申请人:复旦大学