以下是SIPp参数的分类表格整理,方便快速查阅和使用:
SIPp 参数分类表格
分类 | 参数 | 描述 | 默认值 | 示例 |
---|---|---|---|---|
基本参数 | -sc | 指定XML场景文件(客户端模式) | 无 | -sc uac.xml |
-sd | 指定XML场景文件(服务器端模式) | 无 | -sd uas.xml | |
-i | 本地IP地址 | 自动选择 | -i 192.168.1.100 | |
-p | 本地端口号 | 自动选择 | -p 5060 | |
-s | 远端用户名或号码(用于From头域) | 无 | -s 1000 | |
性能相关 | -r | 每秒启动的呼叫数(速率) | 1 | -r 10 (10次/秒) |
-rp | 速率周期(单位:毫秒,控制速率精度) | 1000(1秒) | -rp 500 (每0.5秒调整速率) | |
-l | 最大并发调用数(并行呼叫数) | 无限制 | -l 100 (最多100路并发) | |
-d | 测试持续时间(单位:毫秒) | 无限运行 | -d 60000 (运行1分钟) | |
-m | 最大呼叫次数(达到次数后停止) | 无限 | -m 1000 (执行1000次呼叫) | |
场景控制 | -sf | 指定自定义的XML场景文件 | 无 | -sf custom_scenario.xml |
-inf | 从CSV文件导入动态变量(如号码、参数) | 无 | -inf data.csv | |
-key | 定义场景中的动态变量(通过命令行) | 无 | -key username=test | |
传输协议 | -t | 传输协议模式(t1 =TCP,u1 =UDP,tls =TLS,sctp =SCTP) | UDP | -t t1 (使用TCP) |
-transport | 指定传输协议(与-t 等效) | 无 | -transport tcp | |
日志与调试 | -trace_msg | 打印完整SIP消息到日志 | 关闭 | -trace_msg |
-trace_err | 打印错误消息到日志 | 关闭 | -trace_err | |
-trace_shortmsg | 打印简化的SIP消息(仅摘要) | 关闭 | -trace_shortmsg | |
-trace_screen | 在屏幕显示统计信息和简要日志 | 开启 | -trace_screen off (关闭) | |
高级配置 | -3pcc | 启用第三方呼叫控制模式(需指定模式参数,如-3pcc 192.168.1.101:5060 ) | 关闭 | -3pcc role:A-B |
-aa | 启用自动应答模式(适用于UAS场景) | 关闭 | -aa | |
-rate_cycle | 速率调整周期(单位:毫秒,与-rp 等效) | 1000 | -rate_cycle 200 | |
-max_socket | 最大Socket连接数(限制资源占用) | 系统默认 | -max_socket 500 | |
-recv_timeout | 接收消息超时时间(单位:毫秒) | 5000 | -recv_timeout 3000 | |
-send_timeout | 发送消息超时时间(单位:毫秒) | 5000 | -send_timeout 3000 |
使用示例
# 客户端模式,UDP协议,每秒10次呼叫,最大并发100路,运行1分钟
sipp -sf uac.xml -i 192.168.1.100 -p 5060 -s 1000 -r 10 -l 100 -d 60000# 服务端模式,TCP协议,启用详细日志
sipp -sd uas.xml -t t1 -trace_msg -trace_err
注意事项
- 参数大小写敏感:例如
-t t1
和-T
可能代表不同含义。 - 默认行为:未指定场景文件时,SIPp会使用内置的默认UAC/UAS场景。
- 性能限制:
-l
和-r
需根据硬件和网络调整,避免资源耗尽。
建议结合官方文档(sipp -h
或 SIPp Manual)确认参数细节及版本兼容性。
以下是 uac.xml
(客户端场景)和 uas.xml
(服务器端场景)的示例文件内容。这些文件是 SIPp 测试工具中常用的基本场景文件,用于模拟 SIP 客户端(UAC)和 SIP 服务器(UAS)的行为。
1. uac.xml
(客户端场景)
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE scenario SYSTEM "sipp.dtd">
<scenario name="Basic UAC"><!-- 发送 INVITE 请求 --><send retrans="500"><![CDATA[INVITE sip:[service]@[remote_ip]:[remote_port] SIP/2.0Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[call_number]To: sut <sip:[service]@[remote_ip]:[remote_port]>Call-ID: [call_id]CSeq: 1 INVITEContact: sip:sipp@[local_ip]:[local_port]Max-Forwards: 70Subject: Performance TestContent-Type: application/sdpContent-Length: [len]v=0o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]s=-c=IN IP[media_ip_type] [media_ip]t=0 0m=audio [media_port] RTP/AVP 0a=rtpmap:0 PCMU/8000]]></send><!-- 等待 100 Trying 响应 --><recv response="100" optional="true" /><!-- 等待 180 Ringing 响应 --><recv response="180" optional="true" /><!-- 等待 200 OK 响应 --><recv response="200" /><!-- 发送 ACK 请求 --><send><![CDATA[ACK sip:[service]@[remote_ip]:[remote_port] SIP/2.0Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[call_number]To: sut <sip:[service]@[remote_ip]:[remote_port]>;tag=[peer_tag]Call-ID: [call_id]CSeq: 1 ACKMax-Forwards: 70Content-Length: 0]]></send><!-- 等待 1 秒 --><pause milliseconds="1000" /><!-- 发送 BYE 请求 --><send retrans="500"><![CDATA[BYE sip:[service]@[remote_ip]:[remote_port] SIP/2.0Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[call_number]To: sut <sip:[service]@[remote_ip]:[remote_port]>;tag=[peer_tag]Call-ID: [call_id]CSeq: 2 BYEMax-Forwards: 70Content-Length: 0]]></send><!-- 等待 200 OK 响应 --><recv response="200" /><!-- 场景结束 -->
</scenario>
2. uas.xml
(服务器端场景)
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE scenario SYSTEM "sipp.dtd">
<scenario name="Basic UAS"><!-- 等待 INVITE 请求 --><recv request="INVITE" /><!-- 发送 100 Trying 响应 --><send><![CDATA[SIP/2.0 100 Trying[last_Via:][last_From:][last_To:];tag=[call_number][last_Call-ID:][last_CSeq:]Contact: <sip:[local_ip]:[local_port];transport=[transport]>Content-Length: 0]]></send><!-- 发送 180 Ringing 响应 --><send><![CDATA[SIP/2.0 180 Ringing[last_Via:][last_From:][last_To:];tag=[call_number][last_Call-ID:][last_CSeq:]Contact: <sip:[local_ip]:[local_port];transport=[transport]>Content-Length: 0]]></send><!-- 发送 200 OK 响应 --><send><![CDATA[SIP/2.0 200 OK[last_Via:][last_From:][last_To:];tag=[call_number][last_Call-ID:][last_CSeq:]Contact: <sip:[local_ip]:[local_port];transport=[transport]>Content-Type: application/sdpContent-Length: [len]v=0o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]s=-c=IN IP[media_ip_type] [media_ip]t=0 0m=audio [media_port] RTP/AVP 0a=rtpmap:0 PCMU/8000]]></send><!-- 等待 ACK 请求 --><recv request="ACK" /><!-- 等待 BYE 请求 --><recv request="BYE" /><!-- 发送 200 OK 响应 --><send><![CDATA[SIP/2.0 200 OK[last_Via:][last_From:][last_To:];tag=[call_number][last_Call-ID:][last_CSeq:]Contact: <sip:[local_ip]:[local_port];transport=[transport]>Content-Length: 0]]></send><!-- 场景结束 -->
</scenario>
说明
uac.xml
:模拟 SIP 客户端行为,发送INVITE
请求,等待响应,然后发送ACK
和BYE
。uas.xml
:模拟 SIP 服务器行为,接收INVITE
,发送响应,然后处理ACK
和BYE
。- 动态变量:
[remote_ip]
、[local_ip]
、[call_id]
等是 SIPp 的动态变量,运行时会被替换为实际值。 - SDP 部分:SIP 消息中的 SDP 部分用于协商媒体流(如 RTP)。
运行示例
- 启动 UAS(服务器端):
sipp -sf uas.xml -i 192.168.1.100 -p 5060
- 启动 UAC(客户端):
sipp -sf uac.xml -i 192.168.1.101 -p 5061 192.168.1.100:5060
如果需要更复杂的场景,可以修改 XML 文件或使用 SIPp 的高级功能(如动态变量、条件分支等)。