米葫芦网

SIP、SAP及SDP协议组合应用的研究

热度:7℃ 发布时间:2023-11-16 19:38:42
摘 要 SIP、SAP、SDP是NGN与3Tnet中涉及的重要协议。本文在介绍与分析SIP、SAP、SDP协议的基础上,给出了一个基于三种协议组合而实现的多媒体会议应用实例。
要害词 SIP SAP SDP

1 引 言

SIP(Session Initiation Protocol,会话初始协议)、SAP(Session Announcement Protocol,会话通告协议)、SDP(Session Description Protocol,会话描述协议)是三个与会话(Session)有关的既有联系又有区别的RFC协议。在本文中,我们将对这三个协议做简单分析并给出一个利用这三个协议实现的具有一定实用价值的多媒体应用。

2 协议分析

2.1 SIP协议介绍与分析

会话初始协议(SIP)是一信令协议用于初始、治理和终止分组网络中的语音和视频会话,具体地说就是用来生成、修改和终结一个或多个参与者之间的会话。SIP是互联网工程任务组(IETF)多媒体数据和控制体系结构的一个组成部分,因此它与IETF的许多其他协议都有联系,例如RTP(实时传输协议)和本文提到的SAP、SDP协议。

SIP主要提供了与会话建立和终结相关的五个方面功能,它们是:

(1)用户定位:用于通信的终端系统的决定;

(2)用户可用性:被呼叫方参与通信的意愿的决定;

(3)用户能力:使用的媒体和媒体参数的决定;

(4)会话建立:“振铃”,呼叫和被呼叫方会话参数的建立;

(5)会话治理:包括转移和终结会话,修改会话参数,以及调用业务等。

SIP网络由四种类型的逻辑SIP实体组成。每一实体具有特定的功能,并且作为客户机(初始请求),或作为服务器(响应请求),或作为两者的结合参与到SIP通信中。一个“物理设备”能够具有多于一个逻辑SIP实体的功能性。例如,作为代理服务器的网络服务器可同时具备注册服务器的功能。

下面是四种功能实体:

(1)用户代理

在SIP中,用户代理(UA)是端点实体。用户代理通过交换请求和响应初始和终止会话。UA作为一应用程序,它包含用户代理客户机和用户代理服务器,如下:

· 用户代理客户机(UAC):客户机应用程序,它初始SIP请求。

· 用户代理服务器(UAS):服务器应用程序,当接收到SIP请求时它联系用户并且代表用户返回一响应。

在SIP网络中具有UA功能的设备是:工作站,IP电话,电话网关,呼叫代理,自动应答服务。

(2)代理服务器

代理服务器是同时作为服务器和客户机的中间实体,其目的是代表其他客户机生成请求。请求被内部处理或可能在翻译之后将其传递到其他服务器。假如需要,代理在转发之前可解释和重写请求消息。

(3)重定向服务器

重定向服务器接受SIP请求,并将被呼叫方的SIP地址映射成零个(假如没有可知地址)或更多的新地址并且将它们返回客户机。不像代理服务器,重定向服务器不传递请求到其他服务器。

(4)注册服务器

注册服务器是接受REGISTER请求的服务器,其目的是根据用户在请求中规定的联系信息更新位置数据库。

SIP通过E-mail形式的地址来标明用户地址。每一用户通过一等级化的URL来标识,它通过诸如用户电话号码或主机名等元素来构造(例如:SIP:user@company.com)。因为它与E-mail地址的相似性,SIP URLs轻易与用户的E-mail地址关联。

SIP有两种类型的消息,它们是:

(1)请求:从客户机发到服务器的消息。

(2)响应:从服务器发到客户机的消息。

其中请求消息包括:

· INVITE:初始呼叫,改变所以参数(re-INVITE)。

· ACK:确认INVITE的最终应答。

· BYE:终止呼叫。

· CANCEL:撤消搜索和振玲。

· OPTIONS:查询另一方能力。

· REGISTER:注册位置服务。

· INFO:发送会话中信息而不改变会话状态。

· PRACK:与ACK作用相同,但是用于临时响应。

· SUBSCRIBE:该方法用来向远端端点预订其状态变化的通知。

· NOTIFY:该方法发送消息以通知预订者它所预定的状态的变化。

· UPDATE:答应客户更新一个会话的参数而不影响该会话的当前状态。

· MESSAGE:通过在其请求体中承载即时消息内容实现即时消息。

· REFER:其功能是指示接受方通过使用在请求中提供的联系地址信息联系第三方。

响应消息包含数字响应代码。SIP响应代码集部分基于HTTP响应代码。有两种类型的响应,它们是:

· 临时响应(1XX):临时响应被服务器用来指示进程,但是不终结SIP事物。

· 最终响应(2XX,3XX,4XX,5XX,6XX):最终响应终止SIP事物。

每条SIP消息由以下三部分组成:

(1)起始行(Start Line):每个SIP消息由起始行开始。起始行传达消息类型(在请求中是方法类型,在响应中是响应代码)与协议版本。起始行可以是一请求行(请求)或状态行(响应)。

(2)SIP头:用来传递消息属性和修改消息意义。它们在语法和语义上与HTTP头域相同(实际上有些头就是借自HTTP),并且总是保持格式:<名字>:<值>。

(3)消息体:用于描述被初始的会话(例如,在多媒体会话中包括音频和视频编码类型,采样率等)。消息体能够显示在请求与响应中。SIP清楚区别了在SIP起始行和头中传递的信令信息与在SIP范围之外的会话描述信息。可能的体类型就包括本文将要描述的SDP会话描述协议。


2.2 SAP协议介绍与分析

SAP的全称是会话通告协议,其目的是为了通知一个多播的多媒体会议或其他多播会话而将相关的会话建立信息发送给所期望的会议参与者。SAP协议本身并不建立会话,它只是将建立会话所必要的信息,例如所采取的视频或音频编码方式通知给其他在一个多播组内的参与者,当参与者接收到该通知数据包后就可以启动相应的工具并设置正确的参数向该会议的发起者建立会话了(建立会话可以使用SIP协议)。

通知的发起者并不知道各参与者是否收到了会话通知,也就是说每个参与者并不向通知发起者回复“我收到了通知”的确认;因此,通知发起者只能够通过周期性地发送这个会话通知从而最大可能地使参与者收到通知。

SAP并不是向每个参与者一一发通知数据包,它是通过多播的机制(multicast)向一个已知的多播地址和端口一次性发送一个通知数据包,该多播组内的成员假如工作正常的化就会收到该通知数据包。因此,为了使会议的参与者都能够接收到通知,就要确保其参加到该多播组内。

一个通知数据报除了可以通知某会话将要发起外,还可以通知该会话取消了或该会话的某些通信参数已被修改了。当然,这需要相应机制使这几个通知都是针对同一会话的。

那么SAP如何描述会话的相关信息,这就需要借助SDP协议了。在SAP数据包的payload字段中一般情况下填充的就是SDP数据,它描述了建立会话所必要的基本信息。

SDP将在1.3节中介绍。

2.3 SDP协议介绍与分析

上面介绍的两个协议都用到了SDP,实际上SDP就是用来描述多媒体会话通告,多媒体会话邀请和其他形式的多媒体会话初始化的协议。SDP包通常包括以下信息:

(1)会话信息

· 会话名和目的。

· 会话活动时间。

由于参与会话的资源是受限制的,因此包括以下附加信息是非常有用的。

· 会话使用的带宽信息。

· 会话负责人的联系信息。

(2)媒体信息

· 媒体类型,例如视频和音频。

· 传输协议,例如RTP/UDP/IP和H.320。

· 媒体格式,例如H.261视频和MPEG视频。

· 多播地址和媒体传输端口(IP多播会话)。

· 用于联系地址的媒体和传输端口的远端地址(IP单播会话)。

SDP描述由许多文本行组成,文本行的格式为<类型>=<值>,<类型>是一个字母,<值>是结构化的文本串,其格式依<类型>而定。

3 SAP、SIP、SDP组合应用实例

在这个应用实例中,我们设计了这样一种场景:某公司领导需要与本公司各部门负责人召开电视会议。他使用的多媒体会议系统采用了本文所描述的这种SAP、SIP、SDP组合应用技术。该公司领导首先通过一台具有Web浏览功能的客户机登陆会议服务器,注册一个会议。在注册的同时,他就将各部门负责人纳入了本次会议的参与者之列(当然,还需要该公司领导和各部门负责人的客户机在同一个多播组内)。然后,他在页面上点击一个“会议通知”按钮,会议服务器就通过SAP协议向本次会议的各参与者(包括公司领导和部门负责人)所在客户机发送召开会议的通知。此时,若各参与者所在客户机是正常的连接到网络上并且SAP通知接收器正常工作的话,它就会以声音或图形的方式通知该参与者,同时预备好本客户机参加此次会议的客户端程序。当各参与者发现会议通知后,他在已经预备好的会议客户端程序上点击一个“参加会议”的按钮,客户端就通过SIP协议将该客户机轻松地加入到会议之中。当参与者到齐后,在会议主席(公司领导)的控制下,此次会议就可以正式开始了。

各参与者客户机上的SAP通知接收器接收到会议通知后,它会尽可能地调用客户机上的各种资源以满足本次会议的要求,假如实在不能够满足的话,它也可以以书面形式通知参与者本机所缺的资源。在整个会议的SAP、SIP交互过程中都用到了SDP协议来描述会话和媒体信息。简要流程如附图所示。

4 结束语

SAP、SIP、SDP都不是孤立的协议,只有在相互组合与协调并且与其他协议配合的情况下,才能够发挥它们应有的强大作用。本文给出了SAP、SIP、SDP组合应用


网友评论
评论
发 布

更多软件教程
  • 软件教程推荐
更多+
Greenfoot设置中文的方法

Greenfoot设置中文的方法

Greenfoot是一款简单易用的Java开发环境,该软件界面清爽简约,既可以作为一个开发框使用,也能够作为集成开发环境使用,操作起来十分简单。这款软件支持多种语言,但是默认的语言是英文,因此将该软件下载到电脑上的时候,会发现软件的界面语言是英文版本的,这对于英语基础较差的朋友来说,使用这款软件就会...

07-05

Egret UI Editor修改快捷键的方法

Egret UI Editor修改快捷键的方法

Egret UI Editor是一款开源的2D游戏开发代码编辑软件,其主要功能是针对Egret项目中的Exml皮肤文件进行可视化编辑,功能十分强大。我们在使用这款软件的过程中,可以将一些常用操作设置快捷键,这样就可以简化编程,从而提高代码编辑的工作效率。但是这款软件在日常生活中使用得不多,并且专业性...

07-05

KittenCode新建项目的方法

KittenCode新建项目的方法

KittenCode是一款十分专业的编程软件,该软件给用户提供了可视化的操作界面,支持Python语言的编程开发以及第三方库管理,并且提供了很多实用的工具,功能十分强大。我们在使用这款软件进行编程开发的过程中,最基本、最常做的操作就是新建项目,因此我们很有必要掌握新建项目的方法。但是这款软件的专业性...

07-05

Thonny设置中文的方法

Thonny设置中文的方法

Thonny是一款十分专业的Python编辑软件,该软件界面清爽简单,给用户提供了丰富的编程工具,具备代码补全、语法错误显示等功能,非常的适合新手使用。该软件还支持多种语言,所以在下载这款软件的时候,有时候下载到电脑中的软件是英文版本的,这对于英语基础较差的小伙伴来说,使用这款软件就会变得十分困难,...

07-05

最新软件下载