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