📅  最后修改于: 2020-10-29 03:51:41             🧑  作者: Mango
众所周知,代理服务器可以是无状态的,也可以是有状态的。在本章的此处,我们将讨论有关代理服务器和SIP路由的更多信息。
无状态代理服务器仅转发它收到的消息。这种服务器不存储任何呼叫或交易信息。
有状态代理服务器会跟踪其收到的每个请求和响应。如果需要,将来可以使用存储的信息。如果没有收到对方的响应,它可以重新发送该请求。
有状态代理会在转发请求后记住该请求,因此他们可以将其用于高级路由。有状态代理维持交易状态。交易隐含交易状态,而不是通话状态。
有状态代理的事务处理没有无状态代理快。
有状态代理可以根据需要进行分叉和重新传输。(例如,忙时呼叫转移)。
代理希望将Record-Route头插入到请求中,这些代理希望位于后续对同一呼叫ID的请求的路径中。然后,用户代理将其用于路由后续请求。
服务器将Via标头插入请求中,以检测循环并帮助响应找到返回客户端的方式。这仅对响应到达目的地有用。
UA自己在发送请求时在Via头字段中生成并添加自己的地址。
转发请求的代理将包含其自身地址的Via头字段添加到Via头字段列表的顶部。
生成对请求的响应的代理或UA将请求中的所有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编号的哈希函数进行计算。