SIP - 代理和路由


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

无状态代理服务器

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

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

有状态代理服务器

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

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

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

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

Via和记录路由

记录路由

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

Via

服务器将 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 编号的哈希函数。