当通过 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 中的常见行为,还是我的配置中可能有某些内容会影响此行为?
答案1
这将是您的 RTCP 流。查看您的 SDP。
答案2
我只见过 SIP 呼叫使用单向 UDP RTP 音频流,因此每条线路需要 2 个。
您已经使用 Wireshark 捕获 SIP 呼叫 - Telphony 菜单提供了一些 VoIP 特定分析工具 - 您可以尝试在上面捕获的捕获中显示 SIP 流 - 这将显示呼叫信令。显示 RTP 流将显示您询问的媒体流。选择一个流并单击“分析”将弹出一个对话框,其中包含大量数据包数据和“播放流”按钮。您可能会发现捕获中的每个流都包含对话的一侧。
对于通过单个端口的双向通信,我猜您正在考虑由 Asterisk 项目开发的 IAX / IAX2。
从https://www.voip-info.org/iax/
IAX 修订版 2 协议由 Asterisk 团队开发,作为连接到其他支持 IAX 的设备(目前列表有限,但增长非常迅速)时的 SIP、H.323 等替代方案。 ... IAX2 使用单个 UDP 端口 4569,因此在 NAT 环境中运行良好(过时的 IAX1 协议使用端口 5036)。 IAX2 仅使用一个 udp 端口用于控制和数据流量。正如 IAX 与 SIP 主题的第 4 点所述,如果可以建立控制连接,则使用 IAX 您将始终拥有音频。