目录
一、SIP协议概念
会话启动协议 SIP(Session Initiation Protocol) 是一个在IP网络上进行多媒体通信的应用层控制协议,被用来创建、修改、和终止一个或多个参加者参加的会话进程。
协议功能:
- 用户定位:确定参加通信的终端用户位置;
- 用户通信能力协商:确定通信的媒体类型和参数;
- 建立呼叫:包括向被叫 "振铃",确定主叫和被叫的呼叫参数;
- 呼叫处理和控制:包括呼叫重定向、呼叫转移、终止呼叫等等。
SIP是在应用层上的协议,可以使用UDP、TCP,但一般默认使用UDP5060
端口进行信令控制
控制流:由上图可以分析到,首先发送方将呼叫送到语音网关上面,再由语音网关送到接收方。
媒体流:媒体流是不需要经过语音网关的,直接是和接收方点对点传输媒体流。
所以可能会出现一种情况,我们信令层面是可以送达的(有振铃音),但是接起来电话没有声音,遇到这种情况需要排查一下 从发送方
到 接收方
网络上是否有限制。
二、SIP URL
为了能够正确传送协议消息,SIP还需要解决两个重要问题,第一是 "寻址",即采用什么样的地址形式标识终端用户。第二是 "用户的定位"。
寻址采用 SIP URL,按照RFC2396规定的URL导则定义其语法,特别是用户名字段可以是电话号码,以支持IP电话网关寻址,实现IP电话和PSTN的互通。
SIP URL的一般格式结构为:
- SIP; [email protected]:5061; User=phone;
- SIP;用户名@主机:端口,用户参数;
三、SIP协议消息体
1、请求消息分类
请求消息 | 消息含义 |
---|---|
INVITE | 发起会话请求,邀请用户加入一个会话 |
ACK | 对INVITE请求的最终响应;该消息配合INVITE使用 |
BYE | 结束会话 |
CANCEL | 取消尚未完成的请求 |
REGISTER | 注册 |
OPTIONS | 查询服务器的能力 |
2、请求消息结构
INVITE sip:[email protected]:15060 SIP/2.0 # 消息名称 对端URL 版本
From: <sip:[email protected]>;tag=XrU4v00Xm6ZrQ # 发送方
To: <sip:[email protected]:15060> # 接收方
CSeq: 61369395 INVITE
Call-ID: 977c6c60-fdcf-123b-2e8a-fefcfeabc200 # 唯一标识
Via: SIP/2.0/UDP 27.17.53.100:38890;rport;branch=z9hG4bKByyNQBrUKmy9K # 标识请求路径
Contact: <sip:[email protected]:38890>
Supported: timer, path, replaces
Max-Forwards: 70 # 最大跳转数
3、响应消息分类
对上面请求消息的回应
状态码 | 解释 | 表述 |
---|---|---|
1xx | 临时响应 | 表示已经接收到请求,正在处理 |
2xx | 成功响应 | 表示成功接受请求、处理 |
3xxx | 重定向响应 | 表示需要采取下一步动作,以完成请求 |
4xx | 客户端出错 | 表示请求消息中包含错误或SIP服务器不能完成该请求 |
5xx | 服务端出错 | 表示SIP服务器故障不能完成对正确消息的处理 |
6xx | 全局出错 | 表示请求不能在任何SIP服务器上实现 |