-
[Type text]
语音服务器性能测
试工具
SIPp
使用教程
Contents
1
概述:
.
.
..................................................
..................................................
.......................................
1
1.1
1.2
1.3
2
:
...............
..................................................
.............................................
2
:
.
..........................................
..................................................
................
2
:
.
..........................................
..................................................
.................
2
...........................
..................................................
.....................................
7
..............
..................................................
.................................................
7
uac
:
............
..................................................
..................................................
..
1
1
uas
:
............
..................................................
..................................................
..
1
4
常见问题:
...........
..................................................
..................................................
......................
6
2.1
2.2
3
操作截图:
...........
..................................................
..................................................
....................
1
1
3.1
3.2
1
概述:
SIPp
主要用于性能测试,
可以很方便的模拟
UAC
和
UAS
,
但是也经常用于异常测试和一些
特定场景的测试。
用
SIPp
做测试的时候需要准备五个
文件:
, , , ,
。
:调用
sipp
命令,并传入相应参数的批处理
文件,模拟
UAC
(例如主叫)
。
p>
:调用
sipp
命令,并传入相应参数的批处理文件,模拟
UAS
(例如被叫)
。
:根据需要编写的
uac
侧的
< br>sip
信号流程。
:根据需要编写的
uas
侧的
sip
信号流程。
:用于
和
< br>中需要引入的相应数据。
下面就举例来说明这五个文件的编写方法和用法。
[Type text]
[Type text]
1.1
:
例:
sipp
-sn
uac
172.31.89.4:5060
-r
1
-rp
3000
-inf
-p
7098
-i
172.31.89.242 -s 8001 -sf uac_
各个参数说明:
172.31.89
.4:5060
:远端地址和端口(在脚本中用
remote_
ip
,
remote_port
引入)
-r 1 -rp
3000
:每三秒钟发一个呼
-inf
:引入数据配置文件
-p 7098
:本地端口(在脚本中用
local_port
引入)
-i
172.31.89.242
:本地地址(在脚本中用
loca
l_ip
引入)
-s 8001
p>
:被叫号码(在脚本中用
service
引
入)
-sf
uac_
:引入脚本文件,根据需要模拟的呼叫流程编写
1.2
:
例:
SEQUENTIAL
8000;
此例中只有一个数据,引入时用
< br>field0
,如果有多个数据,用分号隔开。
1.3
:
例:
INVITE sip:[service]@[remote_ip]
SIP/2.0
Via: SIP/2.0/[transport]
[local_ip]:[local_port];branch=[branch];rport
[Type text]
[Type text]
Allow: INVITE,CANCEL,ACK,BYE,OPTIONS,REFER,NOTIFY,
MESSAGE,SUBSCRIBE,INFO
From:
To:
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
.需
要
sipp
命令赋值的参数,请参考关于
的说明
[local_ip]
p>
、
[local_port]
、
[remote_ip]
、
[remote_po
rt]
、
[service]
2
p>
.
sipp
自动检测生成的参数:
[call_number]
、
[call_id]
、
[cseq]
、
[len]
、
[branc
h]
3
.从数据配置文件引入的参数,请参考
,第一个值为
field0
4
.
CSeq: 1
INVITE
:此处本来应该写成
CSeq: [cseq]
INVITE
,而在对应的
ACK
中写
成
CSeq: [cseq] ACK
,但在
< br>INVITE
和
ACK
的中间夹
杂有
PRACK
的时候,
ACK
如果写成上述
形式,将不能与
INVITE<
/p>
对应,所以可以写死。
[Type text]
[Type text]
注:按照预期,发出
INVITE
之后有可能
受到
100
Trying
,也有可能
收不到,所以加上可
选标记
注:此时如果收到
180
以外的响应,会
异常退出。
ACK
sip:[service]@[remote_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-Length: 0
]]>
注:
发送请求的时候不需要也不可能重新填写所有字段
(比如
说
From
字段是不需要,
因
为一个
dialog
里的
From
字段都是相同的;
而
To<
/p>
字段是没办法自己填写,
必需从上一个响
应中引入,
因为
To-tag
是远端加
上的,
本地并不知道)
,
所以可以用<
/p>
[last_
字段名
]
< br>的方
[Type text]
[Type text]
式从上一个消息中取得。
通常
From
,
To
字段
从上一个消息中取得,
200
的
ACK
时,
Via
从初始
INVITE
拷贝就可
以,
此时<
/p>
branch
参数会自动生成跟初始
IN
VITE
不一样的值;
非
200
的
ACK
时,
采用从
上一
个消息引入的方式。
<
br> 之后要收 <
br>。
<
br>assign_to=
注:在通话状
态维持
30
秒,以模拟实际通话持续通话的时间。
注:
在通话状态
如果有需要的话可以发送媒体流。
前提是在相应的目录下有媒体流文件
BYE sip:[service]@[remote_ip]
SIP/2.0
Via: SIP/2.0/[transport]
[local_ip]:[local_port];branch=[branch];rport
[last_From:]
[last_To:]
Call-ID: [call_id]
CSeq: 2 BYE
Max-
Forwards: 70
Content-Length: 0
]]>
[Type text]
[Type text]
注:加入
retrans
参数之后可在没收到响应的情况下,在设定的时
间之后重传,此例中
为
500
毫秒。<
/p>
2
常见问题:
1
.
Unable to bind
main socket, errno = 125
。
想绑定的本地端口已经被占用,换一个应该就可以了。
2
、
while expecting '180' response, received 'SIP/2.0
200 OK
脚本中在发出
INVITE
100
或者
180
,
结果直接就收到了
200
可以在
180
后面也加
上
optional=
就行。
3
、消息发出后无响应
需要确认远端即服务器端系统正常,并且
中的远端地
址和端口正确,另外可能
需要将本地地址加入为服务器的可信节点。
[Type text]
[Type text]
4
、
Can't open PCAP
file ''.
需要确认媒体流文件确实存在且路径正确,并且媒体流文件可用。<
/p>
2.1
例:
sipp -sn uac
172.31.89.4:5060 -inf -i 172.31.89.242 -p 8890
-s 8001
-sf uas_
关于各个参数的说明请参
考
的说明
2.2
例:
正则表达式使用说明:
在本例中原本是不需要
使用的,
但在很多情况下需要使用,
所以
列出来说明一下。
当
sequence
中带有
PRACK
时,
UAS
发送
INVITE
的
200
OK
时,
某些字段
(比
如
Via
和
Cseq
)
则不能使用
[last_
字段名
]
方式从上一个收
到的消息中引入,
因为此时上
一个消息是
PRACK
,而不是
INVITE
,
所以需要先将
INVITE
的这两个字段保存下来供以后
使用。
上面的用法便是将
INVITE
的
CSeq
字段的值保存为数字
6
,
在以后发送
INVIT
E
的
200
OK
的时候使用,方式为:
CSeq:
[$$6]
[Type text]