移动互联网SIP在线状态方案分析.pdf
文本预览下载声明
修修己己度度人人
专专注注于于移移动动互互联联网网音音视视频频通通信信领领域域
移移动动互互联联网网SSIIPP在在线线状状态态方方案案分分析析
分 : sip proxy 2013-12-14 00:28 1920人阅读 评论 (3) 收藏 举报
SIPvoip在线状态移动互联网
经过近10年的发展,SIP己发展成做音视频通信的首选标准协议。如今在移动互联
网背景下,SIP得到广泛应用的同时也面临诸多挑战,我们今天要聊的在线状态就是其中之一。SIP
是一个非常灵活的协议,可应用于音视频、IM等场景,基于其高扩展性,实际可用于任何数据的通
信协商。在其主要应用场景音视频通信中,为保证用户体验,在线状态的准确显得尤为重要。
SIP协议在定义之初,主要是基于UDP进行设计。在线和离线是靠SIP REGISTER 请
求完成的,当UA执行REGISTER后,服务器端会在返回的200OK消息中expires参数告知客户端此次注
册有效期,UA需要在expires到期之前进行续约,如果到期未续约,服务器即认为客户端离线,在
互联网时候这看上去没有什么问题,因为用户的网络多数情况下不会异常中断。但加上移动两个
字,这一切就变得很糟糕了:用户的网络会随时中断,从一个WIFI自动换到另一个WIFI,进电梯出
电梯,在移动设备上,断网那是很正常的事,不断才不正常。如果用户刚发送REGISTER后就断网
了,那此用户的假在线状态将持续到整个expires周期。下面分别就TCP和UDP探讨一种可行性方
案。
理想中的在线状态即服务端能以最短的时间探知客户端状态变化,基于UDP无
连接的特点,一个看似简单有效的方法缩短续约周期,如将REGISTER周期改为60秒,同时客户端断
线重连,这样用户状态有效期只有60秒,一但超过60秒未注册就将用户状态置为离线,这样至少存
在三个严重问题:
1.浇釕髞 ⅹSIP单讴宒或丆欧泮冒冓劦丐www-authenticate鉺杉﹦霆覇耝贿2K巬叹皊浇釕﹦丆夯尷
霆覇3M巬叹﹦迟栽皊轵仼甮戽台脃敄弉ザ
2.犼怇叞曺颗玍 ⅹ圮3G罗绢丑﹦柖亡堀竟传寿UDP匋迡衒缙孞 ﹢宒兮昵眑迖萫啌忉惋皊 ﹣﹦伞兎纭
沧朏TCP髞﹦扆仫UDP廼迥夭昵靤帾歩帾皊云惋﹦宨戽竵圮泮冒呮朥揖剓10秘迡衒泮冒﹦乥专脃俣诇
朓劧噮脃圮10秘冋掫攼制﹦囦歪圮宨戽竵皊妃发竵兼圮绅犼怇尌宿昙刀玶叓夓叞匜ザ
3.丐靨皊呮朥偍评二UDP NAT昦尊朏敎朥臹尗夭五60秘﹦佌迟丰偍评靤帾专靦谷ザ圮室陋庚甮玵墉
丳﹦圃冋柖尕迖萫啌钎寿柖亡竵叩皊朏敎朥昵8秘﹦雄遙戗仲覇抐绳纬呮朥政或8秘 ‐
针对以上问题,RFC 5626提出STUN keepalive方案,使用STUN来代替SIP的
REGISTER保话NAT,因此可以将SIP REGISTER的周期加长。同时服务器需要做STUN保活检测,即多
少时间内累计多少次未收到客户端STUN保活包即认为客户端离线,客户端也需要做同样检测,多少
次未收到STUN 响应包就认为断线并重新注册,具体次数在RFC中有定义,也可以根据实际情况调
整。这样对前面前两个问题能够比较好的改善,但第三个问题呢? 这里就需要实现UDP NAT保活自
适应了,可先使用默认间隔发次STUN包,收到响应包发现NAT地址变化那就说明保话时间过短,然
后再尝试一个更短的间隔时间,当然具体算法可以再进行优化。服务器端支持STUN keepalive的有
opensips、kamailio,SIP UA我知道pjsip支持,其他未考证。
根据多个项 目经验,基于中国网络的特点,移动互联网SIP使用TCP传输会更适合
一些,对于前面同样的问题,RFC 5626也提出TCP sip keepalive方案。具体是客户端
以 ‘\r\n\r\n’作发送PING给服务器,服务器以\r\n为PONG回复。并且TCP是面向连接的,本身
也可以使用TCP 协议层的keepalive,但TCP协议层的keepalive缺点是只能检测单方向的连接是否
正确,如果要检测两方那通信双方都需要开启keepalive功能。opensips/kamailio同样支持 TCP
sip keepalive方案。在opensips/kamailio上实现这样一个功能,当客户端TCP连接断开时,自动
将客户端的注册信息删除掉,这样实现了当服务器端TCP连接断开时将用户设置为离线,同时客户
端也需要使用TCP sip keepalive检测到网络断线后自动进行重连,这样就可以将注册周期改到很
长,且只要TCP
显示全部