gpt4 book ai didi

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

转载 作者:我是一只小鸟 更新时间:2023-09-24 15:02:21 39 4
gpt4 key购买 nike

操作系统 :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 。

1、端口分配及检查逻辑

  文件:switch_core_port_allocator.c

1、  端口查找的主循环 。

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

  2、端口检查逻辑   。

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

存在以下两个问题:  。

1)  效率不高;  。

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

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

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

文件 :autoload_configs/switch.conf.xml 。

内容:

                  <param name=
                  
                    "
                  
                  
                    rtp-port-usage-robustness
                  
                  
                    "
                  
                   value=
                  
                    "
                  
                  
                    true
                  
                  
                    "
                  
                  />
                

3、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宕机 。

 测试效果如下:

  。

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

最后此篇关于FreeSWITCH容器化问题之rtp端口占用的文章就讲到这里了,如果你想了解更多关于FreeSWITCH容器化问题之rtp端口占用的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com