网络协议:SIP

本文更新于2022-05-03。

基本概念

SIP(Session Initiation Protocol),即会话初始协议,是一个控制发起、修改和终结交互式多媒体会话的信令协议。

SIP是一个基于文本的协议,是一个对等的协议。

用户代理(User Agent,UA)是在SIP网络中发起或响应SIP处理的逻辑实体。UA是有状态的。UA有两种:UAC(UA Client)即发起SIP请求的一方,UAS(UA Server)即接受请求并发送响应的一方。

RFC

SIP承载

任何SIP UA必需同时支持TCP和UDP承载。在需要对SIP加密的情况下,可以使用TLS承载。SIP over WebSocket使用WebSocket承载。

方法

请求消息都包括一个方法:

  • ACK:有些响应消息需要确认,以完成三次握手。
  • BYE:终止一个会话。
  • CANCEL:取消一个等待处理或正在处理的请求。
  • INFO:传送消息,如DTMF。
  • INVITE:初始化一个会话,可以理解为发起一个呼叫。
  • MESSAGE
  • NOTIFY
  • OPTIONS:查询服务器和能力,也可以用作ping测试。
  • PRACK:对1xx消息的确认。
  • REFFER:请求协商转。
  • re-INVITE:请求盲转,收发传真。
  • REGISTER:注册联系信息。
  • SUBSCRIBE
  • UPDATE

状态码

响应消息都包括一个状态码以及原因短语(Reason Phrase):

  • 1xx:呼叫进展消息,临时状态,表示呼叫进展情况。
    • 100 Trying:表示被呼方是已收到呼叫请求,需稍等。
    • 180 Ringing:表示被呼方已经振铃,主呼方收到此消息后即可播放回铃声。
    • 183 Progress:表示被呼方已经振铃,且被叫方会使用RTP发送回铃声给主叫方,即彩铃。
  • 2xx:表示请求已被成功收到、理解、接受。
    • 200 OK
  • 3xx:重定向,表示SIP请求需要转到另一个UAS处理。
  • 4xx:请求失败,一般是由客户端或网络引起的,客户端应该修改请求然后重发。
    • 488 Not Acceptable Here:找不到兼容的编码。
  • 5xx:服务器内部错误,表示服务器出错,不能响应合法的请求。
  • 6xx:全局性错误。
    • 600 Busy Everywhere

首部

  • Allow:UA所能支持的功能。
  • Allow-Events:允许的事件通知。
  • Call-ID:用于区分不同会话的唯一标志。必需包含。
  • Contact:联系地址。当其被叫时往该地址发送消息。
  • Content-Length:消息正文的长度。
  • CSeq:顺序号,用于在同一会话中区分事务。必需包含。
  • Expires:注册的有效期,单位是秒。
  • From:请求来源。必需包含。
  • Max-Forwards:限制跳跃点数和最大转发次数。主要是为了防止产生死循环。必需包含。
  • Reason:挂机原因。NORMAL_CLEARING表示正常释放。
  • Refer-To:协商转的目标用户。
  • Remote-Party-ID:来电显示的信息。
  • To:请求接收方。必需包含。
  • User-Agent:UA的型号。
  • Via:描述消息经过的路径。如果经过多个代理服务器,则有多个头域。包含以下参数:rport为实际来源端口,received为实际来源IP。必需包含。
  • Warning:说明问题原因。

SIP URI

SIP URI或AOR(Address of Record,用户的公开地址),格式为“协议:名称@主机”:

sip|sips:USERNAME@IP|DOMAIN[:PORT]

如:

                      +---------------------------+
                      | FreeSWITCH at 192.168.1.9 |
                      +---------------------------+
   SIP URI: sip:Bob@192.168.1.9   |   |   SIP URI: sip:Alice@192.168.1.9
                 +----------------+   +-----------------+
                 |                                      |
+----------------------------------+ +----------------------------------+
| Bob at 192.168.1.100             | | Alice at 192.168.1.200           |
| Contact: sip:Bob@192.168.1.100   | | Contact: sip:Alice@192.168.1.200 |
+----------------------------------+ +----------------------------------+

交互流程

注册

UAC                                  UAS
|---------------REGISTER-------------->|
|<----------401 Unauthorized-----------|
|---------------REGISTER-------------->|
|<---------------200 OK----------------|

认证方式使用HTTP的摘要(Digest)认证。如认证失败,则回复非200的消息(如403 Forbidden)。

UA间直接呼叫

UAC                                  UAS
|--------------INVITE (SDP)----------->|
|<-------------100 Trying--------------|
|<-------------180 Ringing-------------|
|<-------------200 OK (SDP)------------|
|-----------------ACK----------------->|
|*****************RTP******************|
|<----------------BYE------------------|
|----------------200 OK--------------->|

INVITE-1xx-200等消息合在一起称为一个事务,BYE-200也是一个事务。

上面的所有消息称为一个对话(Dialog/Dialogue)。

通过B2BUA呼叫

UAC                                [UAS UAC]                                UAS
|--------------INVITE (SDP)----------->|                                      |
|<-------------100 Trying--------------|                                      |
|<--407 Proxy Authentication Required--|                                      |
|-----------------ACK----------------->|                                      |
|--------------INVITE (SDP)----------->|                                      |
|<-------------100 Trying--------------|                                      |
|                                      |--------------INVITE (SDP)----------->|
|                                      |<-------------100 Trying--------------|
|                                      |<-------------180 Ringing-------------|
|<---180 Ringing / 183 Progress (SDP)--|                                      |
|                                      |<-------------200 OK (SDP)------------|
|<-------------200 OK (SDP)------------|                                      |
|-----------------ACK----------------->|                                      |
|                                      |-----------------ACK----------------->|
|*************************************RTP*************************************|
|                                      |<----------------BYE------------------|
|<----------------BYE------------------|                                      |
|----------------200 OK--------------->|                                      |
|                                      |----------------200 OK--------------->|
posted @ 2022-08-25 17:41  garvenc  阅读(618)  评论(0编辑  收藏  举报