SIP:等待被叫站点上的 ACK 数据包以启动 RTP 会话
情况:
我对被叫方发送 200 OK + SDPACK 消息(黄色)有疑问> 消息(紫色)。我正在谈论的 Asterisk 调用流程如下所示:
我的测试网络目的:
笔记本电脑+软件电话 ---- Asterisk ---- 笔记本电脑+软件电话
问题:
我测试的所有 Linux 软件电话(Twinkle、SFLPhone、Ekiga-Softon、Linphone 和 QuteCom)不会等待 ACK 来启动 RTP 会话。我在 Asterisk 服务器上使用 iptables 过滤了 ACK 消息,并且 RTP 会话仍然启动。然而,由于我的项目意图,我想等待 ACK 消息,然后启动 RTP 会话。有没有办法、开关、命令或首选项让软件电话等待 RTP 流,直到收到 ACK 消息?
另外:
我在谷歌上搜索了很多,发现了一些设备,例如iiNet品牌贝尔金VoIP路由器,它有一个选项:在接收ACK之前启动RTP会话[默认值:关闭]因此我猜必须有一种方法让 RTP 会话在收到 ACK 后启动。
我还发现,最佳实践是在发送 200 OK + SDP 后立即启动会话。然而,如上所述,这对于我的项目来说还不够。
图来源:
http://www.panoramisk。 com/101/asterisk-and-voice-transport/en/
The Situation:
I have a question concerning the ACK message (yellow) which is send from the Asterisk to the Callee (Tel B) after the Callee has send its 200 OK + SDP message (purple). The Asterisk call flow which I am talking about looks like:
My network for testing porposes:
Laptop+Softphone ---- Asterisk ---- Laptop+Softphone
The Question:
All of my tested Linux softphones (Twinkle, SFLPhone, Ekiga-Softon, Linphone and QuteCom) are not waiting for the ACK to start the RTP session. I filtered the ACK message with iptables on the Asterisk Server and the RTP session started anyways. However due to my project intention I would like to wait for the ACK message and then start the RTP session. Is there a way, switch, command or preference to let the softphone wait with the RTP stream until the ACK message is received?
Additional:
I googled a lot and found some device e.g. the iiNet Branded Belkin VoIP Router which has the option: Start RTP session before receiving ACK [default: off] Thus I guess there must be a way to let the RTP session start after the ACK is received.
As well I found that it is best practice that the session starts directly after the 200 OK + SDP is send. However as aforementioned this is not sufficient for my project.
Source of Figure:
http://www.panoramisk.com/101/asterisk-and-voice-transport/en/
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
简短的回答是否定的;不会有广泛支持的设置允许您在 ACK 后强制启动 RTP。最多您会发现一些设备/软件电话(例如您提到的设备/软件电话)具有允许它的设置。我之前在 SIP 实现者邮件列表中看到过这个查询,如果我没记错的话,RFC 实际上并没有明确规定 RTP 应该在 2xx 响应还是 ACK 之后启动,但通常例外的前提是它是 2xx 响应。
您可以探索的另一个角度是寻找一个设置,或者甚至可能对您的防火墙规则进行巧妙处理,以在没有 SDP 的情况下发送初始 INVITE。 RFC 3261 支持不带 SDP 的 INVITE,当收到它们时,表明 2xx 响应应包含初始 SDP 提议,随后的 ACK 将包含 SDP 响应。通过该机制,在发送 ACK 之前,RTP 将无处可去。
The short answer is no; there isn't going to be a widely supported setting that allows you to force RTP to be started after the ACK. At best you'll find some devices/softphones, such as the one you mention, that have a setting that allows it. I have seen this query come up before on the SIP implementers mailing list and if I recall correctly the RFC isn't actually definitive on whether the RTP should start after the 2xx response or the ACK but the generally excepted premise is that it's the 2xx response.
Another angle you could explore is looking for a setting, or maybe even getting tricky with your firewall rules, to send the initial INVITE without SDP. INVITEs without SDP are supported by RFC 3261 and when they are received it indicates the 2xx response should contain the initial SDP offer and the subsequent ACK will then have the SDP response. With that mechanism the RTP will have nowhere to go until after the ACK is sent.