把sipp这个性能测试工具的笔记独立出来,更多VOIP知识参考VOIP学习笔记。
测试工具sipp
官方介绍:
SIPp包含基本的SipStone User Agent场景 (UAC and UAS),支持测试的动态显示 (call rate, round trip delay, message statistics)
配置文件基于XML
安装
# CentOS
yum install sipp
# Ubuntu
sudo apt-get install -y pkg-config dh-autoreconf ncurses-dev build-essential libssl-dev libpcap-dev libncurses5-dev libsctp-dev lksctp-tools cmake libgsl-dev git
git clone https://github.com/SIPp/sipp.git
cd sipp
./build.sh --full
sudo cp sipp /usr/local/bin/
命令行使用
sipp remote_host[:remote_port] [options]
- 场景选项
- -sn 使用内置的场景,默认使用uac,即标准SipStone UAC
- -sd 导出内置场景
- -sf 使用指定场景配置文件
- 地址和端口选项
- -i 指定本地IP
- -p 指定本地端口,默认随机端口
- 呼叫速率选项
- -l 限制并行呼叫数,默认值: 3 * call_duration (s) * rate
- -m 在呼叫次数达到后退出
- -r 场景执行速度,默认1秒10次
- -r 10 -rp 5s 则限定为每5秒10 calls
- -rp (Rate Period,默认毫秒数)
- 调试/日志选项
- -trace_msg : 记录收发消息
- -trace_err : 记录错误日志
- 其他常用选项
- -s 设置请求地址的用户名部分,默认值’service'
- -t l1 指定协议为TLS
- -rsa 指定远程收发消息的Proxy地址
- -ap 设置认证密码,默认password
# 示例
sipp -h
# 在同一台机器执行下面2条命令,Ctrl + C 取消运行
sipp -sn uas
sipp -sn uac 127.0.0.1
# 导出某场景
sipp -sd uac_pcap >> integrated_uac_pcap_scenario.xml
# 针对用户001执行5次
sipp 192.168.1.100 -sf options.xml -m 5 -s 001
场景定义和配置
场景命令及参数
- <send> 发送消息或响应
- retrans 设置T1计数器
- <recv> 等待接收消息或响应
- response 期望响应码
- request 期望请求
- optional 收到消息是否可选
- 可以包含action
- nop 用于包含action
- 通用参数
- crlf 在SIPp消息下显示空行
- next 处理完后跳转到下个命令/label
<![CDATA 和 ]]>之间的内容会在关键字被替换后发送给远程系统
<?xml version="1.0" encoding="us-ascii"?>
<scenario name="Options">
<send>
<![CDATA[
OPTIONS sip:[service]@[remote_ip] SIP/2.0
Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
Max-Forwards: 70
To: <sip:[service]@[remote_ip]>
From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[call_number]
Call-ID: [call_id]
CSeq: 1 OPTIONS
Contact: <sip:sipp@[local_ip]:[local_port]>
Accept: application/sdp
Content-Length: 0
]]>
</send>
</scenario>
数据驱动
sipp … -inf client.csv
client.csv
SEQUENTIAL
test0;192.168.178.98;[authentication username=test password=test0];
限制
- 在一个SIP会话/场景只能处理一个Call-ID
- 痛苦的XML配置和调试
音频编解码
G.711也称为PCM(脉冲编码调制),是ITU-T订定出来的一套语音压缩标准,主要用于电话。它主要用脉冲编码调制对音频采样,采样率为8k每秒。它利用一个 64Kbps 未压缩通道传输语音讯号。起压缩率为1:2,即把16位数据压缩成8位。G.711是主流的波形声音编解码器。G.711 标准下主要有两种压缩算法:U-law algorithm和A-law algorithm,其中,后者是特别设计用来方便计算机处理的。
wav2rtp:
# Ubuntu
git clone https://github.com/imankulov/wav2rtp.git
# make distclean
sudo apt-get install libortp-dev libsndfile1-dev libspeex-dev libpcap-dev libgsm1-dev autoconf
./init.sh && ./configure LIBS="-lm" --prefix=/opt/wav2rtp && make
sudo make install
sox 1minute.wav -r8000 1min.wav
/opt/wav2rtp/bin/wav2rtp -f 1min.wav -t 1min.pcap -c PCMA
扩展阅读
- sipp 官网 / pysipp - Python扩展 / sippy_cup - Ruby扩展
- 介绍文章: 1 / 2 /3
- 一些场景例子:1 / 2 / 3
- 相关库: rtpbreakr / Cisco libSRTP
- Kamalio Performance test / kamailio registrations
- How to decode SIP over TLS with Wireshark