背景技术
IMS(Internet Protocol Media Subsystem,IP(Internet Protocol,互联网协议)多媒体子系统)是一种全新的多媒体业务形式,已被公认为是下一代网络(Next Generation Network,NGN)的核心技术。IMS基于SIP(Session InitiationProtocol,会话初始化协议)协议支持各种固定接入和移动接入,基于ALL-IP实现移动与固网融合,是实现语音、数据和视频等多媒体全业务融合的重要方式。IMS支持丰富的接入终端和接入网络,IMS终端与IMS核心网之间可能会历经非常复杂的接入路径,中间网元如防火墙(Firewall,FW)、网络地址转换(Network Address Translation,NAT)设备、应用代理(Proxy)服务器和业务监控网关等设备会对承载IMS业务的报文(SIP/RTP(Real-time TransportProtocol,实时传输协议)报文)进行处理和控制,可能导致IMS终端无法正常接入或通信。
目前,主要采用基于隧道封装的机制,实现IMS业务的安全接入。如图1所示,在IMS核心网的入口处部署STG(Security Tunnel Gateway,安全隧道网关),在IMS终端集成SSL隧道客户端。IMS终端启动时,通过SSL隧道客户端与STG建立SSL隧道,将SIP/RTP报文按照图2所示的过程进行SSL隧道封装后,将封装结果(可称为SSL隧道报文)通过SSL隧道传输到STG。上述SSL隧道报文通过网络发送到STG后,STG按照图2的逆过程(即隧道解封装)从SSL隧道报文中还原出SIP/RTP报文,并转发给媒体服务器。反过来,媒体服务器返回的报文也经过同样的过程发送给IMS终端,由IMS终端进行还原。从而,通过SSL隧道封装将IMS业务的上万个端口统一聚合到一个标准的HTTPS(443)端口,轻松穿越FW、NAT及Proxy等中间网元设备,并支持SIP/RTP报文的加密,实现通信数据的端口聚合、数据加密、信息完整性保护等功能。SIP/RTP报文除了可基于SSL隧道封装外,也可基于HTTP(Hyper Text Transfer Protocol,超文本传输协议)隧道或UDP(User Datagram Protocol,用户数据报协议)隧道封装。
具体地,如图2所示,对RTP报文进行SSL隧道封装的过程如下:
步骤S202:以20ms的采样周期(即每秒50个的采样速率)对IMS业务的媒体数据(如语音、视频等数据)进行采集、编码;
步骤S204:将媒体数据通过虚拟协议栈封装为RTP报文;
步骤S206:在RTP报文的头部加入隧道协议头(Encapsulate Header,图2中缩写为Enc Hdr,还可缩写为Enc Header);
步骤S208:添加摘要信息和分组长度补齐信息(摘要信息和分组长度补齐信息在图2中用HMAC-Tail表示),并对整个报文进行SSL加密,然后,在加密后的报文的头部增加SSL协议头(SSL Header,图2中缩写为SSL Hdr),形成一个SSL Record(SSL记录或SSL记录单元);
步骤S210:为了在网络中传输,最终还需要将SSL Record封装成TCP(Transfer Control Protocol,传输控制协议)报文(即上述的SSL隧道报文),通过网络传输到STG。
在上述的SSL隧道封装过程中,由于每个RTP报文形成一个SSL Record,在每个RTP报文之外增加了大量附加信息,导致最终发送的SSL隧道报文的长度比RTP报文的长度大得多,从而使得单包的带宽急剧增加。
以媒体数据的音频编码格式为G.729为例,RTP报文长度的计算公式是:IP(20)+UDP(8)+RTP(12)+Payload(20)=60个字节,其中,IP表示IP头,UDP表示UDP头,RTP表示RTP头,Payload表示负载(即IMS业务的媒体数据)。从而,在每秒50个报文(即RTP报文的打包时长为20ms)时,计算得到带宽为60*8*(1s/20ms)=24kbps。
经过SSL隧道封装之后,最终发送的SSL隧道报文的长度计算公式是:IP(20)+TCP(20)+SSL Header(5)+Enc Header(16)+RTP报文(60)+HMAC-Tail(28)=149个字节,其中,IP表示IP头,TCP表示TCP头,SSL Header表示SSL协议头,Enc Header表示隧道协议头,HMAC-Tail表示摘要信息(HMAC)和分组长度补齐信息(Tail)的组合。从而,在每秒50个报文时,计算得到带宽为149*8*(1s/20ms)=59.6kbps。
通过比较SSL隧道封装前后的报文长度,可推算出单包的带宽增加了35.6kbps(即附加带宽为35.6kbps),相当于增加了148%的带宽。带宽的急剧增加,对用户接入的带宽提出了更高的要求,在一定程度上降低了用户的使用体验和业务接入能力。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施方式,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施方式仅仅用于解释本发明,并不用于限定本发明。
在如图1所示的IMS系统中,IMS终端与IMS核心网入口处的STG之间建立隧道,例如SSL隧道、HTTP隧道或UDP隧道,两者之间通过该隧道进行数据传输,以实现IMS业务的安全接入和传输。
实施例一
在上述的IMS系统中,根据本发明实施例一的IMS终端或STG的数据传输方法如图3所示,包括以下步骤:
步骤S302,对RTP报文进行隧道封装,得到隧道报文,其中,隧道报文中包括记录单元,每个记录单元中封装有多个RTP报文;
例如,当IMS终端和STG之间建立的是SSL隧道时,IMS终端或STG对RTP报文进行隧道封装,即,将多个RTP报文进行SSL隧道封装,形成一个SSL Record,然后再将SSL Record封装成隧道报文。此处将多个RTP报文进行SSL隧道封装形成一个SSL Record的具体处理过程,将在下面的如图4-5所示的实施例二中进行详细描述,这里不再赘述。
步骤S304,将步骤S302中得到的隧道报文通过与对端之间的隧道发送到对端,其中,对端为STG或者IMS终端。
显然,当执行步骤S302-步骤S304的是IMS终端时,对端即为STG;当执行步骤S302-步骤S304的是STG时,对端即为IMS终端。IMS终端和STG可以通过两者之间建立的隧道进行数据传输。
在IMS业务中,最主要的网络流量来自RTP报文,而RTP报文存在定时发送大量小包的特点,发包时间间隔一般在10ms~100ms之间,每个RTP报文的字节长度一般都不会超过200字节。本发明实施例根据RTP报文的小包定时发送的特点,将多个RTP报文形成一个Record,即,多个RTP报文共享一个Record的附加信息,从而通过牺牲较小的实时性,将隧道封装过程中多个RTP报文的附加信息进行整合,减少了隧道封装带来的附加带宽,进而降低了单包的带宽,避免了现有技术由于单包的附加带宽较大,对用户接入的带宽提出了更高的要求,在一定程度上降低了用户的使用体验和业务接入能力的问题。
在上述实施例一中,隧道可以是SSL隧道,也可以是HTTP隧道或UDP隧道等。
实施例二
以IMS终端向STG发送隧道报文为例,进行说明。如图4所示,根据本发明实施例二的IMS终端的数据传输方法包括以下步骤:
步骤S402,在预先创建的链表中,生成(具体生成步骤同图1中的步骤S202-S204)并缓存RTP报文;
例如,该链表可以为一个FIFO(First In First Out,先入先出)链表,可以预先创建一个FIFO链表,不断地将IMS业务的媒体数据写入该FIFO链表所在的内存空间中,将媒体数据封装成一个个的RTP报文,并缓存生成(即封装得到)的RTP报文。
步骤S404,判断是否达到预定封装时间间隔T,若是,则进入步骤S406,若否,则返回步骤S404;
例如,可以通过设置定时器,该定时器的周期为T。为了确保IMS业务的服务质量,上述预定封装时间间隔T的具体取值应该在语音时延允许的范围内,即T≤200ms,例如,T=100ms。
步骤S406,对链表中的在T内收集到的多个RTP报文(RTP报文的个数
进行隧道封装,使得这多个RTP报文形成一个Record,并将该Record封装成最终的隧道报文;
如图5所示,以SSL隧道为例,对T内收集到的多个RTP报文(记为N个)进行SSL隧道封装的过程,包括以下步骤:
步骤S502-S504,同图2中的步骤S202-S204;这两个步骤是将媒体数据生成RTP报文的步骤;
步骤S506,将链表中的N个RTP报文(即在T内收集的N个RTP报文,其中的每个RTP报文均按照图5中的步骤S502-S504生成)取出,并拷贝到一段连续的内存空间中,在这段内存空间的头部加入隧道协议头(Enc Header);
步骤S508:按照一定的摘要算法对加入了Enc Header后的内存空间的内容(或数据)进行摘要计算,得到摘要信息(HMAC),并将该摘要信息附加在内存空间的尾部,然后再在该摘要信息的后面添加分组长度补齐信息(Tail)(摘要信息和分组长度补齐信息在图5中用HMAC-Tail表示),之后,对整个报文进行SSL加密,然后,在加密后的报文的头部添加SSL协议头(SSL Header),形成一个SSL Record;
添加了Tail之后,此时,整个报文的数据长度可以为16bytes、32bytes、64bytes、128bytes等的整数倍,在实际应用中,一般是16bytes的整数倍。
SSL Record的帧结构示意图如图6所示,主要由两大部分构成:头部和加密数据,其中,头部包括内容类型、版本号和数据长度,头部即为图5中的SSLHeader;加密数据包括Enc Header、N个RTP报文(图6中仅示出了2个RTP报文的情况)以及HMAC(摘要信息)和Tail(分组长度补齐信息)。
步骤S510,同图2中的步骤S210。将SSL Record作为内容,在头部添加TCP头和IP头,以完成TCP封装。在该步骤中值得注意的是在对SSL Record进行TCP封装时,为了进一步减少附加带宽,也可以将多个SSL Record封装到一个TCP报文(即SSL隧道报文)中,从而,在最终发送的SSL隧道报文中可以包括一个或多个SSL Record,每个SSL Record中封装有多个RTP报文。
通过上述的过程,可以将原本需要多个Record封装的RTP报文变为只需一个Record封装即可。
同样以媒体数据的音频编码格式为G.729为例,假设T=100ms,RTP报文的打包时长为20ms,此时SSL隧道报文的带宽计算公式变更为:{IP(20)+TCP(20)+SSL Header(5)+Enc Header(16)+RTP报文((100/20)*60)+HMAC-Tail(28)}*8*(1s/100ms)=389*8*10=31.12kbps。与RTP报文的带宽24kbps相比,附加带宽为31.12-24=7.12kbps。
从上述实际数据中可以看出,当预定封装时间间隔T=100ms时,采用本发明实施例后的SSL隧道报文的带宽31.12kbps与现有技术中SSL隧道报文的带宽59.6kbps相比,带宽减少了28.48kbps,附加带宽也从35.6kbps减少到了7.12kbps,减少了5倍。
假设T=200ms,RTP报文的打包时长为20ms,此时SSL隧道报文的带宽计算公式变更为:{IP(20)+TCP(20)+SSL Header(5)+Enc Header(16)+RTP报文((200/20)*60)+HMAC-Tail(28)}*8*(1s/200ms)=689*8*5=27.56kbps。与RTP报文的带宽24kbps相比,附加带宽为27.56-24=3.56kbps。
可以看出,当预定封装时间间隔T=200ms时,采用本发明实施例后的SSL隧道报文的带宽27.56kbps与现有技术中SSL隧道报文的带宽59.6kbps相比,带宽减少了32.04kbps,附加带宽也从35.6kbps减少到了3.56kbps,减少了10倍。
从上述两组实例中可以得出:预定封装时间间隔T越长,最终发送的隧道报文与RTP报文相比的附加带宽减少得越多,从而隧道报文的单包带宽也就越小。对于特定的媒体编码类型,根据本发明实施例的隧道报文与未封装的RTP报文相比的发包特征发生了变化,表现为发包间隔加长了整数倍(发包间隔即为T),报文长度也基本按等比例增加,但是附加带宽却也得到了相同比例的减少,隧道报文的带宽得到了显著的节约。媒体数据的音频编码格式不同,RTP报文的长度会发生变化,但是,不会影响最终的隧道报文的附加带宽的减少。
步骤S408,将得到的隧道报文通过与STG之间的隧道发送到STG。
STG接收到隧道报文之后,就可以按照如图5所示的逆过程对隧道报文进行隧道解封装,还原得到其中的多个RTP报文。
同样,STG向IMS终端发送隧道报文的流程同上述步骤S402-S408,这里不再赘述。此时,IMS终端在接收STG通过隧道发来的隧道报文之后,会对接收的隧道报文进行隧道解封装,得到RTP报文,其中,隧道报文包括记录单元,每个记录单元中封装有多个RTP报文。
此外,当隧道为HTTP隧道时,IMS终端或STG进行HTTP隧道封装的具体处理流程与图4-5类似,只是在步骤S508中添加了分组长度补齐信息后不进行加密,而直接在报文的头部添加HTTP协议头(HTTP Header),形成一个HTTP消息体;当隧道为UDP隧道时,IMS终端或STG进行UDP隧道封装的具体处理流程也与图4-5类似,只是在步骤S508中在加密(加密不一定是SSL加密)后的报文的头部添加UDP协议头(UDP Header),形成一个UDP报文体。
图7是根据本发明实施例一的IMS中的数据传输装置的结构示意图,该数据传输装置可以为IMS终端或STG。如图7所示,该装置包括:封装模块10,用于对RTP报文进行隧道封装,得到隧道报文,其中,隧道报文中包括记录单元,每个记录单元中封装有多个RTP报文;发送模块20,用于将封装模块10得到的隧道报文通过与对端之间的隧道发送到对端,其中,对端为STG或者IMS终端。
本发明实施例根据RTP报文的小包定时发送的特点,将多个RTP报文形成一个Record,即,多个RTP报文共享一个Record的附加信息,从而通过牺牲较小的实时性,将隧道封装过程中多个RTP报文的附加信息进行整合,减少了隧道封装带来的附加带宽,进而降低了单包的带宽,避免了现有技术由于单包的附加带宽较大,对用户接入的带宽提出了更高的要求,在一定程度上降低了用户的使用体验和业务接入能力的问题。从而使隧道报文既能满足实时性的要求,又能够满足带宽要求。
在实际应用中,上述的隧道可以是SSL隧道,也可以是HTTP隧道或UDP隧道。
如图8所示,封装模块10包括:封装缓存模块102,用于在预先创建的链表中,生成并缓存RTP报文;定时器104,用于进行计时;判断模块106,用于判断定时器104是否到达预定封装时间间隔T,其中,预定封装时间间隔T的值应该小于或等于200ms(在IMS的语音时延允许的范围内);处理模块108,用于在判断模块106的判断结果为到达时,对上述链表中的在这预定封装时间间隔T内生成的多个RTP报文(RTP报文的个数
)进行隧道封装,得到隧道报文。
如图9所示,为了对链表中的多个RTP报文进行隧道封装,处理模块108可以包括以下几个模块,分别如下:
拷贝模块1081,用于从链表中取出多个RTP报文,并拷贝到一段连续的内存空间中;
隧道协议头添加模块1082,用于在该内存空间的头部加入隧道协议头(Enc Header);
摘要信息计算添加模块1083,用于对经隧道协议头添加模块1082加入了Enc Header后的内存空间中的数据进行摘要计算,并将计算得到的摘要信息(HMAC)附加在加入了Enc Header后的内存空间的尾部;
补齐信息添加模块1084,用于在摘要信息计算添加模块1083附加的HMAC的后面附加分组长度补齐信息(Tail);
加密模块1085,用于当隧道为SSL隧道或UDP隧道时,对经补齐信息添加模块1084附加了Tail后的内存空间中的数据进行加密;
协议头添加模块1086,用于当隧道为SSL隧道时,在经加密模块1085加密后的内存空间的头部添加SSL协议头,形成SSL记录单元;当隧道为UDP隧道时,在经加密模块1085加密后的内存空间的头部添加UDP协议头,形成UDP报文体;当隧道为HTTP隧道时,在将经补齐信息添加模块1084附加了Tail后的内存空间的头部添加HTTP协议头,形成HTTP消息体;
TCP封装模块1087,用于对协议头添加模块1086形成的记录单元进行TCP封装,得到隧道报文,其中,记录单元为以下之一:SSL记录单元、UDP报文体、HTTP消息体。即,当隧道为SSL隧道时,对SSL记录单元进行TCP封装,得到SSL隧道报文,当隧道是UDP隧道时,对UDP报文体进行TCP封装,得到UDP隧道报文,当隧道是HTTP隧道时,对HTTP消息体进行TCP封装,得到HTTP隧道报文。
如图10所示,该装置还可以包括:接收模块30,用于接收对端通过隧道发来的隧道报文;卸载模块40,用于对接收模块30接收的隧道报文进行隧道解封装,得到RTP报文,其中,隧道报文包括记录单元,每个记录单元中封装有多个RTP报文。显然,上述的卸载模块40在对隧道报文进行隧道解封装时的具体处理过程是上述图5所示的逆过程,这里不再赘述。
在实际应用中,隧道为SSL隧道时,如图11所示,IMS终端中集成有SSL隧道客户端,IMS终端通过SSL隧道客户端与STG建立SSL隧道。IMS终端和SIP/媒体服务器承担业务/媒体层处理和SIP/RTP报文的处理。SIP/媒体服务器具备TCP/IP协议栈,用于与SSL隧道客户端的TCP/IP虚拟协议栈通信。其中,SSL隧道客户端包括:TCP/IP虚拟协议栈、隧道封装/卸载模块、SSL协议栈和TCP/IP协议栈模块。STG包括:隧道封装/卸载模块、SSL协议栈和TCP/IP协议栈模块。在实际应用中,在IMS客户端中,可以由SSL隧道客户端中的TCP/IP虚拟协议栈、隧道封装/卸载模块、SSL协议栈和TCP/IP协议栈来实现如图10中的封装模块10和卸载模块40的功能。在STG中,可以由隧道封装/卸载模块、SSL协议栈和TCP/IP协议栈来实现如图10中的封装模块10和卸载模块40的功能。
具体地,在SSL隧道客户端中,TCP/IP虚拟协议栈用于SIP/RTP报文构造IP层信息(对应于图5中的步骤S504)。隧道封装/卸载模块用于RTP报文的隧道封装和卸载,发送时,将隧道协议头(Enc Header)加入到报文中,用于标识隧道承载格式和类型(对应于图5中的步骤S506),接收时,识别隧道内容类型并将隧道协议头进行卸载,提取RTP报文。SSL协议栈用于SSL封装、加密和数据收发,得到SSL Record(对应于图5中的步骤S508)。TCP/IP协议栈用于将SSL Record进行传输层和网络层的封装和卸载,得到SSL隧道报文(对应于图5中的步骤S510)。
同样,STG中的隧道封装/卸载模块、SSL协议栈和TCP/IP协议栈的功能分别与SSL隧道客户端中的隧道封装/卸载模块、SSL协议栈和TCP/IP协议栈的功能相同,这里不再赘述。
当IMS终端通过SSL隧道客户端向STG发送数据时,具体处理流程如下:
步骤1,TCP/IP协议栈将IMS终端所要发送的媒体数据封装为RTP报文;
步骤2,在隧道封装/卸载模块中设置一个定时器,该定时器的周期(即上述的预定封装时间间隔)为T,并设置T的值在语音时延允许的范围内(T≤200ms,如T=100ms)。隧道封装/卸载模块在T内收集多个RTP报文(个数为T除以RTP报文的打包时长后取整),当定时器到期时,才进行隧道头封装(具体处理如图5中的步骤S506);然后,输出给SSL协议栈;
步骤3,SSL协议栈继续对报文进行SSL加密、封装和发送(具体处理如图5中的步骤S508)。从而,使得在步骤2中的多个RTP报文形成一个SSL Record,即,将原本需要多个SSL Record封装的RTP报文变为只需一个SSL Record封装即可;
步骤4,TCP/IP协议栈将步骤3中形成的SSL Record进行TCP封装,得到最终发送的SSL隧道报文,并发送给STG。
STG接收到IMS终端发送来的SSL隧道报文之后,其具体的处理流程如下:
步骤1,TCP/IP协议栈从SSL隧道报文中解析出SSL Record;
步骤2,SSL协议栈对SSL Record进行SSL卸载;
步骤3,隧道封装/卸载模块进行RTP报文的还原,并以较短的时间间隔或按RTP报文的打包时长发送到媒体服务器上。具体地,可以发送给SIP/媒体服务器中的TCP/IP协议栈进行解封装,得到其中的媒体数据。
同样,STG接收到媒体服务器返回的报文并向IMS终端发送数据时的具体处理流程,以及IMS终端接收到STG发送来的SSL隧道报文时的具体处理流程,与上述步骤相同,这里不再赘述。
在IMS网络中,包括IMS终端和STG,其中,IMS终端和STG为如图7-10所示的装置。IMS终端和STG可以采用如图3-5所示的数据传输方法向对端发送数据并接收处理对端发来的数据。
与现有技术相比,本发明以上实施例在使用隧道承载IMS业务报文时,通过将多个RTP报文封装在一个Record中,使得承载的多个RTP报文可共享一个Record的附加信息,从而使得附加带宽得到了极大的节约,也有效地减小了最终传输的隧道报文的单包带宽,降低了对用户接入的带宽的要求,并在一定程度上提升了用户的使用体验和业务接入能力。以预定封装时间间隔为100ms为例,对于部分RTP报文产生了最大为80ms的时延,但是附加带宽却减少了5倍。
由于附加带宽得到了有效地减少,从而能够满足代理环境下(即IMS终端通过代理服务器进行上网)进行IMS业务安全穿越的带宽性能,使SSL VPN(Virtual Private Network,虚拟专用网)解决方案在IMS安全穿越领域中更具竞争力。
显然,本发明上述实施例还可以应用于其他的实时通信业务领域中。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。