SIP协议压缩方案-SIP二进制化实现

       在移动终端和移动网络的双重推动下,移动互联网发展非常迅速。SIP协议做为音视频通信的首选标准,应用也越来越广泛。如众多明文协议一样,SIP协议具有非常好的扩展性,但由此带来的数据包却非常大,如一个普通的SIP包就有500Bytes左右。如果用SIP协议MESSAGE请求发送文本聊天消息,发一句“你好”,消息头都可能达到600Bytes,在以流程计费的移动互联网中,这样的方式就直接在浪费金钱。一个支持ICE的SDP包通常会超过1500Bytes,在实现应用中,都可能达到3000Bytes。在移动互联网中,MSS通常在1360Bytes左右,传输大于MSS的数据都会被分包,在电信3G网络实测中,如果某基站连接用户较多的话,一个MSS大小的TCP包通常需要重传两到三次,我曾遇到一个3K的TCP包花费40秒服务器才接收完整,抓包发现其中每个分片都被重传多次,在音视频通信应用中,延迟40秒才收到的数据包,一切都为时已晚。而如果能将SIP协议压缩到一个MSS以内,是提升网络传输效率有效办法。
       描述SIP标准压缩方式的是RFC3468,其采用RFC3320sigcomp压缩方法,但效果并不理想,本文主要描述SIP协议二进制化压缩方法。随便提下另一种较简单的方法采用整包压缩,即将整个SIP协议包使用如zlib这样的技术进行压缩,压缩比只能达到50%-70%,其整体效果并不明显,但相比二进制开发难度要小,周期也会更短。这里我们主要讨论一种将SIP进行二进制化的实现方法。
分析像TCP/UDP/RTP/RTCP这些二进制协议的包头,其中像端口、IP、标志这些数据,都是以二进制的方式出现的,比如一个IP地址只固定的4bytes,一个端口只需要2bytes,标志位都是以bit的方式出现的,一个bytes都可以表示八种情况,这是非常节省空间的,而像SIP这样的文本协议,所有IP、端口、标志位都是文本的,浪费的空间不言而喻;比如SIP发送一个REGISTER请求,其method都需要占8个字节,而其实SIP的Method一共只有15个左右,其实5个bits都完全足够,剩下的3个bits还可以拿来表示TCP/UDP/TLS等,这也就构成了SIP二进制压缩的基础,极致情况下压缩比可达到15%-20%。下面就详细讨论下二进制压缩的具体实现。
为保证二进制化与传输层解偶,需要同时支持TCP和UDP方式传输,因TCP是流方式传输,UAS需要从数据流中将SIP消息完整的提取出来࿰
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值