SIP软交换相关介绍

SIP相关介绍

一:SIP 消息介绍

1:SIP请求消息

 

2:SIP响应消息

3:INVITE 消息

4:SDP

  1. v=:Version,表示协议的版本号。
  2. o=:Origin,表示源。值域中各项(以空格分隔)的涵义依次是username(用户名)、sess-id(会话ID)、sess-ver-sion(会话版本号)、nettype(网络类型)、addrtype(地址类型)、unicast-address(单播地址)。
  3. s=:Session Name,表示本SDP所描述的Session的名称。
  4. c=:Connecton Data,连接数据。其中值域中以空格分配的两个字段分别是网络类型和网络地址,以后的RTP流就会发到该地址上。注意,在NAT环境中如果我们要解决RTP穿越问题就要看这个地址。NAT问题将在第9章节中讲到。
  5. b=:Badwidth Type,带宽类型。
  6. t=:Timing,起止时间。0表示无限。
  7. m=:audio Media Type,媒体类型。audio表示音频,8396表示音频的端口号, RTP/AVP是传输协议;后面是支持的Codec类型,与RTP流中的Pay-load Type(载荷类型)相对应,在这里分别是8、0、98和101,8和0分别代表PCMA和PCMU,它们属于静态编码,因而有一一对应的关系,而对于大于95的编码都属于动态编码,需要在后面使用“a=rtpmap”进行说明。
  8. a=:Attributes,属性。它用于描述上面音频的属性,如本例中98代表8000Hz的ILBC编码,101代表RFC2833DTMF事件。a=sendrecv表示该媒体流可用于收和发,其他的还有sendonly(仅收)、recvonly(仅发)和inac-tive(不收不发)。

5:Sip 中的 brahch 、tag 、 CSeq

  • Transaction(事务)  事务发生于客户端和服务器端之间,包含从客户端发出请求给服务器,到服务器响应给客户端的最终消息(non-1xx message)之间的所有消息. 如果请求是一个"Invite"消息,并且最终的响应是一个non-2xx消息,那么该事务包含一个"Ack"响应消息.如果服务器的响应是一个2xx消息,那么,随后的ACK是一个单独的事务.

brahch是一个事务ID(Transaction ID),用于区分同一个Client 所发起的不同Transaction。

对于遵循RFC3261规范的实现,这个branch参数的值必须用magic cookie”z9hG4bK”打头. 其它部分是对“To, From, Call-ID头 域和Request-URI”按一定的算法加密后得到。

这7个字母是一个乱数cookie(定义成为7位的是为了保证旧版 本的RFC2543实现不会产生这样的值),这样服务器收到请求之 后,可以很方便的知道这个branch ID是否由本规范所产生的(就 是说,全局唯一的)。

  • Dialog(会话) 会话是两个UAs(user agent) 之间持续一段时间的端到端(peer-to-peer)的SIP 关系. 一个会话由一个Call-ID, 一个local tag 和 一个remote tag来标识.会话过去也叫做 "call leg".

对话都是有对话ID来标识的,包括Call-ID,一个本地标签(From-tag)和一个远端标签(To-tag)。即是说三者确定了某个对话的存在。

  • CSeq是一个序号,由于UDP是不可靠的协议,在不可靠的网络上可能丢包,所以有些包需要重发,该序号则可以防止重发引起的消息重复。

CSeq序列号。CSeq是按照各自方向严格增1的值,如果为空则设 为初始值。

二:RTP & RTCP

在完成SIP及SDP协商后,真正的语音数据是在RTP协议中传送的。即双方在前面的SDP协商中都已经获得了对方的IP地址、端口号,以及支持的媒体类型。接下来,就是将本地的媒体数据以指定的编码格式进行编码并通过RTP协议发送到对方去。

  • RTP协议的全称是Real-time Transport Protocol,即实时传输协议,它是由IETF的多媒体传输工作小组在RFC 3550中定义的。RTP协议详细说明了在互联网上传递音频和视频的标准数据包格式。
  • RTP协议用以传送实时数据。RTP协议通常运行在UDP层之上,二者共同完成运输层的功能。UDP提供复用及校验和服务,也就是通过分配不同的端口号传送多个RTP流。协议规定,RTP流使用偶数(2n)端口号,相应的RTCP流使用相邻的奇数(2n+1)端口号。因此,应用进程应在一对端口上接收RTP数据和RTCP控制数据,同时向另一对端口上接收RTP数据和RTCP控制数据。

三 DTMF

DTMF(Dual Tone Multi Frequency)就是双音多频,我们日常生活中拨打电话的过程中经常会用到,如拨打用户的分机号码,输入帐号和密码等。而随着IP电话的大量使用如何实现传送DTMF成为IP电话中的一个技术问题。 

SIP中检测DTMF数据的方法:SIPINFO、RFC2833、INBAND

1SIPINFO

为带外检测方式,通过SIP信令通道传输DTMF数据。没有统一的实现标准,目前以Cisco SIPINFO为标准,通过SIPINFO包中的signal字段识别DTMF按键。注意当DTMF为“*”时不同的标准实现对应的signal=*或signal=10。SIPINFO的好处就是不影响RTP数据包的传输,但可能会造成不同步。

2RFC2833

为带内检测方式,通过RTP传输,由特殊的rtpPayloadType即TeleponeEvent来标示RFC2833数据包。同一个DTMF按键通常会对应多个RTP包,这些RTP数据包的时间戳均相同,此可以作为识别同一个按键的判断依据,最后一包RTP数据包的end标志置1表示DTMF数据结束。另外,很多SIP UA 包括IAD都提供TeleponeEvent的设置功能如3CX PhoneBillion-IADZTE-IAD等默认的TeleponeEvent都为101,但可以人为修改,这时要求在进行RFC2833 DTMF检测之前需事先获取SDP协商的TeleponeEvent参数。

就是将DTMF数字按照一个的规则和格式组成一个数据包,然后封装到RTP中发送。接收端接收后进行解析,再还原成相应的DTMF信号,这种方式的优点是对丢包的容错性强以及识别差错率低。

3INBAND

为带内检测方式,而且与普通的RTP语音包混在一起传送。在进行INBAND DTMF检测时唯一的办法就是提取RTP数据包进行频谱分析,经过频谱分析得到高频和低频的频率,然后查表得到对应的按键。在选择压缩比很高码率很低的codec,比如G.723.1和G.729A等,建议不要使用INBAND模式,因为INBAND DTMF数据在进行复杂编解码后会产生失真,造成DTMF检测发生偏差或失败。

四:SIPp压力测试

1:SIPp介绍

  • SIPp 是基于SIP协议的性能测试工具. 它可以模拟各种UAC或者UAS的行为, 通过INVITE和BYE方法来建立和挂断通话.
  • 可以在XML的文件中, 建立各种性能测试的场景, 如:呼叫/88#转接等, SIPp可以解析该文件并执行, 还可以在场景文件中使用正则或者变量.
  • 可以实时显示测试中的各种统计参数(如:呼叫速率, 消息统计等),可以定时将统计结果写到CSV文件中, 可以实时调节呼叫速率.
  • SIPp可以用来测试很多SIP设备, 如SIP代理, B2BUAs, SIP媒体网关, SIP PBX等, 很适合模拟数千个坐席来呼叫SIP系统.
  • 手册:http://sipp.sourceforge.net/doc/reference.html#Foreword

2:SIPp的使用

1) SIPp:UAC(register)

注册分机:

./sipp  -sf mast_reg.xml -m 1 -p 15000

–loip 192.168.1.102 -xcip 192.168.1.102 -ap samton148 -s 18627180502 -fid 18625320000–aa -trace_err –bg

小技巧:

  • 注册和注销的命令基本一样, 只需要修改场景文件中的注册时间: Expires: 3600  => Expires: 0
  • 为了使测试能长时间执行, 需要将注册时间尽可能的定义久一些, 如 720000s(200个小时), 同时, 需要在PBX的sip.conf文件中, 定义最大的注册时间, maxexpiry=720000,默认值为3600.
  • –aa: 对INFO,UPDATE,NOTIFY消息自动回复200OK
  • –trace_err: 保存错误消息, 位于场景文件相同的目录

下, 文件名为<scenario filename>_<pid>_errors.log

类似选项(trace_msg, trace_stat, trace_rtt)

  • –bg: 置于后台执行 

2) SIPp:UAC(caller)

发起呼叫:

./Sipp–sf  mast_uac.xml -r 30 –rp 1s

-loip 192.168.1.102 -xcip 192.168.1.102 –ap samton148

–s 18627180502 -p 7000 –mp 7002 -fid 18625320000-m  1000

命令解析:  

1. 192.168.1.102: 服务器IP地址

2. –sf: 指定的场景文件

3. -r 30 –rp 1s:  每秒执行30次  (-rp 1s  == -rp 1000 )

4. –m: 总共执行的次数

5. –p: SIPp运行时绑定的端口, -mp: 绑定的媒体端口

6. –loip, -xcip, -ap, -s, -fid: (本地IP,远程IP,用户密码,被叫,主叫),用来替换场景文件中的变量

3) SIPp:UAS(callee)

接听来电:

./sipp -sf mast_uas.xml -p 15000 –mp 15002 –fid  18627180502

 -loip 192.168.1.102 -xcip 192.168.1.102 -aa

注意:

1. 做为UAS端的SIPp, 不需要远端服务器的参数

2. 做为被叫号码, 必需先注册

五:软交换系统

1)  ppx_softswitch

ppx_softswitch系统是一套轻便级软交换系统,软件构架如下图所示:

  • LibEdit:命令行交互基础库;
  • Sofia-SIP:Nokia开发的SIP开源协议栈,负责SIP消息解析和封装,SIP事物管理,SDP消息解析和封装等;
  • Core:软交换入口模块,负责配置文件的加载、所有模块的初始化和启动等;
  • Utils:基础功能函数库,比如log,socket,哈希表,MD5算法等常用函数集;
  • CLI(Command-Line Interface):命令行操作维护管理模块;
  • SCM(SIP Call Management):SIP会话管理模块;
  • Formats:语音文件的读取和写入;
  • Codes:音频编解码库集合;
  • MS(Media Streamer):媒体流会话管理,RTP协议解析和封装,录音处理等;
  • PBX:PBX业务逻辑处理模块;
  • Meeting:会议管理模块;
  • SynwayAdapter:三汇API接口适配提供和管理模块。

2) 呼叫流程

a) 呼入流程

b) 呼出流程

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TOMSER123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值