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