typefo

I am a programmer, I like emacs and archlinux

SIP 全称 Session Initialization Protocol,即会话初始协议。主要用于 VOIP 语音通信中,做为基础电话控制信令协议,并且在语音系统中 SIP 协议通常与 RTP 流媒体传输协议一起使用。当然在 SIP 消息体中可能还会包含 SDP 媒体协商协议。SIP 处理信令,SDP 用于媒体协商,RTP 负责媒体流传输

SIP 协议基础概念

  • User Agent (UA)

User Agent 即用户代理,而 UA 又分为以下两种,User Agent Client (UAC) 用户代理客户端和 User Agent Server (UAS) 用户代理服务端,UAC 即发起呼叫的功能实体,UAS 即接收呼叫的功能实体,UA 的概念其实就是 UAC 与 UAS 的合体,比如一个 IP 话机,PC 软电话,语音网关等都可以称为一个 UA 设备实体,也就是这些设备即可以发起呼叫,也可以接收别人的呼叫

  • Proxy Server

代理服务器是一种同时具备 UAC 和 UAS 功能的设备,它主要代替某个 UA 客户端向其他客户端或者服务器发起请求,代理服务器通常会将请求根据业务需求做一些修改和处理,再将其发送到其他服务器或者 UA 客户端

  • Redirect Server

在重定向服务器中,它可以接受 SIP 请求,并将请求中的被呼叫方 SIP 地址进行处理,然后将新的被叫方 SIP 地址重新返回给原客户端,类似 HTTP 协议中的 301 重定向

  • Registrar Server

注册服务器主要接收其他 UA 客户端的注册,也就是 UA 客户端向注册服务器注册自己的位置信息,注册服务器就会将 UA 客户端的位置保存在数据库中,以便其他 UA 客户端能查询和呼叫这个 UA 客户端

SIP 请求消息

目前最常见的 SIP 协议标准是 RFC 3261,其中规定了几个基本 SIP 协议请求方法,这些方法用于不同的目的

  • INVITE

invite 表示发起一个呼叫请求,邀请另外一个客户端进行通话,而该消息体中可能还会包含 SDP 媒体会话协议包

  • ACK

ACK 主要对 INVITE 请求消息的 200 OK 响应消息进行确认,表示已经收到被叫方的 200 OK 响应消息

  • OPTIONS

OPTIONS 通常用来查询对方服务器的功能和特性,有时也用于客户端和服务器之间的心跳状态探测

  • BYE

BYE 消息主要用于结束一个通话,也就是挂断电话,主叫方和被叫方都可以主动发起 BYE 消息

  • CANCEL

CANCEL 用于取消一个尚未完成的 SIP 请求,比如给某人打电话,被叫方还没有接听,这时主叫方突然不想打了,就可以发送 CANCEL 请求取消当前的呼叫

  • REGISTER

REGISTER 请求消息用于 UA 客户端向服务器注册自己的位置信息,以便其他人能找到自己并向自己发起呼叫请求

SIP 响应消息

SIP 标准协议中,除了以上几种请求消息之外,还有一些 SIP 响应消息,这些响应消息格式与 HTTP 的响应消息类似,具体如下

  • 1XX

100 到 199 之间的响应消息,表示请求已收到,正在处理中,比如 180 表示被叫方的话机正在振铃,但是还没有接听

  • 2XX

200 - 299 表示 SIP 请求已经处理成功,比如 200 OK 即表示被叫方已经拿起了话机开始接听来电

  • 3XX

300 - 399 表示一个重定向响应,即该 SIP 请求需要转向或跳转到其他服务器进行处理

  • 4XX

400 - 499 通常表示 SIP 请求已经失败,失败原因主要是因为发起请求的客户端错误造成的

  • 5XX

500 - 599 也表示 SIP 请求已经失败,失败原因主要是接收请求的服务器端错误造成的

  • 6XX

6XX 响应消息,一般表示发生了一个全局错误

SIP 协议有很多新的标准版本,新的 RFC 扩展协议增加了一些新的消息方法,比如 INFO、UPDATE、SUBSCRIBER、NOTIFY、MESSAGE、REFER、PRACK

常见 SIP 响应码

  • 100 Trying

100 状态码表示呼叫请求已收到,正在处理中。同时也是告诉客户端不要重发 invite 请求

  • 180 Ringing

180 表示被呼叫方话机正在振铃,一般 180 消息中不携带媒体信息,需要主叫方话机设备自己给用户播放模拟回铃音

  • 183 Session Progress

183 与 180 类似,表示被叫方话机正在振铃中,但 183 一般会携带媒体流,也就是我们常说的彩铃音,主叫方会听到被叫方设置的个性回铃音

  • 401 Unauthorized

401 状态码表示客户端需要进行身份验证,才能继续向服务器发起 SIP 请求

  • 403 Forbidden

403 通常表示客户端没有权限向服务器发起 SIP 请求,需要进行一些身份授权才能继续

  • 404 Not Found

通常表示请求的号码或者资源不存在,比如在发起注册请求时,404 响应表示账号或者所在域不存在

  • 407 Proxy Authentication Request

407 表示客户端发起的 invite 请求需要携带身份认证信息才能继续

  • 408 Request Timeout

408 通常表示发起 SIP 请求之后,所等待响应的时间太长,已经超过最大超时时间而取消

  • 486 Busy

486 表示被叫方正忙,也就是被叫方可能正在与其他人通话中,暂时无法接听

  • 502 Bad Gateway

502 一般表示服务器端出现问题,暂时无法处理客户端的请求