- 会话发起协议教程
- SIP - 首页
- SIP - 简介
- SIP - 网络元素
- SIP - 基本呼叫流程
- SIP - 消息传递
- SIP - 响应代码
- SIP - 报头
- SIP - 会话描述协议
- SIP - 提供/应答模型
- SIP - 移动性
- SIP - 分支
- SIP - 代理和路由
- SIP 到 PSTN
- SIP - 编解码器
- SIP - B2BUA
- SIP 有用资源
- SIP - 快速指南
- SIP - 有用资源
- SIP - 讨论
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 编号的哈希函数。