FreeSWITCH容器化问题之rtp端口占用

操作系统 :CentOS 7.6_x64、debian 11 (bullseye,docker)

FreeSWITCH版本 :1.10.9

Docker版本:23.0.6

FreeSWITCH容器化带来部署便利的同时,也会遇到一些问题,比如今天要讨论的RTP端口占用问题(FreeSWITCH申请宿主机已占用的端口)。

我将从以下三个方面进行展开:

1)从源码层面分析FreeSWITCH的端口分配及检查逻辑;

2)描述开启RTP端口占用检测的方法;

3)演示RTP端口占用检测效果;

FreeSWITCH容器化参考我之前的文章:

https://www.cnblogs.com/MikeZhang/p/dockerPackFs20230617.html

https://www.cnblogs.com/MikeZhang/p/dockerFS20230716.html

一、端口分配及检查逻辑

文件:switch_core_port_allocator.c
1、 端口查找的主循环

如果系统认为还有端口可分配,则一直重试,没有退出循环的逻辑,存在导致fs宕机的风险。

2、端口检查逻辑

端口检查通过bind函数实现,尝试bind,成功后,关闭socket,释放端口。

存在以下两个问题:

1) 效率不高;

2) bind后会执行释放操作,rtp使用时仍然会存在失败的风险;

二、启RTP端口占用检测的方法

FreeSWITCH默认不开启rtp端口检测占用,端口分配了就直接使用。可通过如下配置开启rtp端口检查。

文件 :autoload_configs/switch.conf.xml

内容:

复制代码
<param name="rtp-port-usage-robustness" value="true"/>

三、RTP端口占用检测效果演示

1、调整端口范围

文件:autoload_configs/switch.conf.xml

内容:

复制代码
<param name="rtp-start-port" value="$${force_rtp_start_port}"/>
<param name="rtp-end-port" value="$${force_rtp_end_port}"/>

2、容器外占用端口

安装netcat:

yum install netcat

占用端口:

nc -l -u 20002

3、呼叫测试

3.1、开启后可实现端口占用检查,如果占用了则重新分配

测试效果如下:

3.2、如果rtp端口范围比较小,会出现一直尝试分配端口的情况,可能会导致fs宕机

测试效果如下:

好,就这么多了,希望对你有帮助。

相关推荐
Mike_Zhang3 天前
FreeSWITCH开启silk编码及转码
voip·freeswitch
加油20194 天前
音视频处理(四):一文讲清楚VoIP语音通话SIP和RTP协议
音视频·pcm·voip·sip·rtp·g.711·语音通话
Mike_Zhang8 天前
FreeSWITCH使用mod_fail2ban模块来提升安全
voip·freeswitch
Mike_Zhang14 天前
FreeSWITCH使用RNNoise进行实时通话降噪
voip·freeswitch·音频技术
爱学习的大牛12322 天前
Ubuntu 24.04 安装 FreeSWITCH 完整教程
linux·freeswitch
若尘拂风1 个月前
FreeSWITCH配置文件解析(11) 模块配置文件(modules.conf)
服务器·tcp/ip·udp·freeswitch
若尘拂风1 个月前
centos 7.9 编译安装 freeswitch 1.10.12
服务器·udp·freeswitch·sip
十年一梦惊觉醒2 个月前
freeswitch集成离线语音识别funasr
人工智能·语音识别·freeswitch
Mike_Zhang3 个月前
一种FreeSWITCH流量镜像WebSocket音频推流方案
voip·freeswitch