使用用SIP的终端设备称为SIP用户代理(user agent,UA) 。SIP的作用之一是允许UA之间建立媒体会话。顾名思义,UA接受用户的指示或输入,并代表用户与其它UA一起设置或取消媒体会话。大多时候,用户通常是一个人,但有时候也可能是另一种协议,比如说网关。UA必须具备与他人建立媒体会话的能力。
UA必须维护它发起或参与的呼叫状态。最小呼叫状态集包括本地和远端tag、Call-ID、本地和远端Cseq头域、路由集,和媒体所需的任何状态信息。这些信息用于保存dialog信息并保证其可靠性。远端CSeq对于区分新请求和旧请求的重发是有必要的。re-INVITE用于更新现有呼叫参数。它的Call-ID和tag信息与初始INVITE/200 OK 交换中的值保持一致,但是CSeq序号会增加,因为它是新的请求。重发的INVITE消息中,Call-ID、tag和Cseq都和前一条INVITE消息保持一致。即使呼叫已经终止,UA也必须继续维护呼叫状态至少32秒,为的是处理可能的丢包重传消息。
UA如果收到未知dialog的ACK,不要声张,悄悄丢弃就是了。请求未知的URI会收到404 Not Found应答。UA收到未知dialog的请求时,需要回应481 Dialog/Transaction Does Not Exist。收到未知dialog的应答也应该悄悄丢弃。为了安全起见,丢弃这些来路不明的消息是有必要的。否则,恶意UA就可能通过发送虚假请求或应答来获取其它SIP UA的信息。
UA的最小实现必须能够根据响应类别(状态码的首位)来解释任何未知的应答消息,并不要求它理解所有应答状态码的定义。比如说,如果收到498 Wrong Phase of the Moon这样的应答,UA不知道它的具体定义,必须把它视为400 Client Error处理。
如果收到不支持的请求,UA回应501 Not Implemented response。比如说,UA不支持请求指定的方法,它就可以返回501应答。UA必须支持UDP,如果发送的消息大于1000字节,那么必须支持TCP。
UA包含客户端应用和服务端应用。这两部分分别称为用户代理客户端(UAC)和用户代理服务端(UAS)。UAC发起请求,而UAS生成应答。在一个会话过程中,UA可以在UAC和UAS间切换角色。
UA必须支持会话描述协议(SDP)。也可以选择其它协议来描述媒体,但SDP的支持是强制的。
UA必须理解请求消息中Require头域中所列的所有扩展。其它不能理解的头域可能会被UA忽略。UA可以在它所发的任何请求消息中说明自己支持的能力和特性。这样,其它UA不需要显式地查询能力就能知晓对方所具备的能力。比如说,可以用Allow头域列出UA自身所支持的方法。UA支持的SIP扩展应当用Supported头域说明。UA支持的消息体类型应当用Accept头域说明。
UA通常注册到域里的一台代理服务器上。
来源:oschina
链接:https://my.oschina.net/u/4277082/blog/4490467