sip代理服务器是用来转发sip协议到UAS(客户代理终端)上的,一个请求可能通过多个proxy服务器最后转发到了UAS上的。在这个过程中,proxy服务器需要有一个是否要处理的判断,如果需要处理,那么proxy服务器决定路由选择,在发送到下一个目的地前修改请求内容。应答的路径是和请求路径是相同的,只不过是方向是相反的。
一个proxy服务器可以是无状态的,也可以是有状态的。对于无状态服务器,它只是具有转发功能,转发后不对事务进行保存。而有状态服务器,转发后需要保存事务,以方便之后的相关事务的处理。
作为一个有状态的proxy服务器,那么它必须是一个纯粹的sip事务处理引擎。对于一个proxy服务器,一个客户端的请求就对应着一个服务器事务,这个服务器事务包括处理如下内容:
1)验证请求
(1)合法的语法
(2) URI scheme:如果request-uri中包含了proxy不能识别的uri,那么返回416应答
(3)最大转发次数:如果请求包含了Max-Forward头域,那么就需要检查是否已经到达最大转发次数。如果已经到达,那么产生483应答。
(4)可选的Loop Detection检查:循环检测,用来判断via是否形成循环转发。
(5)Proxy-require检查:
(6)Proxy-Authorization检查:转发鉴权检查,proxy要转发的时候要对请求的身份进行认证。
2)处理路由信息
3)决定请求的目的地