sipp是一个针对SIP协议进行测试的免费开源工具,可运行于windows/mac/linux,官方地址:http://sipp.sourceforge.net/

一、安装

本文只介绍mac上的安装方式,其它平台(windows/linux)的安装,可参考官方文档 (注:感谢黄龙舟做的中文翻译)

brew install sipp

mac上,直接用brew 一行命令搞定安装,完成后,可用sipp -v查看版本号,参见下图,目前的版本号是SIPp v3.6.0-PCAP-RTPSTREAM

sipp学习笔记

 

二、uac/uas初体验

安装好以后,相信大家已经等不及要体验一把,既然是打电话,就得有“主叫方(uac)”和“被叫方(uas)” (注:对uac、uas第1次接触的同学,建议先移步 SIP协议学习笔记 )

2.1 启动内置的uas场景

sipp -sn uas

sipp学习笔记

如上图所示,启动uas后,会在本机开1个端口5061,然后下面会一些SIP信令的实时统计,INVITE文字在“右方向箭头”右侧,表示当前收到的INVITE请求数,180左侧的“左方向箭头”表示回应的振铃消息数。现在只有被叫,并没有主叫来电,所以Messages这一栏全是0

 

2.2 启动内置的uac场景

sipp -sn uac 127.0.0.1:5061

注:最后的“ip:端口”,即为上一步uas启动的ip地址和端口号,必须匹配。

sipp学习笔记

此时,再回到uas的界面,Messages栏,就不再全是0了

sipp学习笔记

这样,主叫方(uac)打电话,被叫方(uas)接电话,基本的呼叫流程就通了。 

 

三、理解配置文件

流程虽然跑通了,可能有同学会好奇,uas/uac这2个内置场景,具体逻辑长啥样?为什么uac的界面,会有100/180/183这些响应码,没有其它4xx或5xx之类的码?除uac/uas,还有其它内置场景吗?

sipp学习笔记

如上图,直接输入sipp,会看到有很多参数说明,其中-sn 表示加载默认的场景,除了uas/uac,还有regexp/branchc/branchs...等其它场景,有兴趣的同学可以每种场景都试一下。

另外,还有一个很有用的-sd参数,可以把默认的场景配置,直接导出来,参考下面的命令:

sipp学习笔记

这样,就把默认的uac/uas这2个场景,导出成xml文件,方便后续研究。打开这2个文件看一下:

3.1 uac.xml

 1 <?xml version="1.0" encoding="ISO-8859-1" ?>
 2 <!DOCTYPE scenario SYSTEM "sipp.dtd">
 3 
 4 <scenario name="Basic Sipstone UAC">
 5   <send retrans="500">
 6     <![CDATA[
 7 
 8       INVITE sip:[service]@[remote_ip]:[remote_port] SIP/2.0
 9       Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
10       From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
11       To: [service] <sip:[service]@[remote_ip]:[remote_port]>
12       Call-ID: [call_id]
13       CSeq: 1 INVITE
14       Contact: sip:sipp@[local_ip]:[local_port]
15       Max-Forwards: 70
16       Subject: Performance Test
17       Content-Type: application/sdp
18       Content-Length: [len]
19 
20       v=0
21       o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]
22       s=-
23       c=IN IP[media_ip_type] [media_ip]
24       t=0 0
25       m=audio [media_port] RTP/AVP 0
26       a=rtpmap:0 PCMU/8000
27 
28     ]]>
29   </send>
30 
31   <recv response="100"
32         optional="true">
33   </recv>
34 
35   <recv response="180" optional="true">
36   </recv>
37 
38   <recv response="183" optional="true">
39   </recv>
40 
41   <recv response="200" rtd="true">
42   </recv>
43 
44   <!-- Packet lost can be simulated in any send/recv message by         -->
45   <!-- by adding the 'lost = "10"'. Value can be [1-100] percent.       -->
46   <send>
47     <![CDATA[
48 
49       ACK sip:[service]@[remote_ip]:[remote_port] SIP/2.0
50       Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
51       From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
52       To: [service] <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param]
53       Call-ID: [call_id]
54       CSeq: 1 ACK
55       Contact: sip:sipp@[local_ip]:[local_port]
56       Max-Forwards: 70
57       Subject: Performance Test
58       Content-Length: 0
59 
60     ]]>
61   </send>
62 
63   <!-- This delay can be customized by the -d command-line option       -->
64   <pause/>
65 
66   <send retrans="500">
67     <![CDATA[
68 
69       BYE sip:[service]@[remote_ip]:[remote_port] SIP/2.0
70       Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
71       From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
72       To: [service] <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param]
73       Call-ID: [call_id]
74       CSeq: 2 BYE
75       Contact: sip:sipp@[local_ip]:[local_port]
76       Max-Forwards: 70
77       Subject: Performance Test
78       Content-Length: 0
79 
80     ]]>
81   </send>
82 
83   <recv response="200" crlf="true">
84   </recv>
85 
86   <!-- definition of the response time repartition table (unit is ms)   -->
87   <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
88 
89   <!-- definition of the call length repartition table (unit is ms)     -->
90   <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
91 
92 </scenario>
uac.xml

相关文章: