SIP(Session Initiation Protocol,会话初始协议)
主叫方A呼叫被叫方B:
步骤1:主叫方A
发送INVITE
请求到代理服务器
;
步骤2:代理服务器
发送100 Trying 响应主叫方A
;
步骤3~6:代理服务器
搜索被叫方B
的地址,获取地址后转发INVITE请求;
步骤7~9:被叫方B
生成的180 振铃响应,返回给主叫方A
;
步骤10~12:被叫方B
生成的200 OK响应,返回给主叫方A
;
步骤13~17:主叫方A
收到被叫方B
200 OK响应后,向被叫方B
发送一个ACK,会话建立;
步骤18~20:会话结束后,任何参与者(A或B)都可以发送一个BYE请求来终止会话;
步骤21~23:主叫方A
发送200 OK响应来确认BYE,会话终止。
注:以上的整个流程称之为一个Dialog
步骤1:User1
发送MESSAGE
请求到代理服务器
;
步骤2:代理服务器
转发User1
的MESSAGE请求给USER2
;
步骤3:User2
收到User1
的消息后,回复200 OK给代理服务器
;
步骤7~9:代理服务器
转发200 OK回复给User1
SIP消息体结构
与Http协议结构
相似,均由三部分组成:请求行(request-line) or 状态行(status-line)
消息头(header)
正文(body)
请求行格式: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
Status-Code状态码: 状态代码由3位数字组成,表示请求是否被理解或被满足。 状态代码的第一个数字定义了响应的类别,后面两位没有具体的分类
。
发送MESSAGE
消息给user2
MESSAGE sip:user2@domain.com SIP/2.0
Via: SIP/2.0/TCP user1pc.domain.com;branch=z9hG4bK776sgdkse
Max-Forwards: 70
From: sip:user1@domain.com;tag=49583
To: sip:user2@domain.com
Call-ID: asd88asd77a@1.2.3.4
CSeq: 1 MESSAGE
Content-Type: text/plain
Content-Length: 18
123456789