通过 Asterisk SIP 服务器拨打电话时,服务器将为每个媒体通道打开 2 个端口:
- 2 个用于呼叫支路 1 视频的端口
- 2 个用于呼叫支路 2 视频的端口
- 2 个用于呼叫支路 1 音频的端口
- 2 个用于呼叫支路 2 音频的端口
既然 Asterisk 的媒体通信是双向的,为什么它需要 4 个端口(2 个视频,2 个音频)用于每个呼叫段而不是 2 个(1 个视频,1 个音频)?它确实只使用一个端口在特定分支中进行通信,但netstat
很明显有两个端口打开,第二个打开的端口(所谓的“未使用”端口)总是从使用的端口+1。例如,呼叫支路 1 的视频端口是 17744,但它也打开了一个端口 17745。
Wireshark本地流量分析:
Asterisk 服务器上的 netstat 分析:
从上面可以看出(部分地,我没有包括另一个呼叫分支的 Wireshark - 为简洁起见)相同的问题适用于所有呼叫分支的音频和视频端口,因此每个呼叫有四个案例.
那么:为什么每个通信路径在服务器上都有一个额外的端口?
asterisk 在其媒体通信中不是真正的双向,只是将流量从一个端口转发到另一个端口?
另外,这是 Asterisk 中的常见行为,还是我的配置中有一些会影响这一点的东西?
那将是您的 RTCP 流。查看您的 SDP。
我只见过 SIP 呼叫使用单向 UDP RTP 音频流,因此每条腿需要 2 个。
您已经使用 Wireshark 捕获 SIP 呼叫 - Telphony 菜单提供了一些特定于 VoIP 的分析工具 - 您可以尝试在上面所做的捕获中显示 SIP 流 - 这将显示呼叫信号。显示 RTP 流将显示您询问的媒体流。选择一个流并单击分析将弹出一个对话框,其中包含大量的数据包数据和一个播放流的按钮。您可能会发现捕获中的每个流都将包含对话的一侧。
对于单个端口上的双向通信,我猜您正在考虑由 Asterisk 项目开发的 IAX / IAX2。
来自https://www.voip-info.org/iax/
IAX 修订版 2 协议由 Asterisk 团队开发,作为 SIP、H.323 等的替代方案,用于连接其他支持 IAX 的设备(目前列表有限,但增长非常迅速)。... IAX2 使用单个 UDP 端口 4569,因此在 NAT 环境中运行良好(过时的 IAX1 协议使用端口 5036)。IAX2 仅使用一个 udp 端口用于控制和数据流量。如 IAX 与 SIP 主题的第 4 点所述,如果可以建立控制连接,您将始终拥有音频。