一种基于会话初始协议的会话方法及设备的制作方法

文档序号:7700331阅读:143来源:国知局
专利名称:一种基于会话初始协议的会话方法及设备的制作方法
技术领域
本发明涉及会话初始协议(SIP,Session Initiation Protocol)技术领域,具体涉及一种基于会话初始协议的会话方法及设备。

背景技术
互联网协议电话(VoIP,Voice over Internet Protocol)基于IP分组交换网络,通过对传统的模拟语音信号进行数字化、压缩、打包,封装成帧等一系列处理,使得语音业务可以通过IP网进行承载。例如,IP电话就是VoIP的一项典型应用。
SIP是目前使用最广的VoIP技术,也是第三代移动通信的一种重要通信协议。SIP消息包括SIP请求消息和SIP响应消息两大类。SIP的典型组网应用如图1所示。图1中,注册和代理服务器(Registrar Server&Proxy Server)、用户代理(UA,UserAgent)1、UA2都直接连在公网上,都使用公网IP地址;安装在个人电脑(PC)机上的软电话(Softphone)和UA3均在私网中,并通过网络地址转换(NAT,NetworkAddress Translation)网关与公网相连。软电话可以看作是UA的一种。
图1中,UA1、注册和代理服务器、UA2都获得公网IP地址,且互相之间均路由可达。其中,UA1的公网IP地址是172.33.28.33,UA2的公网IP地址是172.33.27.45,注册和代理服务器的公网IP地址是172.33.255.254。公网IP终端使用公网IP地址进行注册和呼叫的流程如图2所示。图2列出了各个SIP消息中的关键字段。其中主要包括以下步骤 S201~S204,UA1和UA2分别向注册和代理服务器注册,将自己的SIP统一资源标识符(URI,Uniform Resource Identifiers)填充在SIP注册(REGISTER)请求消息的Contact头域中;注册和代理服务器收到REGISTER请求消息后,将Contact头域中的信息(Contact地址)记录在数据库中,以供后续的呼叫使用,并返回200OK消息。在图2所示的交互中,注册和代理服务器的数据库中保存的UA1和UA2的Contact地址分别为 sip100@172.33.28.33:5060,和sip200@172.33.27.45:5060。
S205~S206,UA1需要呼叫UA2(UA2的号码为200)时,通过注册和代理服务器向UA2发送SIP邀请(INVITE)消息。图2中所示的INVITE消息中,c和m字段分别为用于建立VoIP通话所需的媒体地址和端口号,即本端监听媒体报文的地址172.33.28.33和端口号16844,对端将向该地址和端口发送实时传输协议(RTP,Real-time Transport Protocol)或实时传输控制协议(RTCP,Real-time Transport Control Protocol)报文;INVITE消息中的Contact头域的值表明了后续请求将要发往的地址;INVITE消息中还包括有UA1所支持的媒体能力集信息,如RTP/AVP 18804表示UA1所支持的语音编码,以与UA2进行媒体能力协商。图2所示的INVITE消息中还包括有呼叫对端UA2的号码200,注册和代理服务器接收到上述INVITE消息后,根据呼叫对端UA2的号码查找到UA2的注册地址,从而将INVITE消息转发给UA2。
S207~S211,UA2通过注册和代理服务器向UA1返回100Trying或180Ringing响应消息,表示请求已收到正在处理;UA2摘机后,向UA1返回200OK的SIP响应消息,该响应消息中的Contact头域的值表明了后续请求要发往的地址,并且在该消息中同样将本端监听媒体报文的地址和端口号、以及选取的语音编码方式(其中RTP/AVP 18表示G.729语音编码)等信息告知UA1;之后,UA1进一步向UA2返回ACK消息,UA2在收到UA1发送的ACK消息后,能力协商就完成了,语音呼叫得以建立成功。
S212~S214,然后,UA1和UA2分别向对端监听的地址/端口号发送RTP报文,以进行语音通信。任意一端想要拆线,都会根据Contact头域的值直接向对端发送SIP BYE消息,并在接收到对端返回的200OK应答后,呼叫就拆除了。
注意由于S206中的INVITE消息和S210中的200OK消息中的Contact头域标明了后续请求发往的地址,所以,S211中的ACK应答消息和S213中的SIP BYE消息都将直接根据Contact的值发向对端。
位于NAT网关后的私网软电话,如果按照图2的流程进行注册和呼叫,会出现下面的问题 软电话发给注册和代理服务器的SIP消息在到达NAT网关1时,NAT网关1将进行NAT转换,将该SIP消息的IP报头的源地址和用户数据报协议(UDP,User Datagram Protocol)报头的源端口号更改为公网IP地址和公网端口号,除此之外,SIP消息中涉及私网IP地址/端口号的其它内容并没有随之发生更改,所以注册和代理服务器收到的由NAT网关1转发的该SIP消息可能如下,其中下划线部分的私网IP地址/端口号并没有被NAT网关1更改 REGISTER sip172.33.255.254SIP/2.0 ViaSIP/2.0/UDP 192.168.1.3:5061;branch=z9hG4bK258e3d43b96 Call-IDHAnGUeIiNgSlZj124821548y0@192.168.1.3 From<sip:80481001@172.33.255.254:5060>;tag=b961466b To<sip:80481001@172.33.255.254:5060> CSeq1REGISTER Contact<sip:80481001(@192.168.1.3:5061> Expires3600 Max-Forwards70 Content-Length0 按照图2所示的一般处理流程,注册和代理服务器将记录Contact头域的值80481001@192.168.1.3:5061。由于注册和代理服务器没有到私网地址(192.168.1.3)的路由,将会导致后续的SIP消息无法返回给软电话,进而导致软电话无法与公网中的UA建立会话。为解决上述问题,现有技术中通常采用以下技术方案,以实现SIP消息穿越NAT网关 1)NAT网关支持SIP应用级网关(ALG,Application Level Gateway)功能,由NAT网关将TCP/UDP载荷中的私网地址/端口号修改为NAT网关上对外的公网地址/端口号。
2)利用用户数据报协议简单穿越网络地址转换器(STUN,Simple Traversalof User Datagram Protocol Through Network Address Translators)协议进行NAT穿越。该方案需要在公网中增加一个STUN服务器,并且要求UA支持STUN客户端功能。
上述现有技术方案中有以下缺点 1)NAT ALG方式需要通过端口号来识别SIP消息,如果UA的SIP端口号与ALG设置的不同,则ALG无法生效。虽然SIP缺省的端口号为5060,但是目前很多软电话和IP电话的端口号都是采用5060外的其它端口;其次,随着SIP消息和头域种类的增多,ALG也需要随之不断进行升级;再次,实际组网时,需要所有的NAT网关都支持SIP ALG,否则可能导致SIP呼叫无法建立成功。
2)利用STUN技术进行NAT穿越这种方法首先需要在公网中额外的增加一个STUN服务器,同时还要求SIP终端支持STUN客户端功能,而且随着NAT安全特性的不断增强,现有的STUN技术已经很难单独完成穿越NAT的功能,必须和其它技术相结合才可实现NAT穿越。


发明内容
本发明实施例所要解决的技术问题是提供一种基于SIP的会话方法及设备,NAT网关设备支持ALG功能,也不需要设置额外的STUN服务器,即可实现私网中的用户代理与其它用户代理之间的会话。
为解决上述技术问题,本发明实施例提供方案如下 一种基于会话初始协议SIP的会话方法,私网中的用户代理UA通过网络地址转换NAT网关连接到公网,所述会话方法包括 UA建立第一IP地址/端口号和第二IP地址/端口号之间的对应关系,所述第一IP地址/端口号是UA发出的SIP消息所使用的源IP地址/源端口号,所述第二IP地址/端口号是NAT网关对第一类消息中的源IP地址/源端口号进行NAT处理后得到的公网IP地址/端口号,所述第一类消息的目的IP地址/目的端口号为设置在公网中的注册和代理服务器的IP地址/端口号、源IP地址/源端口号为所述第一IP地址/端口号; UA利用SIP消息向所述注册和代理服务器进行注册并协商建立与会话对端之间的会话,并将会话过程中生成的媒体报文作为SIP消息体封装在指定类型的SIP消息,并通过所述注册和服务器将所述指定类型的SIP消息转发给所述会话对端,所述指定类型的SIP消息用于供会话对端解析以得到其中携带的媒体报文;其中,在所述对应关系建立后,UA在发送任何SIP消息时,先根据所述对应关系,将该SIP消息头域部分中的第一IP地址/端口号替换为第二IP地址/端口号,然后再将该SIP消息发送出去。
优选地,上述会话方法中,建立所述对应关系包括 UA向注册和代理服务器发送源IP地址/源端口号为所述第一IP地址/端口号、目的IP地址/目的端口号为所述注册和代理服务器的IP地址/端口号的第一SIP请求消息,所述第一SIP请求消息的源IP地址/源端口号在所述NAT网关处被转换为所述第二IP地址/端口号; UA接收所述注册和代理服务器针对所述第一SIP请求消息返回的第一SIP应答消息,所述第一SIP应答消息携带有所述第二IP地址/端口号; UA从所述第一SIP应答消息中提取所述第二IP地址/端口号,建立所述第一IP地址/端口号和所述第二IP地址/端口号之间的对应关系。
优选地,上述会话方法中,建立所述对应关系包括 UA通过与所述NAT网关进行交互,获取所述NAT网关对所述第一类消息中的源IP地址/源端口号进行NAT处理后得到的第二IP地址/端口号; UA根据获取的所述第二IP地址/端口号,建立所述第一IP地址/端口号和所述第二IP地址/端口号之间的对应关系。
优选地,上述会话方法中,所述媒体报文的源IP地址/源端口号是UA监听媒体报文的IP地址/端口号,所述媒体报文的目的IP地址/目的端口号是所述会话对端监听媒体报文的IP地址/端口号。
优选地,上述会话方法中,所述媒体报文包括实时传输协议报文和实时传输控制协议报文。
本发明实施例还提供了一种用户代理UA,通过网络地址转换NAT网关连接到公网,所述UA包括 对应关系建立单元,用于建立第一IP地址/端口号和第二IP地址/端口号之间的对应关系,所述第一IP地址/端口号是UA发出的SIP消息所使用的源IP地址/源端口号,所述第二IP地址/端口号是NAT网关对第一类消息中的源IP地址/源端口号进行NAT处理后得到的公网IP地址/端口号,所述第一类消息的目的IP地址/目的端口号为设置在公网中的注册和代理服务器的IP地址/端口号、源IP地址/源端口号为所述第一IP地址/端口号; SIP会话单元,用于利用SIP消息向所述注册和代理服务器进行注册并协商建立与会话对端之间的会话,并将会话过程中生成的媒体报文作为SIP消息体封装在指定类型的SIP消息,并通过所述注册和服务器将所述指定类型的SIP消息转发给所述会话对端,所述指定类型的SIP消息用于供会话对端解析以得到其中携带的媒体报文;其中,在所述对应关系建立后,在发送任何SIP消息时,先根据所述对应关系将该SIP消息头域部分中的第一IP地址/端口号替换为第二IP地址/端口号,然后再将该SIP消息发送出去。
优选地,上述UA中,所述对应关系建立单元包括 发送子单元,用于向注册和代理服务器发送源IP地址/源端口号为所述第一IP地址/端口号、目的IP地址/目的端口号为所述注册和代理服务器的IP地址/端口号的第一SIP请求消息,所述第一SIP请求消息的源IP地址/源端口号在所述NAT网关处被转换为所述第二IP地址/端口号; 接收子单元,用于接收所述注册和代理服务器针对所述第一SIP请求消息返回的第一SIP应答消息,所述第一SIP应答消息携带有所述第二IP地址/端口号; 维护子单元,用于从所述第一SIP应答消息中提取所述第二IP地址/端口号,并建立所述第一IP地址/端口号和所述第二IP地址/端口号之间的对应关系。
优选地,上述UA中,所述对应关系建立单元包括 获取单元,用于通过与所述NAT网关进行交互,获取所述NAT网关对所述第一类消息中的源IP地址/源端口号进行NAT处理后得到的第二IP地址/端口号; 维护子单元,用于根据获取的所述第二IP地址/端口号,建立所述第一IP地址/端口号和所述第二IP地址/端口号之间的对应关系。
优选地,上述UA中,所述媒体报文的源IP地址/源端口号是UA监听媒体报文的IP地址/端口号,所述媒体报文的目的IP地址/目的端口号是所述会话对端监听媒体报文的IP地址/端口号。
优选地,上述UA中,所述媒体报文包括实时传输协议报文和实时传输控制协议报文。
从以上所述可以看出,本发明实施例提供的基于SIP的会话方法及其设备,从SIP协议本身着手,在不改变现有网元结构的情况下,可以实现SIP消息的NAT穿越,并实现私网中的SIP终端与公网中的SIP终端、私网中的SIP终端与其它私网中的SIP终端之间的媒体通信;本实施例可以适合目前大部分的组网应用,无需NAT网关支持ALG功能,也不需要设置额外的STUN服务器或者虚拟专用网(VPN)相关网元,即可实现媒体报文SIP的NAT穿越,极大的简化了组网;并且,本实施例能够很好的兼容现有的SIP协议。



图1为现有技术的SIP典型组网示意图; 图2为现有技术中公网UA之间的注册呼叫流程示意图; 图3为本发明实施例所述的基于SIP的会话方法的流程图; 图4为本发明实施例中PROBE消息和REGISTER消息的交互流程图; 图5为本发明实施例中SIP呼叫的流程图; 图6为本发明实施例中媒体报文的传输示意图; 图7为本发明实施例中所述UA的结构示意图。

具体实施例方式 本发明实施例提供的基于SIP的会话方法及设备,通过对现有的SIP协议进行扩展和完善,使得基于SIP自身机制即可实现SIP消息穿越NAT网关,并通过将媒体报文封装在SIP消息发送给会话对端,进而实现了媒体报文的NAT穿越,使得私网中的UA可以与其它私网或公网中的UA进行会话。以下将结合附图通过具体实施例对本发明做进一步的说明。
请参考图3,本发明实施例的基于SIP的会话方法中,私网中的UA通过NAT网关连接到公网,所述会话方法包括以下步骤 步骤31,UA建立并维护第一IP地址/端口号和第二IP地址/端口号之间的对应关系,所述第一IP地址/端口号是UA发出的SIP消息所使用的源IP地址/源端口号,所述第二IP地址/端口号是NAT网关对第一类消息中的源IP地址/源端口号进行NAT处理后得到的公网IP地址/端口号,所述第一类消息的目的IP地址/目的端口号为设置在公网中的注册和代理服务器的IP地址/端口号、源IP地址/源端口号为所述第一IP地址/端口号; 步骤32,UA利用SIP消息向所述注册和代理服务器进行注册并建立与会话对端之间的会话,并将会话过程中生成的媒体报文作为SIP消息体封装在指定类型的SIP消息,并通过所述注册和代理服务器将所述指定类型的SIP消息转发给会话对端,所述指定类型的SIP消息用于供会话对端解析以得到其中携带的媒体报文;其中,在建立所述对应关系之后,UA在发送任何SIP消息时,先根据所述对应关系,将该SIP消息头域部分中的第一IP地址/端口号替换为第二IP地址/端口号,然后再将该SIP消息发送出去。
下面以图1所示的应用环境为例,通过私网1中的软电话与私网2中的UA3的会话流程,对上述步骤及所采用的SIP消息进行详细说明。本实施例对现有的SIP协议进行了扩展和增强,实现了SIP消息和媒体报文的NAT穿越。但需要说明的是,本实施例只是提供一种对SIP协议的扩展机制,本实施例所采用的SIP消息格式并不对本发明的保护范围构成限制。
为了在UA上建立所述对应关系,本实施例首先定义了一种新的SIP请求消息PROBE消息。UA在发起注册和呼叫前,需要先发送PROBE消息给注册和代理服务器,PROBE消息的IP报头中的源IP地址/源端口号是UA的私网IP地址/SIP端口号,即SIP协议所使用的私网IP地址/端口号。以图1中的软电话为例,图4给出了具体的PROBE消息以及REGISTER消息的交互流程和各个消息中的关键字段 S301,假设注册和代理服务器上SIP协议所使用的IP地址/端口号为172.33.255.254/5060,软电话上SIP使用的IP地址/端口号为192.168.1.3:5061(第一IP地址/端口号),即软电话所发出的SIP消息的源IP地址/源端口号为内部的私网地址192.168.1.3:5061,目的IP地址/目的端口号为172.33.255.254/5060。软电话在向注册和代理服务器发起注册之前,首先发送一个PROBE消息,该PROBE消息的内容和封装后的格式如表1所示

表1 根据SIP的相关规定,SIP消息中的Via头域的值用于表明对该SIP消息进行响应的地址;Contact头域的值用于表明后续请求将要发往的地址。本实施例中PROBE消息中的Via头域的值为192.168.1.3:5061,Contact头域的值为80481001@192.168.1.3:5061。
S302,该PROBE消息到达NAT网关1,并由NAT网关1进行网络地址转换(NAT)处理首先,NAT网关1根据该PROBE消息的源IP地址/源端口号和目的IP地址/目的端口号,分配一个外部的公网IP地址/端口号,该公网IP地址/端口号与该PROBE消息的源IP地址/源端口号和目的IP地址/目的端口号相对应;然后,将该PROBE消息的源IP地址/源端口号由内部的私网IP地址/端口号(第一IP地址/端口号)转换为外部的公网IP地址/端口号(第二IP地址/端口号),然后再将该PROBE消息转发至公网中的注册和代理服务器,并保存上述对应关系。假设该PROBE消息经过NAT网关1时,NAT网关1将PROBE消息的源IP地址/源端口号由192.168.1.3:5061替换为2.2.2.30:12288,并在NAT转换表中保存如表2所示的对应关系。
表2 本实施例中NAT网关1不支持SIP ALG功能,因此PROBE消息中头域部分涉及到私网地址和端口号的内容并不会进行更改。这样,注册和代理服务器接收到的由NAT网关1转发的PROBE消息如表3所示,其中IP报头和UDP报头中的源IP地址和源端口号已经进行了转换

表3 S303,注册和代理服务器对该PROBE消息回复200OK应答消息,应答消息的格式如表4所示
表4 表4所示的200OK应答消息中,Via头域为ViaSIP/2.0/UDP192.168.1.3:5061;received=2.2.2.30;re-port=12288。本实施例中对RFC3261规定的Via头域应用做了扩展,增加了re-port参数 根据RFC3261的规定,如果收到的SIP请求消息的源IP地址与Via头域的IP地址不同,则要在应答消息的Via头域中加上一个received参数,该received参数指明了真正发出SIP请求消息的IP地址,并且将对该SIP请求消息的应答消息发送给received参数所指明的IP地址上。本实施例在收到的SIP请求消息的源IP地址与Via头域的IP地址不同时,进一步在RFC3261的基础上增加一个re-port参数,该re-port参数和received参数一起,精确指明了发出SIP请求消息的IP地址/端口号,在本实施例中就是2.2.2.30:12288,并且该应答消息也将被发送给2.2.2.30:12288。
S304,NAT网关1收到该200OK应答的IP消息后,查找自身保存的NAT转换表,找到相匹配的匹配项,然后将“目的IP地址/目的端口号”做相应的NAT转换,转换为内部私网的IP地址/端口号192.168.1.3:5061,然后再发给192.168.1.3:5061。NAT转换后的200OK应答消息如表5所示

表5 当软电话收到该200OK应答消息后,根据其中Via头域的received参数和re-port参数,就知道自身192.168.1.3:5061对应的公网地址为2.2.2.30:12288,从而可以建立一个对应关系表,如表6所示。该对应关系表与NAT网关的映射表(表2)相一致,也就达到了获取NAT网关1为私网IP地址/端口号192.168.1.3:5061所映射的公网IP地址/端口号的目的。本实施例中还可以通过定期发送PROBE消息并接收相应的应答消息,根据应答消息中Via头域的值维护所述对应关系表,达到定期更新对应关系的目的。
表6 S305,在生成所述对应关系表之后,软电话发送REGISTER的SIP请求消息向注册和代理服务器进行注册。这里,软电话按照现有的正常流程生成REGISTER消息,然后再根据上述对应关系表,将该REGISTER消息头域部分的私网IP地址/端口号都替换为公网IP地址/端口号,再将REGISTER消息发送出去。具体的,将Via头域由192.168.1.3:5061替换为2.2.2.30:12288,将Contact头域由80481001@192.168.1.3:5061替换为80481001@2.2.2.30:12288。SIP消息中还可能包括有其它头域,如From头域、Remote-party-ID头域等,这些头域中的私网IP地址/端口号也要替换为公网IP地址/端口号。最终软电话所发送的REGISTER消息如表7所示

表7 S306~S308,REGISTER消息到达NAT网关1后,NAT网关1按照正常的NAT处理流程进行处理,会发现目前已经有一个映射项与该REGISTER消息相匹配,因此不会再给192.168.1.3:5061分配新的地址/端口号,而是根据该映射项进行NAT转换,然后再将REGISTER消息发送给注册和代理服务器。因此,注册和代理服务器接收到的REGISTER消息如表8所示
表8 此时,注册和代理服务器收到的REGISTER消息中,IP报头和UDP报头中的源IP地址/源端口号为“2.2.2.30/12288”,与REGISTER消息的Via头域相同,此时注册和代理服务器记录Contact头域中的IP地址和端口号作为软电话的注册信息,以对软电话进行注册,并返回200OK应答消息。由于REGISTER消息的源IP地址/源端口号与Via头域的IP地址/端口号相同,该应答消息中不会添加received和re-port参数。
这样,通过上述S301~S308,私网1中的软电话成功注册到了注册和代理服务器上,软电话在注册和代理服务器上的注册信息为80481001@2.2.2.30:12288。后续的呼叫该软电话的INVITE消息将会被注册和代理服务器发送到NAT网关1(2.2.2.30:12288);然后,由NAT网关1进行NAT转换后发送到私网1中的软电话,从而实现了SIP消息从公网直接访问私网。
可以看出,上述S301~S308打通了SIP层,实现了SIP消息穿越NAT网关,因此可以利用SIP消息携带媒体报文,在公网、私网之间传递媒体流信息。为此,本实施例还定义了另一种新的SIP请求消息用于携带媒体报文STRAM消息。利用SIP STRAM消息构造一个SIP隧道,实现媒体报文的NAT穿越。
以图1所示的应用环境为例,UA3(SIP400@10.0.0.2:5060)和软电话(SIP80481001@192.168.1.3:5061)各自处于不同的私网之中,分别通过NAT网关2和NAT网关1连接到公网。假设,UA3和软电话都已经通过上述S301~S308中介绍的方法注册到了注册和代理服务器上。其中,两个NAT网关所生成的映射表项如表9所示 表9 软电话和UA3在注册和代理服务器上的注册信息如表10所示 表10 本实施例中,由于UA3和软电话均处于NAT网关之后,在发起SIP呼叫(INVITE)请求的时候,就会要求使用新的STREAM消息来封装包括RTP和RTCP报文在内的媒体报文。本实施例中,UA通过在SIP消息的Support头域中指定参数“STREAM”,以表示本UA支持STREAM封装,并通过在Require头域中携带参数“STREAM”,表明自己处于NAT网关之后的私网中,要求会话双方使用STREAM消息对后续的媒体报文进行封装,具体的呼叫交互流程如图5所示 S401~S402,INVITE请求消息的协商本实施例中软电话和UA3都处于NAT后面,并且都支持对SIP的扩展。软电话在呼叫UA3时,根据UA3的电话号码400生成INVITE请求消息,通过注册和代理服务器将该INVITE请求消息转发给UA3。该INVITE消息包括有会话描述协议(SDP,SessionDescription Protocol)消息体,其中包含有UA3所支持的媒体能力集信息,用于与会话对端进行媒体能力协商;该INVITE消息的Supported和Require头域中均填写STREAM,分别表示本软电话支持STREAM封装、以及后续需要使用SIP STREAM消息封装RTP和RTCP报文;该INVITE请求消息经NAT网关1发送到注册和代理服务器,注册和代理服务器再根据UA3的注册信息,将该INVITE请求消息发送到NAT网关2(202.106.0.20:12345),再由NAT网关2转发至UA3。
如图5所示,软电话生成INVITE请求消息,其中SDP部分包括了软电话监听媒体报文的地址与端口号,分别是o字段中的192.168.1.3和m字段中的16844,即,192.168.1.3:16844;该INVITE请求消息的IP报头和UDP报头的源IP地址和源端口号为192.168.1.3:5061;在发送该INVITE请求消息之前,软电话根据图4中建立的对应关系表,将INVITE请求消息头域部分的私网IP地址/端口号替换为对外的公网IP地址/端口号,即,将Via和Contact头域中的192.168.1.3:5061替换为2.2.2.30:12288,然后,再将该INVITE请求消息发送给注册和代理服务器;该INVITE请求消息将首先到达NAT网关1,由NAT网关1根据表9进行NAT处理,将源IP地址和源端口号由192.168.1.3:5061替换为2.2.2.30:12288,然后再发送给注册和代理服务器;注册和代理服务器根据表10中UA3的注册信息,将该INVITE请求消息发送到NAT网关2(202.106.0.20:12345);再由NAT网关2根据表9进行NAT处理,将其中的目的IP地址和目的端口号由202.106.0.20:12345替换为10.0.0.2:5060,最终将该INVITE请求消息发送到UA3。
S403~S404,UA3返回100Trying或180Ringing响应消息,表示请求已收到正在处理。
S405~S408,UA3返回200OK的应答消息,该消息的关键内容请参考图5,其中SDP部分包括有协商确定的编解码协议G.729和UA3监听媒体报文的地址与端口号10.0.0.2:16384等内容。经过注册和代理服务器的转发,该200OK应答消息最终到达软电话;软电话向注册和代理服务器返回ACK消息,注册和代理服务器将该ACK消息转发给UA3。UA3在接收到该ACK消息后,软电话和UA3之间的能力协商完成,会话建立成功。媒体报文交互地址及端口为192.168.1.3:16844<->10.0.0.2:16384。
下面以软电话为例,介绍媒体报文的STREAM封装(UA3采用相同的封装过程)。
在会话建立成功之后,软电话按照正常流程生成媒体报文,并将媒体报文封装到IP报文中,于是,该媒体报文的IP报头和UDP报头中的目的IP地址/目的端口号为UA3监听媒体报文的地址/端口号10.0.0.2:16384,源IP地址/源端口号为软电话监听媒体报文的地址/端口号192.168.1.3:16844。表11示出了媒体报文(RTP报文)的封装结构,RTP报文包括RTP头和语音载荷。

表11 然后,将表11所示的媒体报文作为SIP STREAM消息的消息体,封装在SIP STREAM消息中,然后再对STREAM消息进行IP封装,封装后的STREAM消息的结构如表12所示 表12 表12中的IP报头和UDP报头的结构如表13所示,表12中的SIP消息的格式如表14所示
表13

表14 其中,表14中SIP消息的Via和Contact头域均按照先前建立的对应关系表,将原来的私网IP地址/端口号替换为公网IP地址/端口号,即,将Via和Contact头域中的192.168.1.3:5061替换为2.2.2.30:12288。
软电话和UA3之间的媒体报文通过STREAM消息进行传递,具体流程请参考图6所示 S501~S502,软电话根据与UA3之间的媒体报文交互地址及端口号,按照正常流程生成媒体报文,该媒体报文的IP报头和UDP报头中的源IP地址/源端口号为软电话监听媒体报文的IP地址/端口号192.168.1.3:16844,目的IP地址/目的端口号为UA3监听媒体报文的地址/端口号10.0.0.2:16384;然后,将该媒体报文作为SIP消息体封装在STREAM消息中,并按照预先建立的对应关系替换STREAM消息头域部分的私网IP地址/端口号为公网IP地址/端口号;然后,将该STREAM消息发送至注册和代理服务器;该STREAM消息中包括有会话对端UA3的号码,从而注册和代理服务器可以根据UA3的号码查找到UA3的注册信息,将该STREAM消息发送至UA3。可以看出,STERAM消息的转发方式同INVITE消息类似,转发过程中的NAT处理此处不再赘述。UA3在接收到该STREAM消息后,对其进行解封装,获取其中的SIP消息体,解封装后得到的媒体报文的目的IP地址/目的端口号是UA3监听媒体报文的私网IP地址和端口号10.0.0.2:16384,因此UA3可以按照现有的正常处理流程对媒体报文进行相应处理,获取其中的语音信息。
S503~S508,UA3向注册和代理服务器返回200OK应答消息;以及后续UA3可以采用类似S501~S502中的处理流程,利用STREAM消息发送媒体报文,从而实现了软电话和UA3之间双向的语音交互。RTCP报文的传输与RTP报文相类似,不再赘述。
上述利用SIP STREAM消息传递媒体报文的原理是利用已经不受NAT影响的SIP消息这个“隧道”,将后续需要交互的媒体报文(RTP和RTCP报文)作为SIP消息体,封装到指定类型的SIP消息中去,这样在会话对端收到指定类型的SIP消息后,进行解封装,即可提取出SIP消息体中的内容,然后就可以按照现有的正常处理流程进行处理。
以上实施例中定义了两种新的SIP请求消息PROBE和STREAM消息。私网中的UA首先向注册和代理服务器发送SIP PROBE消息,注册和代理服务器则在对PROBE消息响应时,返回该PROBE消息经NAT网关NAT处理后得到的公网IP地址/端口号,于是UA得以建立并维护所述对应关系,并根据所述对应关系,将后续发送的SIP消息中头域部分的私网IP地址/端口号替换为公网IP地址/端口号,以实现SIP消息的NAT穿越。并且,上述实施例中,UA还将会话过程中生成的媒体报文封装在STREAM消息中进行发送,会话对端接收到STREAM消息后解封装后即可得到媒体报文,并按照正常的处理流程对媒体报文进行处理。
本实施例中的NAT网关只是完成内部的私网地址/端口号到外部的公网地址/端口号的一个NAT转换功能,因此本实施例中不需要对现有的NAT网关进行改进,采用现有的NAT网关即可实现本实施例。
与现有的SIP协议相比,本实施例中对SIP消息的处理有两点不同1)UA在建立所述对应关系后,在发送SIP消息之前,会根据所述对应关系替换SIP消息中Via和Contact头域的私网IP地址/端口号;2)UA在收到的SIP请求消息的源IP地址与Via头域的IP地址不同时,在对该SIP请求消息进行响应时还会返回一个用于标识发出该SIP请求消息的端口号。除了这两点,本实施例对SIP消息的处理方式与现有技术相一致,与现有SIP协议有很好的兼容性。
上述实施例中,UA建立和维护所述对应关系还可以采用其它方式例如,可以采用手工配置的方式,首先确定UA上SIP所使用的私网IP地址/端口号、以及NAT网关对第一类消息中的源IP地址/源端口号进行NAT处理后得到的公网IP地址/端口号,所述第一类消息的目的IP地址/目的端口号为设置在公网中的注册和代理服务器的IP地址/端口号、源IP地址/源端口号为所述第一IP地址/端口号;然后,再在UA上配置该对应关系;再例如,还可以是UA通过与NAT网关进行交互,获取NAT网关对所述第一类消息中的源IP地址/源端口号进行NAT处理后得到的第二IP地址/端口号,然后UA根据获取的所述第二IP地址/端口号,建立并维护所述对应关系。
从以上所述可以看出,本实施例从SIP协议本身着手,在不改变现有网元结构的情况下,可以实现SIP消息的NAT穿越,并实现私网中的SIP终端与公网中的SIP终端、私网中的SIP终端与其它私网中的SIP终端之间的媒体通信;本实施例可以适合目前大部分的组网应用,无需NAT网关支持ALG功能或STUN功能,也无需新增任何服务器或者虚拟专用网(VPN)相关网元,即可实现媒体报文SIP的NAT穿越,极大的简化了组网;并且,本实施例能够很好的兼容现有的SIP协议。
基于上述的SIP会话方法,本实施例还提供了一种用户代理UA。通过NAT网关连接到公网,如图7所示,该UA包括 对应关系建立单元,用于建立第一IP地址/端口号和第二IP地址/端口号之间的对应关系,所述第一IP地址/端口号是UA上会话初始协议SIP所使用的私网IP地址/端口号,所述第二IP地址/端口号是NAT网关为所述第一IP地址/端口号所映射的公网IP地址/端口号; SIP会话单元,用于利用SIP消息向注册和代理服务器进行注册并协商建立与会话对端之间的会话,并将会话过程中生成的媒体报文作为SIP消息体封装在指定类型的SIP消息中发送给会话对端,所述指定类型的SIP消息用于供会话对端解析以得到其中携带的媒体报文;其中,在所述对应关系建立后,在发送任何SIP消息时,先根据所述对应关系将该SIP消息头域部分中的第一IP地址/端口号替换为第二IP地址/端口号,然后再将该SIP消息发送出去。
优选地,上述对应关系建立单元可以包括 发送子单元,用于向注册和代理服务器发送源IP地址/源端口号为所述第一IP地址/端口号的第一SIP请求消息,所述第一SIP请求消息的源IP地址/源端口号在所述NAT网关处被转换为所述第二IP地址/端口号; 接收子单元,用于接收所述注册和代理服务器针对所述第一SIP请求消息返回的第一SIP应答消息,所述第一SIP应答消息携带有所述第二IP地址/端口号; 维护子单元,用于从所述第一SIP应答消息中提取所述第二IP地址/端口号,并建立所述第一IP地址/端口号和所述第二IP地址/端口号之间的对应关系。
优选地,上述对应关系建立单元可以包括 获取单元,用于通过与所述NAT网关进行交互,获取所述NAT网关为所述第一IP地址/端口号所映射的第二IP地址/端口号; 维护子单元,用于根据获取的第二公网IP地址/端口号,建立所述第一IP地址/端口号和所述第二IP地址/端口号之间的对应关系。
优选地,所述SIP会话单元,还可以进一步用于在发送任何SIP消息时,根据所述对应关系,将该SIP消息中Via头域和Contact头域中的第一IP地址/端口号替换为第二IP地址/端口号。
优选地,所述媒体报文的源IP地址/源端口号是UA监听媒体报文的IP地址/端口号,所述媒体报文的目的IP地址/目的端口号是所述会话对端监听媒体报文的IP地址/端口号。所述媒体报文包括实时传输协议报文和实时传输控制协议报文。
综上所述,本发明实施例通过对扩展现有的SIP协议,实现了SIP消息及媒体报文的NAT穿越。
以上所述仅是本发明的实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
权利要求
1.一种基于会话初始协议SIP的会话方法,私网中的用户代理UA通过网络地址转换NAT网关连接到公网,其特征在于,所述会话方法包括
UA建立第一IP地址/端口号和第二IP地址/端口号之间的对应关系,所述第一IP地址/端口号是UA发出的SIP消息所使用的源IP地址/源端口号,所述第二IP地址/端口号是NAT网关对第一类消息中的源IP地址/源端口号进行NAT处理后得到的公网IP地址/端口号,所述第一类消息的目的IP地址/目的端口号为设置在公网中的注册和代理服务器的IP地址/端口号、源IP地址/源端口号为所述第一IP地址/端口号;
UA利用SIP消息向所述注册和代理服务器进行注册并协商建立与会话对端之间的会话,并将会话过程中生成的媒体报文作为SIP消息体封装在指定类型的SIP消息,并通过所述注册和服务器将所述指定类型的SIP消息转发给所述会话对端,所述指定类型的SIP消息用于供会话对端解析以得到其中携带的媒体报文;其中,在所述对应关系建立后,UA在发送任何SIP消息时,先根据所述对应关系,将该SIP消息头域部分中的第一IP地址/端口号替换为第二IP地址/端口号,然后再将该SIP消息发送出去。
2.如权利要求1所述的会话方法,其特征在于,建立所述对应关系包括
UA向注册和代理服务器发送源IP地址/源端口号为所述第一IP地址/端口号、目的IP地址/目的端口号为所述注册和代理服务器的IP地址/端口号的第一SIP请求消息,所述第一SIP请求消息的源IP地址/源端口号在所述NAT网关处被转换为所述第二IP地址/端口号;
UA接收所述注册和代理服务器针对所述第一SIP请求消息返回的第一SIP应答消息,所述第一SIP应答消息携带有所述第二IP地址/端口号;
UA从所述第一SIP应答消息中提取所述第二IP地址/端口号,建立所述第一IP地址/端口号和所述第二IP地址/端口号之间的对应关系。
3.如权利要求1所述的会话方法,其特征在于,建立所述对应关系包括
UA通过与所述NAT网关进行交互,获取所述NAT网关对所述第一类消息中的源IP地址/源端口号进行NAT处理后得到的第二IP地址/端口号;
UA根据获取的所述第二IP地址/端口号,建立所述第一IP地址/端口号和所述第二IP地址/端口号之间的对应关系。
4.如权利要求2或3所述的会话方法,其特征在于,所述媒体报文的源IP地址/源端口号是UA监听媒体报文的IP地址/端口号,所述媒体报文的目的IP地址/目的端口号是所述会话对端监听媒体报文的IP地址/端口号。
5.如权利要求4所述的会话方法,其特征在于,所述媒体报文包括实时传输协议报文和实时传输控制协议报文。
6.一种用户代理UA,通过网络地址转换NAT网关连接到公网,其特征在于,所述UA包括
对应关系建立单元,用于建立第一IP地址/端口号和第二IP地址/端口号之间的对应关系,所述第一IP地址/端口号是UA发出的SIP消息所使用的源IP地址/源端口号,所述第二IP地址/端口号是NAT网关对第一类消息中的源IP地址/源端口号进行NAT处理后得到的公网IP地址/端口号,所述第一类消息的目的IP地址/目的端口号为设置在公网中的注册和代理服务器的IP地址/端口号、源IP地址/源端口号为所述第一IP地址/端口号;
SIP会话单元,用于利用SIP消息向所述注册和代理服务器进行注册并协商建立与会话对端之间的会话,并将会话过程中生成的媒体报文作为SIP消息体封装在指定类型的SIP消息,并通过所述注册和服务器将所述指定类型的SIP消息转发给所述会话对端,所述指定类型的SIP消息用于供会话对端解析以得到其中携带的媒体报文;其中,在所述对应关系建立后,在发送任何SIP消息时,先根据所述对应关系将该SIP消息头域部分中的第一IP地址/端口号替换为第二IP地址/端口号,然后再将该SIP消息发送出去。
7.如权利要求6所述的UA,其特征在于,所述对应关系建立单元包括
发送子单元,用于向注册和代理服务器发送源IP地址/源端口号为所述第一IP地址/端口号、目的IP地址/目的端口号为所述注册和代理服务器的IP地址/端口号的第一SIP请求消息,所述第一SIP请求消息的源IP地址/源端口号在所述NAT网关处被转换为所述第二IP地址/端口号;
接收子单元,用于接收所述注册和代理服务器针对所述第一SIP请求消息返回的第一SIP应答消息,所述第一SIP应答消息携带有所述第二IP地址/端口号;
维护子单元,用于从所述第一SIP应答消息中提取所述第二IP地址/端口号,并建立所述第一IP地址/端口号和所述第二IP地址/端口号之间的对应关系。
8.如权利要求6所述的UA,其特征在于,所述对应关系建立单元包括
获取单元,用于通过与所述NAT网关进行交互,获取所述NAT网关对所述第一类消息中的源IP地址/源端口号进行NAT处理后得到的第二IP地址/端口号;
维护子单元,用于根据获取的所述第二IP地址/端口号,建立所述第一IP地址/端口号和所述第二IP地址/端口号之间的对应关系。
9.如权利要求7或8所述的UA,其特征在于,所述媒体报文的源IP地址/源端口号是UA监听媒体报文的IP地址/端口号,所述媒体报文的目的IP地址/目的端口号是所述会话对端监听媒体报文的IP地址/端口号。
10.如权利要求9所述的UA,其特征在于,所述媒体报文包括实时传输协议报文和实时传输控制协议报文。
全文摘要
本发明提供了一种基于会话初始协议的会话方法及设备。所述会话方法通过建立会话两端之间的SIP消息通道,并利用SIP消息承载并传递媒体报文。按照本发明,无需NAT网关支持ALG功能,也不需要设置额外的STUN服务器,即可实现SIP消息以及RTP/RTCP报文穿越NAT,从而实现私网中的用户代理与其它用户代理之间的会话。
文档编号H04M7/00GK101552848SQ20091008412
公开日2009年10月7日 申请日期2009年5月20日 优先权日2009年5月20日
发明者岩 张 申请人:杭州华三通信技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1