经过近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不断那用户的注册信息就一直有效。这种方案相比UDP更节省流量,客户端和服务器都能更快/有效的判断网络是否断线。对于TCP NAT保活也只有使用自适应的方法,TCP可以同时建立N个连接,然后以不同的周期发送keepalive包,以能够成功保活的最长周期为应用值,此方法好像被某公司申请过专利了。

也许4G网络的到来这一切就都迎刃而解,与之而来的是视频通信的春天,还是技术壁垒的恶梦?

参考资料:
http://tools.ietf.org/html/rfc5626

新浪微博:@安静的发狂者
邮箱:dennis.yu(@)live.cn
QQ:229675152
专注于移动互联网音视频通信,欢迎交流;本文为原创,转载请保留版权并联系作者

kamailio/opensips 技术交流QQ群:118791050

移动互联网SIP在线状态方案分析相关推荐

  1. php负载均衡原理_Java开发大型互联网架构深入负载均衡原理之方案分析

    引言 负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用性. 负载均衡,英文名称为Load Balan ...

  2. 北大国际医院:基于互联网医疗的移动诊疗方案分析与设计

     1  前言 在北大国际医院,对互联网医疗的理解与应用结合了自身的特点及优势.一方面,北医系统内诸多主任专家.学科带头人作为科室骨干定期在国际医院出诊.同时,提供优质的医疗服务和就医环境是医院的重 ...

  3. 【报告分享】产业互联网发展趋势及机会分析报告.pptx(附下载链接)

    大家好,我是文文(微信号:sscbg2020),今天给大家分享一份产业互联网的干货报告<产业互联网发展趋势及机会分析报告.pptx>,关注产业互联网.数字化转型及创业的伙伴别错过了- 在小 ...

  4. 互联网医疗行业PEST分析实践

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...

  5. 全球工业互联网平台应用案例分析报告

    近年来,全球工业经济形势发生深刻变化,能源和原材料价格持续攀升,资源环境约束进一步强化,工业竞争格局深度调整,以人工智能.物联网.云计算等新一代信息技术与工业融合为主的第四次工业革命悄然来袭,工业企业 ...

  6. 2019年互联网高频Java面试题指南!互联网升职加薪方案!

    <2019年互联网高频Java面试题指南!互联网升职加薪方案!> 2019年我们只聊面试!让你能够随时准备升职加薪!少刷点抖音头条,少喝点鸡汤毒药,少研究些成功学,这些给不了你什么,你也得 ...

  7. amf组网_5G独立组网与非独立组网部署方案分析

    原标题:5G独立组网与非独立组网部署方案分析 5G独立组网与非独立组网部署方案分析* 朱颖,杨思远,朱浩,王海梅,张晶 (中国信息通信研究院,北京100089) [摘要]5G阶段移动核心网引入新型架构 ...

  8. 直播实录|如何使用百度大脑EasyDL构建互联网内容安全方案?

    如何使用EasyDL构建互联网内容安全方案 时间:2020年6月2日 讲师:百度AI技术生态部高级产品经理 Nathan [直播回放] 如何使用EasyDL构建互联网内容安全方案:https://ww ...

  9. 数据运营36计(四):互联网广告渠道归因分析之Sharply Value

         作者:糖甜甜甜      来源:DataGo数据狗 1. Shapley Value Shapley Values的原理是基于联合博弈论(coalitional game theory)的理 ...

最新文章

  1. 打印速度快点的打印机_佳能和爱普生打印机哪个好 高性价比打印机介绍【详解】...
  2. spark端口实验总结:
  3. python xlwt xlrd 写入一行_Python Excel文件的读写操作(xlwt xlrd xlsxwriter)
  4. 题解报告:hdu 1257 最少拦截系统(贪心)
  5. Kafka如何实现每秒上百万的超高并发写入?
  6. ^_^家园游记^_^
  7. 调用discuz编辑器发布帖子显示html代码的解决办法
  8. mysql8.0 linux 安装
  9. Drool7s kmodule的作用--系列02课
  10. 百度地图经纬度获取标点与城市编码
  11. 软件测试人员考核办法
  12. JS不跨域操控网易云音乐外链播放器
  13. st语言 数组的常用方法_LINEST函数使用方法介绍
  14. Subtitle-ass-srt
  15. 区域云LIS检验系统源码 商业级LIS全套源代码 预留标准HIS、仪器数据接入接口
  16. UnityEditor之属性1
  17. 【c#】继承和多态的一点知识点
  18. [VulnHub靶机]Lampiao_脏牛提权
  19. 基于校园网的SSM高校财务预约报账J2EE报销系统javaweb
  20. 融360蒋宏:自动化特征工程和自动建模在风控场景的应用

热门文章

  1. chatgpt赋能python:Python计算球体表面积和体积
  2. 3D乌托邦:论CRPG游戏的浸没体验
  3. 网络电视盒子哪个好?十年老烧分享口碑电视盒子推荐
  4. JPPNet-- 萌新的深度学习入门之路
  5. [原创]发布一个原创作品:Mdisk 把126邮箱变网络硬盘的程序
  6. 2022抖音伤感文案集
  7. LeetCode每日练习
  8. 页面弹窗效果layui里的插件layer
  9. 【项目合作】文字或音频驱动人像
  10. 关于解耦以及SDN与NFV的解释说明