SIP - 代理和路由


众所周知,代理服务器可以是无状态的,也可以是有状态的。在本章中,我们将详细讨论代理服务器和 SIP 路由。

无状态代理服务器

无状态代理服务器只是转发它收到的消息。这种服务器不存储任何通话或交易信息。

  • 无状态代理一旦转发 SIP 请求就会忘记它。
  • 通过无状态代理,交易速度会很快。

有状态代理服务器

有状态代理服务器会跟踪它收到的每个请求和响应。如果需要,它可以在将来使用存储的信息。如果没有收到对方的响应,它可以重传请求。

  • 有状态代理在转发请求后会记住请求,因此可以将其用于高级路由。有状态代理维护事务状态。 事务意味着事务状态,而不是调用状态

  • 有状态代理的事务处理速度不如无状态代理。

  • 有状态代理可以根据需要分叉并重新传输。(例如:忙时呼叫转移)。

通过和记录路线

记录路由

Record-Route 标头由希望位于同一 call-id 的后续请求路径中的代理插入到请求中。然后,用户代理使用它来路由后续请求。

通过

服务器将 Via 标头插入到请求中以检测循环并帮助响应找到返回客户端的路径。这有助于仅响应到达目的地。

  • UA 在发送请求时自己生成并添加自己的地址到 Via 头字段中。

  • 转发请求的代理将包含其自身地址的 Via 头字段添加到 Via 头字段列表的顶部。

  • 生成请求响应的代理或 UA 将请求中的所有 Via 标头字段按顺序复制到响应中,然后将响应发送到顶部 Via 标头字段中指定的地址。

  • 接收响应的代理检查顶​​部的 Via 标头字段并匹配其自己的地址。如果不匹配,则响应被丢弃。

  • 然后删除顶部的 Via 标头字段,并将响应转发到下一个 Via 标头字段中指定的地址。

Via 头字段包含协议名称、版本号和传输(SIP/2.0/UDP、SIP/2.0/TCP 等),并包含端口号和参数,例如接收、rport、分支。

  • 如果 UA 或代理从与顶部 Via 标头字段中指定的地址不同的地址接收到请求,则接收到的标记将添加到 Via 标头字段中。

  • UA 和代理将分支参数添加到 Via 标头字段中,该参数被计算为 Request-URI、To、From、Call-ID 和 CSeq 编号的哈希函数。