一种用于SIP通信系统的网络穿越方法与流程

文档序号:15455600发布日期:2018-09-15 01:01阅读:252来源:国知局

本发明属于网络数据传输技术领域,涉及一种用于sip通信系统的网络穿越方法,可用于多媒体数据的点对点传输。



背景技术:

会话初始协议(sip,sessioninitiationprotocol)是一个应用层的信令控制协议,用于创建、修改、释放会话。sip协议具有灵活、可扩充的优点,广泛应用于语音、视频等数据业务。

sip通信系统主要包含客户端和服务器,其中客户端包含主叫客户端和被叫客户端。每个客户端包括会话控制模块、多媒体处理模块和网络穿越模块。其中,会话控制模块使用sip协议进行会话的创建和释放;多媒体处理模块进行多媒体数据的采集,编解码,呈现等;网络穿越模块主要完成网络穿越。

sip通信系统客户端常在局域网中使用,局域网通过网络地址转换(nat,networkaddresstranslation)设备与公网连接。nat设备的主要工作是对tcp和udp的地址信息进行修改,把内网地址转换成公网地址。nat可以分为两类,一类是具有相同内网的ip和端口的不同会话,映射到相同的外网ip和端口,即锥形nat;另一类是具有相同内网ip和端口的不同会话,映射到相同ip和不同端口,即对称型nat。nat设备是在tcp/ip层以下进行处理的,但是sip协议在应用层。sip协议中媒体流的地址信息不能被nat设备修改,因此sip协议中保存的是通信对端的私网地址,使用这个地址是不能正常通信的。

为了解决这一问题,就需要进行网络穿越,常见的网络穿越方法有nat的udp简单穿越(stun,simpletraversalofudpthroughnat)和通过relay方式穿越nat(turn,traversalusingrelaynat)等。在stun协议中,客户端通过向stun服务器发消息,查询其公网映射地址,这样在nat设备上就有了对应的映射表项,之后就可以进行数据传输。在turn协议中,客户端通过某种机制得到turn服务器上的公网地址,之后通信两端的报文都经过turn服务器转发给对端。

目前常见的sip通信系统使用stun和turn相结合的方式来解决对称型nat的穿越,例如授权公告号为cn10245580b、名称为“nat穿越方法及系统”的中国专利,公开了一种穿越nat的方法及系统。通信节点根据获得的通信接收节点的通信地址和第一鉴权信息,发起自身通信地址到通信接收节点的第一单向联通性测试,并根据第一单向联通性测试结果,选择能够互相通信的通信地址对。该发明解决了传统网络穿越方法中存在的无法穿越对称型nat的问题。但是,在联通性测试时,使用了turn协议,通信两端需要以服务器作为中继进行数据传输,这会使服务器负荷增大,同时数据传输的时延和丢包率也会增大。



技术实现要素:

本发明的目的是克服上述现有技术存在的缺陷,提出一种应用于sip通信系统的网络穿越方法,旨在降低服务器负荷,并减少通信时延和丢包率。

为实现上述目的,本发明采取的技术方案为:

一种用于sip通信系统的网络穿越方法,所述sip通信系统包括客户端和服务器,其中,所述客户端包括主叫客户端和被叫客户端,每个客户端包括会话控制模块、媒体处理模块和网络穿越模块,穿越方法包括如下步骤:

(1)对主叫客户端和被叫客户端进行初始化;

(2)主叫客户端向被叫客户端发起会话请求:

(2a)主叫客户端向服务器发起stun探测,得到主叫候选通信地址;

(2b)主叫客户端将主叫候选通信地址添加到sdp描述中,并将添加有主叫候选通信地址的sdp描述添加到sip协议的invite请求中,然后将invite请求发送给被叫客户端;

(3)被叫客户端接收invite请求并响应会话:

(3a)被叫客户端接收invite请求,并向服务器发起stun探测,得到被叫候选通信地址;

(3b)被叫客户端将被叫候选通信地址添加到sdp描述中,并将添加有被叫候选通信地址的sdp描述添加到sip协议的200ok响应中,然后将200ok响应发送给主叫客户端;

(4)被叫客户端获取主叫候选通信地址,主叫客户端获取被叫候选通信地址:

(4a)被叫客户端对invite请求进行解析:

被叫客户端从invite请求中分离出sdp描述,然后从sdp描述中读取出主叫候选通信地址;

(4b)主叫客户端对200ok响应进行解析:

主叫客户端从200ok响应中分离出sdp描述,然后从sdp描述中读取出被叫候选通信地址;

(5)主叫客户端获取被叫媒体流传输地址,被叫客户端获取主叫媒体流传输地址:

(5a)主叫客户端向被叫客户端发起地址协商会话:

主叫客户端向被叫候选通信地址发起探测,查询可用通信地址是否存在,若是,则对可用通信地址进行分级,得到最优可用通信地址,并将最优可用通信地址作为被叫媒体流传输地址,否则,对被叫媒体流传输端口进行预测,得到被叫媒体流传输地址;

(5b)被叫客户端向主叫客户端发起地址协商会话:

被叫客户端向主叫候选通信地址发起探测,查询可用通信地址是否存在,若是,则对可用通信地址进行分级,得到最优可用通信地址,并将最优可用通信地址作为主叫媒体流传输地址,否则,对主叫媒体流传输端口进行预测,得到主叫媒体流传输地址;

(6)主叫客户端和被叫客户端进行媒体流传输:

主叫客户端向被叫媒体流传输地址发送媒体流数据,同时被叫客户端向主叫媒体流传输地址发送媒体流数据。

本发明与现有技术相比,具有如下优点:

本发明在被叫客户端向主叫客户端发起地址协商会话和被叫客户端向主叫客户端发起地址协商会话时,通过端口预测来完成对称型nat的穿越,端口预测成功后,媒体流可以点对点传输,避免了现有使用turn协议的通信系统需要使用服务器中继转发的缺点,降低了服务器负荷,并减少了通信的时延和丢包率低。

附图说明

图1是本发明的实现流程图。

具体实施方式

以下结合附图和具体实施例,对本发明作进一步详细说明:

参考图1,一种用于sip通信系统的网络穿越方法,所述sip通信系统包括客户端和服务器,其中,所述客户端包括主叫客户端和被叫客户端,每个客户端包括会话控制模块、媒体处理模块和网络穿越模块,穿越方法包括如下步骤:

步骤1,对主叫客户端和被叫客户端进行初始化:

所述初始化包含对会话控制模块、媒体处理模块和网络穿越模块的初始化,首先申请内存,创建对应的数据结构,并对数据结构赋初值。初始化完成后,就能正常使用这些模块。

步骤2,主叫客户端向被叫客户端发起会话请求:

步骤2a,主叫客户端向服务器发起stun探测,得到主叫候选通信地址;

所述探测由主叫客户端网络穿越模块发起,探测遵循stun协议,实现步骤为:客户端向服务器发送bindingrequest,服务器给客户端返回bindingsuccessresponse响应,该响应包含了mapped-address字段,公网映射地址就包含在这个字段中。探测的次数根据客户端使用的通信地址数目来确定,如果是视频会话则需要的通信地址有两个,一个用于视频,一个用于语音。所述的候选通信地址就包括客户端本机地址和公网映射地址。

步骤2b,主叫客户端将主叫候选通信地址添加到sdp描述中,并将添加有主叫候选通信地址的sdp描述添加到sip协议的invite请求中,然后将invite请求发送给被叫客户端;

该步骤由主叫客户端的会话控制模块完成,所述主叫候选通信地址包括ip和端口号;所述sdp描述示例如下:

m=audio5474rtp/avp0

c=inip4113.140.29.14

a=candidate:sc0a800731udp1862270975113.140.29.145474typsrflx

a=candidate:hc0a800731udp1694498815192.168.0.11550206typhost

其中,m行描述语音传输的本地端口,c行描述本地ip,a行描述候选通信地址,srflx表示该候选地址是反射地址。

另外,本实施方式所述的sip通信系统属于b2bua(back-to-backuseragent,背靠背用户代理)架构,主叫客户端和被叫客户端之间的会话控制信令传输是通过服务器进行转发的。因此,上述将invite请求发送给被叫客户端实际上是指主叫客户端先将invite请求发送给服务器,再由服务器发送给被叫客户端。之后所提及的主叫客户端和被叫客户端之间的sip信令传输,都是如此。

步骤3,被叫客户端接收invite请求并响应会话:

步骤3a,被叫客户端接收invite请求,并向服务器发起stun探测,得到被叫候选通信地址;

被叫客户端的会话控制模块接收到invite请求后,需要严格按照sip协议的标准会话建立流程处理,即先给服务器发送100tring响应,表示被叫客户端收到invite请求;再发送180ringing响应,表示被叫端开始振铃。之后,会话控制模块调用网络穿越模块的接口,向服务器发起stun探测。所述的探测实现方式与步骤2a中相同。

步骤3b,被叫客户端将被叫候选通信地址添加到sdp描述中,并将添加有被叫候选通信地址的sdp描述添加到sip协议的200ok响应中,然后将200ok响应发送给主叫客户端;

该步骤由被叫客户端的会话控制模块完成,所述被叫候选通信地址包括ip和端口号;所述sdp描述示例如下:

m=audio5474rtp/avp0

c=inip4113.140.29.14

a=candidate:sc0a800731udp1862270975113.140.29.145474typsrflx

a=candidate:hc0a800731udp1694498815192.168.0.11550206typhost

其中,m行描述语音传输的本地端口,c行描述本地ip,a行描述候选通信地址,srflx表示该候选地址是反射地址。

步骤4,被叫客户端获取主叫候选通信地址,主叫客户端获取被叫候选通信地址:

步骤4a,被叫客户端从invite请求中分离出sdp描述,然后从sdp描述中读取出主叫候选通信地址;

所述invite请求是主叫客户端通过服务器转发给被叫客户端的,用于发起sip会话请求。读取是指将候选通信地址的ip地址和端口号,放入网络穿越模块创建的候选通信地址结构体中。

步骤4b,主叫客户端从200ok响应中分离出sdp描述,然后从sdp描述中读取出被叫候选通信地址;

所述200ok响应是被叫客户端通过服务器转发给主叫客户端的,用于响应sip会话请求。

步骤5,主叫客户端获取被叫媒体流传输地址,被叫客户端获取主叫媒体流传输地址:

步骤5a,主叫客户端向被叫客户端发起地址协商会话:

主叫客户端向被叫候选通信地址发起探测,查询可用通信地址是否存在,若是,则对可用通信地址进行分级,得到最优可用通信地址,并将最优可用通信地址作为被叫媒体流传输地址,否则,对被叫媒体流传输端口进行预测,得到被叫媒体流传输地址。

所述的探测是指向被叫候选地址发送报文,如果能够发送成功,则此被叫候选地址是可用通信地址。

所述的查询是指对所有被叫候选通信地址进行探测。完成查询后,如果存在可用通信地址则对可用通信地址进行分级;如果不存在可用通信地址,则对被叫媒体流传输端口进行预测。

所述的对可用通信地址进行分级,实现步骤为:将与本机地址处于相同局域网的可用通信地址作为第一类地址,与本机地址处于不同局域网的可用通信地址为第二类地址,若第一类地址存在,则将其中探测时延最小的地址作为最优可用通信地址,若第一类地址不存在,则将第二类地址中探测时延最小的地址作为最优可用通信地址。

所述的对被叫媒体流传输端口进行预测,实现步骤为:

步骤5a1,主叫客户端依次创建三个绑定有同一本地ip和端口的socket,并通过第一个socket和第三个socket分别向服务器发起stun探测,得到第一个socket对应的公网映射端口号porta1、第三个socket对应的公网映射端口号porta3和主叫公网映射ip;

步骤5a2,服务器将porta1、porta3和主叫公网映射ip发送至被叫客户端;

步骤5a3,被叫客户端计算porta1和porta3的平均端口号porta2;

步骤5a4,被叫客户端向端口porta2发起探测,查询是否能够建立通信,若是,则把主叫公网映射ip和端口porta2作为主叫媒体流传输地址,否则,被叫客户端生成一个处于porta1和porta3之间的随机整数作为端口号,并向此端口发起探测,重复对随机产生端口发起探测,直到找到可以建立通信的端口porta4,并把主叫公网映射ip和端口porta4作为主叫媒体流传输地址。

所述步骤5a4中使用随机端口进行探测的时候,需要使用一个定时器,在规定时间内如果还没找到可以建立通信的端口号,则终止端口的探测,并提示端口预测失败。

步骤5b,被叫客户端向主叫客户端发起地址协商会话:

被叫客户端向主叫候选通信地址发起探测,查询可用通信地址是否存在,若是,则对可用通信地址进行分级,得到最优可用通信地址,并将最优可用通信地址作为主叫媒体流传输地址,否则,对主叫媒体流传输端口进行预测,得到主叫媒体流传输地址。

所述的探测是指向被叫候选地址发送报文,如果能够发送成功,则此被叫候选地址是可用通信地址。

所述的查询是指对所有被叫候选通信地址进行探测。完成查询后,如果存在可用通信地址则对可用通信地址进行分级;如果不存在可用通信地址,则对被叫媒体流传输端口进行预测。

所述的对可用通信地址进行分级,实现步骤为:将与本机地址处于相同局域网的可用通信地址作为第一类地址,与本机地址处于不同局域网的可用通信地址为第二类地址,若第一类地址存在,则将其中探测时延最小的地址作为最优可用通信地址,若第一类地址不存在,则将第二类地址中探测时延最小的地址作为最优可用通信地址。

所述的对被叫媒体流传输端口进行预测,实现步骤为:

步骤5b1,被叫客户端依次创建三个绑定有同一本地ip和端口的socket,并通过第一个socket和第三个socket分别向服务器发起stun探测,得到第一个socket对应的公网映射端口号portb1、第三个socket对应的公网映射端口号portb3和被叫公网映射ip;

步骤5b2,服务器将portb1、portb3和被叫公网映射ip发送至主叫客户端;

步骤5b3,主叫客户端计算portb1和portb3的平均端口号portb2;

步骤5b4,主叫客户端向端口portb2发起探测,查询是否能够建立通信,若是,则把被叫公网映射ip和端口portb2作为被叫媒体流传输地址,否则,主叫客户端生成一个处于portb1和portb3之间的随机整数作为端口号,并向此端口发起探测,重复对随机产生端口进行探测,直到找到可以建立通信的端口portb4,并把被叫公网映射ip和端口portb4作为被叫媒体流传输地址。

所述步骤5b4中使用随机端口进行探测的时候,需要使用一个定时器,在规定时间内如果还没找到可以建立通信的端口号,则终止端口的探测,并提示端口预测失败。

步骤6,主叫客户端和被叫客户端进行媒体流传输:

主叫客户端中的媒体处理模块向被叫媒体流传输地址发送媒体流,同时被叫客户端中的媒体处理模块向主叫媒体流传输地址发送媒体流。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1