为什么我们发送100个Trying到一个INVITE而不发送给UPDATE或BYE消息?

时间:2019-02-06 09:49:30

标签: sip

我正在尝试了解SIP并对此有一个问题。 为什么我们需要发送100个Trying到一个INVITE消息,但是没有使用相同的逻辑来表示BYE,UPDATE,NOTIFY等消息?

3 个答案:

答案 0 :(得分:1)

来自rfc3261

  

21.1.1 100次尝试

     

此响应表明请求已被
接收   下一跳服务器,并且正在执行一些未指定的操作
  代表此调用(例如,正在查询数据库)。
  与其他所有临时响应一样,此响应停止
  UAC重发INVITE。 100(正在尝试)的响应是
  与其他临时响应的不同之处在于,它永远不会
  由有状态代理向上​​游转发。

100尝试是一个临时响应,用于停止上一跳的重传。 如上所述,有状态代理不会将其转发

这主要用于需要时间才能完成的交易:即,何时 最终答案无法尽快发送。

因此,主要用例是用于初始INVITE,在这种情况下,到达长时间段并最终获得答案会因长时间的操作而延迟:数据库搜索,路由以及当然的振铃时间...

注意1:当“数据库搜索和路由”足够快时,1xx可以达到相同的目标(停止重新传输),但是由于它们“不可靠”,因此可能会丢失在路径上。因此,INVITE的1xx无法可靠地替代100 Trying。

注意2:100可以针对任何请求发送尝试。但是,SIP要求必须尽快给所有非初始INVITE请求一个立即最终响应,因此,如果在某个地方,您有很长的延迟时间,这意味着您的实现(或部署)可能不正确或不理想。

答案 1 :(得分:0)

enter image description here

因为被叫方可能不可用(忙,无状态等)。答案是一个临时答案,以便呼叫者或任何中间代理可以激活一些计时器,直到它掉线为止。 正如您在以下呼叫流程中所看到的,从TRYING之后发送从代理到被叫方的邀请。如果INVITE是通过网关通过多个代理传播的,那么这可能是一个漫长的过程,直到收到RINGING或OK。

对于BYE-总是可以突然挂断。

UPDATE,NOTIFY,INFO是各方已建立会话的呼叫中消息。

答案 2 :(得分:0)

长话短说。合理时,您可以使用或不使用100 Trying。

不邀请:

您可以对非邀请消息(非邀请交易)使用100次尝试。 但是所有这些消息都旨在尽快得到答复。

因此,建议对所有非邀请邮件快速回复。在这种情况下,建议不要尝试100。如果您无法快速回复,则可以使用100 Trying for Non-INVITE transaction以防止重传(将重传速度减慢到T2间隔)。

此建议仅旨在减少非邀请交易的网络交互。

邀请

如果可以快速回复,您也可以避免发送100条Trying for INVITE消息。 RFC 3261说:

  

服务器事务必须生成100(正在尝试)响应,除非它   知道TU将在以下时间内生成临时或最终响应   200毫秒...