SIP - 代理和路由



众所周知,代理服务器可以是无状态的或有状态的。在本节中,我们将进一步讨论代理服务器和 SIP 路由。

无状态代理服务器

无状态代理服务器简单地转发它接收到的消息。这种服务器不存储任何呼叫或事务信息。

  • 无状态代理服务器在转发 SIP 请求后会忘记该请求。
  • 通过无状态代理服务器,事务将很快。

有状态代理服务器

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

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

  • 与无状态代理服务器相比,有状态代理服务器的事务速度并不快。

  • 有状态代理服务器可以在需要时进行分支和重新传输。(例如:呼叫转发忙,例如)。

Via 和 Record-route

Record-Route

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

Via

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

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

  • 转发请求的代理会在 Via 报头字段列表的顶部添加一个包含其自身地址的 Via 报头字段。

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

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

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

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

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

  • UA 和代理会向 Via 报头字段添加 branch 参数,该参数计算为 Request-URI、To、From、Call-ID 和 CSeq 编号的哈希函数。

广告