[toc]
简介
SIP(Session Initiation Protocol),会话发起协议,顾名思义,就是用于发起会话的协议。
SIP会话(Session)是两个用户终端之间(也可能是多个用户之间)基于IP网络的会话,即VoIP会话;会话的媒体一般是语音、视频、也可能有其他形式。
SIP协议本身只负责会话的建立,具体来说,就是在两个用户终端之间通过SIP消息交换传递消息,完成会话的建立;
会话建立过程中的一个关键点是交换发送/接受会话媒体的地址及相关参数,即媒体描述;媒体描述是通过SDP来完成的;会话建立以后,两方得到了彼此的媒体地址之后,就可以向对方发送媒体,开始通话。媒体传输是通过RTP(实时传输协议)完成的。
SDP、RTP,与SIP协议是相对独立的。
SIP运行在我们熟知的TCP和UDP协议之上,既可以使用TCP协议通信也可以通过UDP协议通信。SIP是对等协议,一个端既是客户端又是服务端。
VoIP(Voice on IP),从字面上看就是语音跑在IP网络上。具体来说就是将电话业务(或者说模拟信号)与web浏览,email等其它数据应用一样,承载在IP网络上。常见的应用场景有:传送语音、传真、视频、和数据等业务,如统一消息业务、虚拟电话、虚拟语音/传真邮箱、查号业务、Internet呼叫中心、Internet呼叫管理、电话视频会议、电子商务、传真存储转发和各种信息的存储转发等。
与主流的web应用相比,VoIP具有以下特点
- 媒体(内容数据)的传输是双向对称,实时的,基于单独的实时传输协议
- 呼叫建立过程基于单独的信令协议,独立于语音数据传输
这使得VoIP有自己独特的协议栈:明确区分了独立的信令协议与媒体传输协议。
SIP会话流程
发起会话流程
实际就是tcp三次握手,握手成功之后,双方就可以传输数据。
修改会话流程
结束会话流程
SIP消息
消息分类和对应的操作
SIP消息(Method) | SIP操作 | 说明 |
---|---|---|
INVITE | 会话邀请 | |
ACK | 确认会话邀请 | |
CANCEL | 取消会话邀请 | 请求方在还未收到ACK的时候可以主动取消会话邀请 |
BYE | 结束会话 | |
REGISTER | 注册 | 心跳机制 |
OPTIONS | 查询服务器能力 | 查询对端具备的能力,如支持的方法(Method),扩展(extensions),编解码(codecs) |
SIP消息体格式
SIP是一个基于文本(text-based)的协议,使用 UTF-8 字符集。
SIP消息与HTTP消息非常类似,由三部分构成(如下图所示)
- 第一行:请求行(Request-Line),状态行(Status-Line)
- 消息头域(message header)
- 消息体(message body):通常是会话描述(session descriptions),也可能是其他内容
- SIP请求的第一行是请求行(Request-Line)
- SIP响应的第一行是状态行(Status-Line)
- SIP请求消息(SIP Request)有很多,例如INVITE、ACK、BYE、CANCEL等,不同的SIP请求消息通过请求行(Request-Line)的方法(method)区分
引用
- SIP之NAT穿越:https://zhuanlan.zhihu.com/p/587072680
- SIP呼叫流程:https://zhuanlan.zhihu.com/p/452129365
- SIP消息:https://zhuanlan.zhihu.com/p/451686871
- 什么是SIP:https://zhuanlan.zhihu.com/p/436583417
- 开源SIP服务器:https://developer.aliyun.com/article/243201
- JAINSipRi框架介绍:https://www.techdatafuture.com/article?id=fc786f4f-5988-4a26-bebf-fdb5df5b3d71