我正在尝试了解SIP并对此有一个问题。 为什么我们需要发送100个Trying到一个INVITE消息,但是没有使用相同的逻辑来表示BYE,UPDATE,NOTIFY等消息?
答案 0 :(得分:1)
来自rfc3261:
21.1.1 100次尝试
此响应表明请求已被
接收 下一跳服务器,并且正在执行一些未指定的操作
代表此调用(例如,正在查询数据库)。
与其他所有临时响应一样,此响应停止
UAC重发INVITE。 100(正在尝试)的响应是
与其他临时响应的不同之处在于,它永远不会
由有状态代理向上游转发。
100尝试是一个临时响应,用于停止上一跳的重传。 如上所述,有状态代理不会将其转发。
这主要用于需要时间才能完成的交易:即,何时 最终答案无法尽快发送。
因此,主要用例是用于初始INVITE,在这种情况下,到达长时间段并最终获得答案会因长时间的操作而延迟:数据库搜索,路由以及当然的振铃时间...
注意1:当“数据库搜索和路由”足够快时,1xx可以达到相同的目标(停止重新传输),但是由于它们“不可靠”,因此可能会丢失在路径上。因此,INVITE的1xx无法可靠地替代100 Trying。
注意2:100可以针对任何请求发送尝试。但是,SIP要求必须尽快给所有非初始INVITE请求一个立即最终响应,因此,如果在某个地方,您有很长的延迟时间,这意味着您的实现(或部署)可能不正确或不理想。
答案 1 :(得分:0)
因为被叫方可能不可用(忙,无状态等)。答案是一个临时答案,以便呼叫者或任何中间代理可以激活一些计时器,直到它掉线为止。 正如您在以下呼叫流程中所看到的,从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毫秒...