【问题标题】:SIP: Wait for ACK packet on Callee site to start RTP sessionSIP:等待被叫站点上的 ACK 数据包以启动 RTP 会话
【发布时间】:2011-10-05 08:45:13
【问题描述】:

情况:

我有一个关于ACK消息(黄色)的问题> 消息(紫色)。我正在谈论的 Asterisk 调用流程如下所示:

我的测试网络:

笔记本电脑+软电话----Asterisk ----笔记本电脑+软电话

问题:

我测试过的所有 Linux 软件电话(Twinkle、SFLPhone、Ekiga-Softon、Linphone 和 QuteCom)都没有等待 ACK 来启动 RTP 会话。我在 Asterisk 服务器上使用 iptables 过滤了 ACK 消息,并且 RTP 会话仍然启动。但是,由于我的项目意图,我想等待 ACK 消息,然后开始 RTP 会话。有没有办法、开关、命令或偏好让软电话等待 RTP 流,直到收到 ACK 消息?

补充:

我用谷歌搜索了很多,找到了一些设备,例如iiNet Branded Belkin VoIP Router 有以下选项:在收到 ACK 之前启动 RTP 会话 [默认值:关闭] 因此,我想一定有办法让 RTP 会话开始收到 ACK 后。

我发现最好的做法是在发送 200 OK + SDP 之后直接开始会话。但是,如上所述,这对我的项目来说还不够。


图源:

http://www.panoramisk.com/101/asterisk-and-voice-transport/en/

【问题讨论】:

  • 您为什么要这样做?发送 ACK 是为了确保 INVITE 事务的最终响应通过,而不是作为最终响应加倍。一旦您的 SIP 用户代理获得最终的 2xx 响应,并且如果可以,它应该开始发送 RTP。
  • ACK 与 200 条 OK 消息相关,而不是与 INVITE 相关?!原因是,我想切换一些防火墙规则。但是在发送 200 OK 消息后,第一个 RTP 数据包在大约 1 分钟后开始。 13 毫秒。这还不足以通过 c 中的 system() 命令设置防火墙规则。因此,在设置防火墙规则之前,会发送 3 个 RTP 数据包。如果 RTP 会话在收到 ACK 后开始,那么我有足够的时间来设置 fw 规则。
  • 2xx 消息是 INVITE 事务的一部分(注意 INVITE 事务和 INVITE 请求的区别,后者与响应和 ACK 一起是前者的一部分)。初始 RTP 数据包是否会导致防火墙出现问题? 3 个 RTP 数据包通常是大约 60 毫秒,当然少于 1 秒的音频,甚至连远端都不会注意到。
  • 是的,我知道没那么多。但 RTP 数据包不只是被过滤。 RTP 数据包被发送到 NFQUEUE 并移交给用户空间。我正在用数据包做一些事情。这就是我需要所有数据包的原因。

标签: sip asterisk


【解决方案1】:

简短的回答是否定的;不会有广泛支持的设置允许您在 ACK 之后强制启动 RTP。充其量你会发现一些设备/软件电话,比如你提到的那个,它们有一个允许它的设置。我之前在 SIP 实施者邮件列表中看到过这个查询,如果我没记错的话,RFC 实际上并不确定 RTP 是否应该在 2xx 响应或 ACK 之后启动,但通常例外的前提是它是 2xx 响应.

您可以探索的另一个角度是寻找一种设置,或者甚至可能使您的防火墙规则变得棘手,以在没有 SDP 的情况下发送初始 INVITE。 RFC 3261 支持不带 SDP 的 INVITE,当收到它们时,它表明 2xx 响应应包含初始 SDP 提议,随后的 ACK 将具有 SDP 响应。使用这种机制,RTP 在发送 ACK 之前将无处可去。

【讨论】:

  • 不幸的是,发送没有有效负载的邀请只是无法正常工作。
猜你喜欢
  • 2010-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-31
相关资源
最近更新 更多