【OpenSips】用SIPp压力测试---ACK消息分发问题

问题描述:在OpenSips压力测试中,遇到uac回复ACK时,OpenSips不能正确分发给FreeSwitch。

     场景:SIPp(uac) ---> OpenSips ---> FreeSwitch(2个) ---> SIPp(uas)

     部署: uac(92.37)   OpenSips (92.33) FreeSwtich(92.38、92.139) uas(21.28)

问题分析:

1、正常流程

(图片糙略,见谅)

UAC会在收到200 OK 之后回复ACK。(此ACK可以通过OSs转发,也可直接发给FS)

2、问题发生

此ACK包只能发到OSs这里,不会再往后走到FS。

这里有X-lite软电话呼叫、SIPp(uac)模拟呼叫抓包对比。(92.33 是 OpenSips、92.38 是 FreeSwitch)

ACK包的Request-Line 的 IP地址不对。

3、问题原因

此 ACK 包是SIPp发起的。所以从SIPp找原因。

查看uac.xml

ACK sip:[service]@[remote_host]:[remote_port] SIP/2.0 这一行脚本对应抓包里的Request-Line。也就是说问题要从这里解决。

4、解决办法

现在知道 remote_host 变量要改,那要改成什么值呢?

【知识点】ACK 的目的地址,是在其之前相邻的 200 OK 的Contact 里有指示。

所以我们应该从200 OK 包里把Contact 指定的 ip 地址拿出来,用在ACK 包的Request-Line里。

(这个 92.139 是 FS 的地址,200 OK 从FS 发出时携带上,ACK也应该回复到这个ip。)

再一个【知识点】SIPp的脚本可以使用正则匹配一个想要的内容出来。

 且看:

<recv response="200" rrs="true" rtd="true">
    <action>
        <ereg regexp="[0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}" search_in="hdr" header="Contact:" check_it="true" assign_to="1" />
        <log message="CONTACT is [$1]"/>  # 使用方式 [$1]
    </action>
</recv>

在uac.xml 里 <recv response="200" 的地方加一个<action>使用正则进行ip的匹配。

(示例参考https://blog.csdn.net/w0z1y/article/details/85159238

至此,得到ip 后,修改 ACK 消息的 Request-Line 如

ACK sip:[service]@[$1]:[remote_port] SIP/2.0

 

OK啦,问题解决了吗?有问题可留言。

 

此内容仅供参考,如有疏漏,望指教。欢迎转载

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值