多媒体开发SIP协议

SIP [RFC3261]

2018-04-19  本文已影响132人  耦耦

SIP概括


会话初始协议(Session Initiation Protocal, SIP)。SIP是一个应用层的信令控制协议,主要目的是在 IP 网络中建立、修改和释放多媒体会话的应用层协议。其主要的应用包括但不局限于语音、消息、视频、呼叫控制等。会话的参与者可以通过组播(multicast)、网状单播(unicast)或两者的混合体进行通信。
SIP的业务模式是一个点对点协议,其中有两个要素——SIP用户代理(User Agent, UA)和SIP网络服务器。

下图是SIP业务的网络结构和各个参与者的关系。


网络结构和各参与者的关系图

SIP支持建立和终止多媒体通信的五个方面

SIP协议主要消息


SIP消息分类

SIP协议是以层协议的形式组成的,就是说它的行为是以一套相对独立的处理阶段来描述的,每个阶段之间的关系不是很密切。SIP协议将Server和User Agent之间的通讯的消息分为两类:请求消息和响应消息

请求常用方法 [请求消息]

SIP请求方法的列表

请求在两个SIP实体之间发起SIP事务,以建立,控制和终止会话。常用的SIP请求消息如下:

请求常用响应代码 [响应消息]

SIP响应代码列表
SIP消息类型和消息列表

SIP消息结构


SIP请求由三部分组成:请求行、请求头和请求体。SIP 是一个基于文本的协议,在这一点上与 HTTP 和 SMTP 相似,这里对比一个简单的SIP请求和HTTP请求:

GET /index.html HTTP/1.1    

INVITE sip:seven@freeswitch.org.cn SIP/2.0 

在 HTTP 中, GET 指明一个获取资源(文件)的动作,而 /index.html 则是资源的地址,最后是协议版本号。而在 SIP 中,INVITE 表示发起一次请求,seven@freeswitch.org.cn 为请求的地址,称为 SIP URI,最后也是版本号。其中,SIP URI很类似一个电子邮件,其格式为“协议:名称@主机”。与 HTTP 和 HTTPS 相对应,有 SIP 和 SIPS,后者是加密的;名称可以是一串数字的电话号码,也可以是字母表示的名称;而主机可以是一个域名,也可以是一个IP地址。

SIP 是一个对等的协议,类似 P2P。不像传统电话那样必须有一个中心的交换机,它可以在不需要服务器的情况下进行通信,只要通信双方都彼此知道对方地址(或者,只有一方知道另一方地 址),在不知道的情况下就需要服务器来中转。

INVITE 示例 !!!

1、Request-Line:请求行
请求行包括三个部分:方法名、请求URL、协议版本
请求的方法,定义了请求的性质(INVATE、NOTIFY、BYE等),以及一个Request-URI,指出请求应该发送的位置。典型的SIP URI的格式为sip:username @ domainnamesip:username @ hostport。如下图示例:

SIP请求头示例

2、Message Header:请求头

via:SIP版本号(2.0)、传输类型(UDP)、呼叫地址 、branch。branch为分支,是一随机码,它被看作传输标识,标志会话事务。
  <=Via字段中地址是消息发送方或代理转发方设备地址,一般由主机地址和端口号组成
  <=传输类型可以为UDP、TCP、TLS、SCTP

From:表示请求消息的发送方和目标方
  <=如果里面有用户名标签,地址要求用尖括号包起来
  <=对于INVITE消息,可以在From字段中包含tag,它也是个随机码

To:请求消息的目标方
Contact:是INVITE消息所必须的,用来告诉对方,回消息给谁。**
  <=(注意区别:在180RINGING的时候,这里是目标方地址)**
Call-ID:用于标识一个特定邀请以及与这个邀请相关的所有后续事务(即标识一个会话)
CSeq:字段是用来给同一个会话中的事务进行排序的,每发送一个新的请求,该值加1,当排序到65535(也就是216的最大数),会开始新一轮的排序。
Allow:允许的请求消息类型
Supported
Session-Expires:存活时间,用户的响应必须在这个时间范围内
Min-SE:最小长度。
X-UCM-AudioRecord:自定义字段
X-UCM-CallPark:自定义字段
Max-Forwards:最大转发数量限制了通讯中转发的数量。它是由一个整数组成,每转发一次,整数减一。如果在请求消息到达目的地之前该值变为零,那么请求将被拒绝并返回一个483(跳数过多)错误响应消息。
User-Agent:指明UA的用户类型
Content-Type:消息实体类型
Content-Length:消息实体长度,单位为字节

本地将生成From tag和Call-ID全局唯一码,被叫方代理则生成To tag全局唯一码。这三个随机码做为整个对话中对话标识(dialog indentifier)在通话双方使用。

3、Message Body:请求体
请求体主要包含的就是SDP相关的东西,详细解释可以参考这里

SIP主要概念模型


实体模型概述

SIP 协议模型定义了 User Agent 和 Server 等两类主要实体。

SIP 协议把 User Agent(即 UA)分为两个部分:User Agent Client 和 User
Agent Server。呼叫方(称 User Agent Client)发出邀请 (或呼叫),被叫
方(称 User Agent Server)接受或拒绝邀请 (或呼叫)。

SIP Server

Proxy Server 代理服务器

Proxy Server 作为 UAC和 UAS 间的中间媒体,它转发 UAC 发来的的邀请,在转发之前,根据被叫标识请求位置服务器获得被叫的可能位置,然后分别向它们发出邀请;

Redirect Server 重定向服务器

Redirect Server 接受UAC来的邀请,根据被叫标识请求位置服务器获得被叫的可能位置,把这些信息返回给邀请的发起者(UAC),和 Proxy Server 的不同之处就在于它不转发邀请,邀请由主叫终端自己完成。

设 想 bob 和 alice 是经人介绍认识的,而他们还不熟悉,bob 想请 alice 吃饭就需要一个中间人(M)传话,而这个中间人就叫代理服务器(Proxy Server)。还有另一种中间人叫做重定向服务器(Redirect Server),它类似于这样的方式工作──中间人 M 告诉 bob,我也不知道 alice 在哪里,但我老婆知道,要不然我告诉你我老婆的电话,你直接问她吧,我老婆叫 W。这样,M 就成了一个重定向服务器,而他老婆 W 则是真正的代理服务器。这两种服务器都是 UAS,它们主要是提供一对欲通话的 UA 之间的路由选择功能。具有这种功能的设备通常称为边界会话控制器(SBC,Service Border Controller)。

Register Server 注册服务器

主要用于登记分组终端的当前位置和位置服务的原始数据;

试想这样一种情况,alice 还是个学生,没有自己的手机,但它又希望 bob 能随时找到她,于是当她在学校时就告诉中间人 M 说她在学校,如果有事打她可以打宿舍的电话;而当她回家时也通知 M 说有事打家里电话。只要 alice 换一个新的位置,它就要向 M 重新“注册”新位置的电话,以让 M 能随时找到她,这时候 M 就是一个注册服务器。

Back to Back 背靠背用户代理

RFC 3261 并没有定义 B2BUA的功能,它只是一对 UAS 和 UAC的串联。FreeSWITCH 就是一个典型的 B2BUA。

我们来看上述故 事的另一个版本:M 和 W 是一对恩爱夫妻。M 认识 bob 而 W 认识 alice。M 和 W 有意搓合两个年轻人,但见面时由于两人太腼腆而互相没留电话号码。事后 bob 相知道 alice 对他感觉如何,于是打电话问 M,M 不认识 alice,就转身问老婆 W (注意这次 M 没有直接把 W 电话给 bob),W 接着打电话给 alice,alice 说印象还不错,W 就把这句话告诉 M, M 又转过身告诉 bob。 M 和 W 一个面向 bob,一个对着 alice,他们两个合在一起,称作 B2BUA。在这里,bob 是 UAC,因为他发起请求;M 是 UAS,因为他接受 bob 的请求并为他服务;我们把 M 和 W 看做一个整体,他们背靠着背(站着坐着躺着都行),W 是 UAC,因为她又向 alice 发起了请求,最后 alice 是 UAS。其实这里UAC 和 UAS 的概念也不是那么重要,重要的是要理解这个背靠背的用户代理。因为事情还没有完,bob 一听说 alice 对他印象还不错,心花怒放,便想请 alice 吃饭,他告诉 M, M 告诉 W, W 又告诉 alice,alice 问去哪吃,W 又只好问 M, M 再问 bob…… 在这对年轻人挂断电话这前, M 和 W 只能“背对背”的工作。

这几种代理服务器的描述文字比较多,但是说的很形象。

SIP基本网络模型,来个图感受一下!!
SIP基本网络模型.png

参考


服务器的端口和协议要求
音频和视频会议的RTP配置文件与最小的控制
SIP常用消息实例参考
会话初始化协议(SIP)简介及应用
Session Initiation Protocol
SIP协议参数详解

上一篇 下一篇

猜你喜欢

热点阅读