基本概念
- UAC和UAS
- UA:启动了SIP的设备(user agent)
- UAC:UA的客户端(user agent client)
- UAS:UA的服务端(user agent server)
- UAC和UAS判断方法:一边来说发出sip请求的是UAC,而发出响应的是UAS。在一个流程中,一个设备可能既是sip消息的发出者又是接收者,因此它既是UAC又是UAS
- B2BUA
- Back to back UA:背靠背用户代理。指一个设备同时扮演UAC和UAS,在结束一个sip对话的同时,生成一个新的sip对话。
- 对话(dialog)
- dialog:简单讲是一次呼叫上下文,由Call-ID、from-tag、to-tag来确定一个对话。
- 早期和最终对话:从主叫发出invite到收到针对180(被叫响铃),早期dialog建立。从主叫发出invite到收到针对invite的200响应(被叫摘机),最终dialog建立
- 终结:早起对话由Cancel终结(取消呼叫),最终对话由bye(主叫或被叫挂断)终结
生命周期:从主叫发出invite到挂机后的200响应
- 事务
SIP是基于事务的协议,一次呼叫由多个事务组成。事务通过Cseq来标识。简单说,一个设备发出SIP请求,到收到该请求的最终响应(183、180是中间响应),视为一个事务。
- invite事务和非invite事务:invite需要一个类似三次握手机制来保证会话双方确保事务的完整性,即request-response-ack。因此事务根据是否会为响应生成一个ack消息分为invite和非invite事务
- ack消息属于一个特殊的例子,它不需要响应,单独构成一个事务
- 一个对话包含多个事务
- 会话
会话和SDP媒体流有关。
SIP消息构成
SIP消息分为请求和响应两类,一个请求及其对应的一个或多个响应构成一个SIP操作。其中SIP的请求方法标识出不同的操作类型。SIP是一种在IP网络中建立、修改和终止多媒体会话的应用层协议。
- 构成
SIP消息运用了IP协议,是基于文本的协议,使用UTF-8字符集,结构同HTTP消息类似。
请求行/状态行 + 消息头 + 消息体
- 请求行
- 格式:Method(方法名)+ Request-URI(指示请求的用户或者服务的地址信息)+ SIP-Version(版本信息)+ CRLF
举例:INVITE sip:bob@zte.com SIP/2.0 /r/n
- 状态行
格式:SIP-Version + Status-Code(状态码)+ Reason-Phrase(状态码含义)+ CRLF
举例:SIP/2.0 200 OK /r/n