SIP扩展综述
SIP扩展可分成几个类型:
SIP能力的某些欠缺;
业务能力增强,如IM、REFER;
安全性、Qos能力增强;
SIP适用于传统电信网络应用模型的能力,包括IMS专用扩展;
事件通知 - RFC3265
增加了消息SUBSCRIBE、NOTIFY,SIP头Allow-Events、Subscription State,响应202Accept、489等;该机制独立于dialog;
SUBSCRIBE发起订阅,订阅拥有状态(激活、等待、终止);收到2xx响应或NOTIFY消息时创建一个对话(与INVITE类似的对话?),后续SUBSCRIBE与NOTIFY在对话中传递;对话有一个expire时间,超时前需要重新订阅;SUBSCRIBE的超时及取消机制与REGISTER类似;
事件包,一种扩展机制;事件模板包,一种特殊的事件包;事件包定义自己的MIME类型;在NOTIFY的payload中携带状态信息;
状态发布 - RFC3903
PUBLISH方法,用于client主动向状态代理发布状态,使用payload携带;
Event head;
IM - RFC3428、RFC3862
两种消息交互方式:页面模式与session模式;
页面模式:每个消息是独立的,与它之前或之后的IM在protocol层无关;RFC3428定义的MESSAGE消息用于其实现,消息内容置于payload中,MIME正文填写text/plain;RFC3862定义了与SIP客户间的互操作,MIME使用message/cpim;
Session模式:使用SIP建立session,之后使用MSRP来携带消息内容;
PRACK - RFC3262
与传统电信网络中呼叫建立前信令对应的SIP临时消息,如180,在某些场景下不可缺少,故增加了临时消息可靠传输能力--对SIP基本状态机会产生什么影响?
仅适用于INVITE的临时响应;
本扩展的标识100rel;
RSeq头,类似CSeq;PRACK的RACK头,依次包括RSeq与CSeq头的值;
不能对100 Trying使用可靠传输机制,因为100只是用于终止INVITE等的重传;
UPDATE - RFC3311
用于不影响当前dialog情况下更新会话描述,仅用于由INVITE产生的dialog,可在dialog的早期阶段和确定阶段发送,但不能在dialog建立前发送--如创建dialog的临时响应发送、应答前;
早期阶段(early INVITE-initiated):client获得1xx(非100)应答后,dialog可能在早期阶段后直接终结;
确定阶段:得到2XX应答后;
UPDATE仅用于dialog;
UPDATE携带SDP offer,其2xx应答携带answer;
Precondition - RFC3312
用于session建立前的资源预留,对应SIP扩展标签precondition;
Caller在初始SDP中指明本次会话的约束,called对其响应(IMS中好像使用183),但既不建立会话也不提交给用户;在主被叫已知前提已经获得满足时主叫方再发送一个新的SDP offer,被叫方发送answer后session才建立;这在IMS中使用UPDATE;
SDP中的约束信息如:a=des:qos sptimal e2e send
REFER - RFC3515
发送者指引接收者去访问REFER请求中所标识的资源;Refer-To、Referred-By头域,202 Accepted响应;
REFER与NOTIFY综合使用,实现呼叫转移功能;NOTIFY被用于T