1、SIP服务器测试工具SIPp使用指导SIP服务器性能测试工具SIPp使用指导 Contents1 安装及概述: 11.1 SIPp安装 11.2 SIPp使用 31.2.1 uac.bat: 31.2.2 data.csv: 41.2.3 uac.xml: 42 常见问题: 82.1 uas.bat 82.2 uas.xml 93 操作截图: 133.1 uac: 133.2 uas: 151 安装及概述:SIPp是一个测试SIP协议性能的工具软件。这是一个GPL的开放源码软件。 它包含了一些基本的SipStone用户代理工作流程(UAC和UAS),并可使用INVITE和B YE建立和释放多个
2、呼叫。它也可以读XML的场景文件,即描述任何性能测试的配置文件。它能动态显示测试运行的统计数据(呼叫速率、信号来回的延迟,以及消息统计)。周期性地把CSV统计数据转储,在多个套接字上的TCP和UDP,利用重新传输管理的多路复用。在场景定义文件中可以使用正规表达式,动态调整呼叫速率。 SIPp可以用来测试许多真实的SIP设备,如SIP代理,B2BUAs,SIP媒体服务器,SIP/x网关,SIP PBX,等等,它也可以模仿上千个SIP代理呼叫你的SIP系统。SIPp的网址:1.1 SIPp安装SIPp提供Linux,Windows和HPUX平台的版本。Windows平台上的安装很简单,下面说一下L
3、inux下的安装。首先,可以从 下载最新版的SIPp,解压之后就得到一个rpm文件,你可以使用rpm命令来完成安装。如果你拿到的是绿色版的SIPp,那么你需要对其重新编译才能使用。SIPp是用C+写的,因此系统必须支持G+才可成功编译。SIPp支持四种不同的安装模式:1) 没有TLS支持与密码验证支持:a) # tar -xvf sipp-1.1rc6.tar.gzb) # cd sipp-1.1.rc6c) # makeMake 出来的sipp文件就是一个可执行的文件,只需要搭配场景xml文件与csv文件即可进行SIP测试,这是最常用的安装。2) 拥有TLS支持与密码验证支持,但是不支PCA
4、P语音播放:a) # tar -xvf sipp-1.1rc6.tar.gzb) # cd sipp-1.1.rc6c) # make ossl 这样编译出来的文件就加入了TLS至于与密码验证支持功能sipp软件了。3) 支持PCAP Play,但是没有密码验证支持:(PCAP Play即为可以进行RTP语音,但是没有407 AUTH验证)a) # tar -xvf sipp-1.1rc6.tar.gzb) # cd sipp-1.1.rc6c) # make pcapplay4) 支持PCAP 声音文件播放,而且支持密码验证支持:(支持407 auth验证支持)a) # tar -xvf s
5、ipp-1.1rc6.tarb) # cd sipp-1.1.rc6c) # make pcapplay_ossl1.2 SIPp使用用SIPp做测试的时候需要准备五个文件:uac.bat, uas.bat, uac.xml, uas.xml, data.csv。uac.bat:调用sipp命令,并传入相应参数的批处理文件,模拟UAC(例如主叫)。uas.bat:调用sipp命令,并传入相应参数的批处理文件,模拟UAS(例如被叫),当然也可不准备此文件直接输入sipp命令执行程序,但是写成文件执行更加方便可靠。uac.xml:根据需要编写的uac侧的sip信号流程。uas.xml:根据需要编写
6、的uas侧的sip信号流程。data.csv:用于uac.xml和uas.xml中需要引入的相应数据。下面就举例来说明这五个文件的编写方法和用法。1.2.1 uac.bat: 例:sipp -sn uac 172.31.89.4:5060 -r 1 -rp 3000 -inf data.csv -p 7098 -i 172.31.89.242 -s 8001 -sf uac_onecall.xml m 1000 l 900各个参数说明:172.31.89.4:5060:远端地址和端口(在脚本中用remote_ip,remote_port引入)-r 1 -rp 3000:每三秒钟发一个呼-inf
7、 data.csv:引入数据配置文件-p 7098:本地端口(在脚本中用local_port引入)-i 172.31.89.242:本地地址(在脚本中用local_ip引入)-s 8001:被叫号码(在脚本中用service引入)-sf uac_onecall.xml:引入脚本文件,根据需要模拟的呼叫流程编写-sn uac :执行默认的uac流程,如需执行自己编写的流程文件,命令中应不含此参数-m 1000:发送1000次呼叫后停止并退出。-l 900 :最大同时保持呼叫量,默认值为3*caps值*呼叫时长,当因种种原因导致现存呼叫总数达到此值时,SIPp将停止产生新的呼叫,等待现存呼叫总数低
8、于此值时才继续产生呼叫。1.2.2 data.csv:例:SEQUENTIAL8000;第一行为取号码方式,通常为SEQUENTIAL或RANDOM此例中只有一个数据,引入时用field0,如果有多个数据,用分号隔开,在引用时编号递增如field1,field2。1.2.3 uac.xml:例: !CDATA INVITE sip:serviceremote_ip SIP/2.0 Via: SIP/2.0/transport local_ip:local_port;branch=branch;rport Allow: INVITE,CANCEL,ACK,BYE,OPTIONS,REFER,NO
9、TIFY,MESSAGE,SUBSCRIBE,INFO From: field0 ;tag=call_number To: service Call-ID: call_id CSeq: 1 INVITE Contact: Max-Forwards: 70 Content-Type: application/sdp Content-Length:len v=0 o=field0 0 0 IN IP4 local_ip s=SIP Call t=0 0 c=IN IP4 local_ip m=audio media_port RTP/AVP 0 a=rtpmap:0 PCMU/8000 注:1需要
10、sipp命令赋值的参数,请参考关于uac.bat的说明local_ip、local_port、remote_ip、remote_port、service2sipp自动检测生成的参数:call_number、call_id、cseq、len、branch3从数据配置文件引入的参数,请参考data.csv,第一个值为field04CSeq: 1 INVITE:此处本来应该写成CSeq: cseq INVITE,而在对应的ACK中写成CSeq: cseq ACK,但在INVITE和ACK的中间夹杂有PRACK的时候,ACK如果写成上述形式,将不能与INVITE对应,所以可以写死。5. 在测试业务时,
11、应在头域中添加以保证呼叫会从AS路由到被叫,否则AS会发消息到默认的地址。 注:按照预期,发出INVITE之后有可能受到100 Trying,也有可能收不到,所以加上可选标记 注:此时如果收到180以外的响应,会异常退出。 !CDATA ACK sip:serviceremote_ip SIP/2.0 Via: SIP/2.0/transport local_ip:local_port;branch=branch;rport last_From: last_To: Call-ID: call_id Contact: CSeq: 1 ACK Max-Forwards: 70 Content-Le
12、ngth: 0 注:发送请求的时候不需要也不可能重新填写所有字段(比如说From字段是不需要,因为一个dialog里的From字段都是相同的;而To字段是没办法自己填写,必需从上一个响应中引入,因为To-tag是远端加上的,本地并不知道),所以可以用last_字段名的方式从上一个消息中取得。通常From,To字段从上一个消息中取得,200的ACK时,Via从初始INVITE拷贝就可以,此时branch参数会自动生成跟初始INVITE不一样的值;非200的ACK时,采用从上一个消息引入的方式。 注:在通话状态维持30秒,以模拟实际通话持续通话的时间。 注:在通话状态如果有需要的话可以发送媒体流。
13、前提是在相应的目录下有媒体流文件 注:加入retrans参数之后可在没收到响应的情况下,在设定的时间之后重传,此例中为500毫秒。 2 常见问题:1Unable to bind main socket, errno = 125。想绑定的本地端口已经被占用,换一个应该就可以了。2、 while expecting 180 response, received SIP/2.0 200 OK脚本中在发出INVITE之后要收100或者180,结果直接就收到了200。可以在180后面也加上optional=true就行。3、消息发出后无响应需要确认远端即服务器端系统正常,并且uac.bat中的远端地址和
14、端口正确,另外可能需要将本地地址加入为服务器的可信节点。4、Cant open PCAP file 711.pcap.需要确认媒体流文件确实存在且路径正确,并且媒体流文件可用。2.1 uas.bat例:sipp -sn uac 172.31.89.4:5060 -inf data.csv -i 172.31.89.242 -p 8890 -s 8001 -sf uas_onecall.xml关于各个参数的说明请参考uac.bat的说明2.2 uas.xml例: 正则表达式使用说明:在本例中原本是不需要使用的,但在很多情况下需要使用,所以列出来说明一下。当sequence中带有PRACK时,UA
15、S发送INVITE的200 OK时,某些字段(比如Via和Cseq)则不能使用last_字段名方式从上一个收到的消息中引入,因为此时上一个消息是PRACK,而不是INVITE,所以需要先将INVITE的这两个字段保存下来供以后使用。上面的用法便是将INVITE的CSeq字段的值保存为数字6,在以后发送INVITE的200 OK的时候使用,方式为:CSeq: $6 注:基本上所有的字段都可以从上一个消息中引入。 !CDATA SIP/2.0 180 Ringing last_Via: last_From: last_To:;tag=call_number last_Call-ID: last_C
16、Seq: last_Record-Route: Contact: P-Asserted-Identity: service Content-Length:len 注:To字段从上一个消息中引入的时候,需要添加To-tag,call_number为sipp自动生成的,在连续呼叫的时候会加1。从上一个消息引入相关字段的时候,如果上一个消息没有这个字段,则在本消息中也不会有。 !CDATA SIP/2.0 200 OK last_Via: Allow: INVITE,CANCEL,ACK,BYE last_From: last_To:;tag=call_number last_Call-ID: la
17、st_CSeq: last_Record-Route: Contact: P-Asserted-Identity: service Content-Type: application/sdp Content-Length:len v=0 o=service 0 0 IN IP4 local_ip s=SIP Call t=0 0 c=IN IP4 local_ip m=audio 10000 RTP/AVP 0 a=rtpmap:0 PCMU/8000 注:100,180,200的上一个消息都是INVITE消息,所以此时To字段中还是要加入To-tag,并且在一个dialog中call_num
18、ber是相同的,所以能与180的To-tag保持一致。 !CDATA SIP/2.0 200 OK last_Via: last_From: last_To: last_Call-ID: last_CSeq: Contact: Content-Length: 0 注:cantact字段一定不能从上一个消息中引入。 3 操作截图:3.1 uac:在启动脚本之后可以通过”+”, ”-”, ”*”, ”/”来增加或者减少cps。+ key to increase call rate by 1 - key to decrease call rate by 1 * key to increase call rate by 10 / key to decrease call rate by 10 另外也可以按”p”来暂停呼叫,如果需要继续呼叫只需再按一次”p”。停止呼叫则按”q”,按下”q”之后sipp在当前呼叫全部结束之后终止。如果需要强行终止当前呼叫,则可按下”q”两次,sipp会自动发送cancel或bye之后退出。uac结果统计:3.2 uas:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1