【转】SIP协议 会话发起协议

转自:https://www.cnblogs.com/gardenofhu/p/7299963.html

会话发起协议(SIP)是VoIP技术中最常用的协议之一。它是一种应用层协议,与其他应用层协议协同工作,通过Internet控制多媒体通信会话。

SIP - 概述

以下是有关SIP的几点注意事项 -

  • SIP是用于通过因特网协议创建,修改和终止多媒体会话的信令协议。会话只不过是两个端点之间的简单调用。端点可以是智能电话,笔记本电脑或可以通过因特网接收和发送多媒体内容的任何设备。
  • SIP是由IETF(Internet Engineering Task Force)标准定义的应用层协议。它在RFC 3261中定义。
  • SIP体现了客户端 - 服务器体系结构,以及使用HTTP和URL的URL和URI 以及SMTP的文本编码方案和头样式。
  • SIP采用SDP(会话描述协议)的帮助,它描述了用于通过IP网络传送语音和视频的会话和RTP(实时传输协议)。
  • SIP可用于双方(单播)或多方(多播)会话。
  • 其他SIP应用包括文件传输,即时通讯,视频会议,网络游戏,以及流多媒体分发。

下图说明了SIP在一般方案中的适用性 -

通常,SIP协议用于两个或多个端点之间的互联网电话和多媒体分发。例如,一个人可以使用SIP发起对另一个人的电话呼叫,或者有人可以与许多参与者建立电话会议。

SIP协议的设计非常简单,配置有限的命令。它也是基于文本的,所以任何人都可以读取SIP会话中的端点之间传递的SIP消息。

有一些实体帮助SIP创建其网络。在SIP中,每个网元由SIP URI(统一资源标识符)来标识,它像一个地址。以下是网络元素 -

  • 用户代理
  • 代理服务器
  • 注册服务器
  • 重定向服务器
  • 位置服务器

用户代理

它是SIP网络的端点和最重要的网络元素之一。端点可以启动,修改或终止会话。用户代理是SIP网络中最智能的设备或网络元件。它可以是软电话,手机或笔记本电脑。

用户代理在逻辑上分为两部分 -

  • 用户代理客户端(UAC) - 发送请求并接收响应的实体。
  • 用户代理服务器(UAS) - 接收请求并发送响应的实体。

SIP基于客户机 - 服务器架构,其中呼叫者的电话充当发起呼叫的客户端,被叫方的电话充当响应呼叫的服务器。

代理服务器

网络元素接收来自用户代理的请求并将其转发给另一个用户。

  • 基本上代理服务器的作用就像一个路由器。
  • 它有一些智慧来了解SIP请求,并在URI的帮助下发送它。
  • 代理服务器位于两个用户代理之间。
  • 源和目的地之间最多可以有70个代理服务器。

有两种类型的代理服务器 -

  • 无状态代理服务器 - 它只是转发收到的消息。这种类型的服务器不存储任何呼叫或交易的信息。
  • 有状态代理服务器 - 这种类型的代理服务器可以跟踪收到的每个请求和响应,并且如果需要,可以将来使用它。如果对方没有响应,它可以重新发送请求。

注册服务器

注册服务器接受用户代理的注册请求。它可以帮助用户在网络中进行身份验证。它将URI和用户的位置存储在数据库中,以帮助同一域内的其他SIP服务器。

看看下面的示例,显示SIP注册的过程。

这里呼叫者想要向TMC域注册。因此,它向TMC的Registrar服务器发送REGISTER请求,并且服务器在授权客户端时返回200 OK响应。

重定向服务器

重定向服务器接收请求,并在注册器创建的位置数据库中查找请求的预期收件人。

重定向服务器使用数据库获取位置信息,并以3xx(重定向响应)响应给用户。我们将在本教程的后面讨论响应代码。

位置服务器

位置服务器提供有关呼叫者可能的位置到重定向和代理服务器的信息。

只有代理服务器或重定向服务器可以联系位置服务器。

下图描绘了每个网络元素在建立会话中所扮演的角色。

SIP - 系统架构

SIP被构造为分层协议,这意味着其行为根据一组相当独立的处理阶段来描述,只有每个阶段之间的松散耦合。

  • SIP的最低层是其语法和编码。其编码使用增强的Backus-Naur表格语法(BNF)来指定。
  • 第二层是传输层。它定义客户端如何发送请求并接收响应,以及服务器如何接收请求并通过网络发送响应。所有SIP元素都包含传输层。
  • 接下来是事务层。事务是由客户端事务(使用传输层)发送到服务器事务的请求,以及从服务器事务发送回客户端的对该请求的所有响应。用户代理客户端(UAC)完成的任何任务都将使用一系列事务进行。无状态代理不包含事务层。
  • 事务层上面的称为事务用户。除了无状态代理之外,每个SIP实体都是一个事务用户。

下图显示了SIP会话的基本呼叫流程。

以下是对上述呼叫流程的逐步说明 -

  • 发送到代理服务器的INVITE请求负责启动会话。
  • 代理服务器发送100 尝试立即响应呼叫者(Alice)以停止INVITE请求的重新发送。
  • 代理服务器在位置服务器中搜索Bob的地址。获取地址后,进一步转发INVITE请求。
  • 此后,Bob手机生成的180 振铃(临时响应)返回给爱丽丝。
  • 鲍勃拿起手机后一个200 OK响应很快产生。
  • 一旦200 OK到达Alice,Bob 从Alice 收到一个ACK。
  • 同时,会话建立,RTP数据包(会话)从两端开始流动。
  • 会话结束后,任何参与者(Alice或Bob)都可以发送一个BYE请求来终止会话。
  • BYE直接从Alice到Bob绕过代理服务器。
  • 最后,Bob发送200 OK响应来确认BYE,会话终止。
  • 在上述基本呼叫流程中,可以使用三个事务(标记为1,2,3)。

完整的呼叫(从INVITE到200 OK)称为对话Dialog

SIP梯形

代理如何帮助一个用户与另一个用户连接?让我们在下图的帮助下找出。

图中所示的拓扑结构称为SIP梯形图。该过程发生如下 -

  • 当呼叫方发起呼叫时,将向代理服务器发送INVITE消息。代理服务器收到INVITE后,尝试借助DNS服务器解析受理者的地址。
  • 在获得下一个路由之后,呼叫者的代理服务器(代理1,也称为出站代理服务器)将INVITE请求转发给作为被呼叫者的入站代理服务器(代理服务器2)的被呼叫者的代理服务器。
  • 入站代理服务器联系位置服务器以获取用户注册的被叫方地址信息。
  • 从位置服务器获取信息后,将呼叫转发到其目的地。
  • 一旦用户代理知道他们的地址,他们可以绕过呼叫,即直接通话。

SIP消息有两种类型 - 请求响应

  • 请求的开始行包含定义请求的方法,以及定义要发送请求的请求URI。
  • 类似地,响应的开始行包含响应代码。

请求方式

SIP请求是用于建立通信的代码。为了补充它们,SIP响应通常指示请求是成功还是失败。

这些被称为METHODS的SIP请求使SIP消息可行。

  • 方法可以被认为是SIP请求,因为它们请求由另一用户代理或服务器采取的特定动作。
  • 方法被分为两种类型 -
    • 核心方法
    • 扩展方法

核心方法

有六种核心方法,如下所述。

邀请

INVITE用于启动与用户代理的会话。换句话说,INVITE方法用于在用户代理之间建立媒体会话。

  • INVITE可以在邮件正文中包含主叫方的媒体信息。
  • 如果INVITE已经接收到成功响应(2xx)或已经发送ACK,则会话被认为是建立的。

  • 成功的INVITE请求在两个用户代理之间建立对话,直到发送BYE才能终止会话。
  • 在已建立的对话框内发送的INVITE被称为re-INVITE
  • Re-INVITE用于更改会话特性或刷新对话框的状态。
  • 邀请示例

    以下代码显示了INVITE如何使用。

INVITE sips:[email protected] SIP/2.0
   Via: SIP/2.0/TLS client.ANC.com:5061;branch = z9hG4bK74bf9
   Max-Forwards: 70
   From: Alice<sips:[email protected]>;tag = 1234567
   To: Bob<sips:[email protected]>
   Call-ID: [email protected]
   CSeq: 1 INVITE
   Contact: <sips:[email protected]>
   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY
   Supported: replaces
   Content-Type: application/sdp
   Content-Length: ...  

   v = 0
   o = Alice 2890844526 2890844526 IN IP4 client.ANC.com
   s = Session SDP
   c = IN IP4 client.ANC.com
   t = 3034423619 0
   m = audio 49170 RTP/AVP 0
   a = rtpmap:0 PCMU/8000 

BYE

BYE是用于终止既定会话的方法。这是SIP请求,可以由呼叫者或被叫方发送以终止会话。

  • 它不能由代理服务器发送。
  • BYE请求通常路由端到端,绕过代理服务器。
  • BYE不能发送到待处理的INVITE或未建立的会话。

注册

REGISTER请求执行用户代理的注册。该请求由用户代理发送到注册服务器。

  • REGISTER请求可以转发或代理,直到它到达指定域的权威注册商。
  • 它在正在注册的用户的To头中携带AOR(记录地址)。
  • REGISTER请求包含时间段(3600sec)。
  • 一个用户代理可以代表另一个用户代理发送REGISTER请求。这被称为第三方注册。这里,From标签包含代表To标题中标识的方提交注册的方的URI 。

取消

CANCEL用于终止未建立的会话。用户代理使用此请求取消之前发起的未决呼叫尝试。

  • 它可以由用户代理或代理服务器发送。
  • CANCEL是逐跳请求,即它通过用户代理之间的元素,并接收下一个有状态元素生成的响应。

ACK

ACK用于确认对INVITE方法的最终响应。如果INVITE不可用,则ACK始终沿着INVITE.ACK的方向包含SDP主体(媒体特性)。

ACK可能不会用于修改已经在初始INVITE中发送的媒体描述。

  • 接收ACK的有状态代理必须确定ACK应该向下游转发到另一个代理或用户代理。
  • 对于2xx响应,ACK是端到端的,但对于所有其他最终响应,它在涉及有状态代理时基于逐跳的工作。

OPTIONS

OPTIONS方法用于向用户代理或代理服务器询问其功能并发现其当前的可用性。对请求的响应列出了用户代理或服务器的功能。代理从不生成OPTIONS请求。

扩展方法

订阅

用户代理使用SUBSCRIBE建??立订阅,以获取有关特定事件的通知。

  • 它包含一个Expires头字段,指示订阅的持续时间。
  • 期限过后,订阅将自动终止。
  • 订阅在用户代理之间建立一个对话。
  • 您可以在到期时间之前通过在对话框内发送另一个SUBSCRIBE来重新订阅。
  • 用户订阅将收到200 OK。
  • 用户可以使用Expires值0(零)发送另一个SUBSCRIBE方法来取消订阅。

通知

用户代理使用NOTIFY来获取特定事件的发生。通常,当订户和通知程序之间存在订阅时,NOTIFY将在对话框内触发。

  • 如果通知程序接收到,每个NOTIFY将获得200 OK响应。
  • NOTIFY包含指示事件的事件头字段和指示订阅的当前状态的subscriptionstate头字段。
  • 始终在订阅的开始和结束时发送NOTIFY。

发布

PUBLISH被用户代理用于向服务器发送事件状态信息。

  • 当有多个来源的事件信息时,PUBLISH是非常有用的。
  • PUBLISH请求类似于NOTIFY,除了它不在对话框中发送。
  • PUBLISH请求必须包含Expires头字段和Min-Expires头字段。

参考

REFER由用户代理用于引用另一个用户代理来访问对话框的URI。

  • REFER必须包含Refer-To标题。这是REFER的强制标题。
  • REFER可以在对话框内部或外部发送。
  • 202 Accepted将触发REFER请求,指示其他用户代理已经接受引用。

信息

INFO由用户代理使用,以向其已经建立媒体会话的另一用户代理发送呼叫信令信息。

  • 这是一个端到端的请求。
  • 代理将始终转发INFO请求。

UPDATE

如果会话未建立,则UPDATE用于修改会话的状态。用户可以使用UPDATE更改编解码器。

如果会话建立,则使用重新邀请来更改/更新会话。

PRACK

PRACK用于确认接收到可靠的临时响应转移(1XX)。

  • 一般来说,PRACK在接收到包含RSeq可靠序列号和supported:100rel 头的临时响应时由客户端生成。
  • PRACK在race头部中包含(RSeq + CSeq)值。
  • PRACK方法适用于所有临时响应,除了100尝试响应,这是永远不可靠的运输。
  • PRACK可能包含消息体; 它可以用于提供/答复交换。

信息

它用于使用SIP发送即时消息。IM通常由参与文字会话的参与者实时交换的短消息。

  • MESSAGE可以在对话框内或对话框外发送。
  • MESSAGE的内容作为MIME附件在邮件正文中载入。
  • 一个200 OK被正常接收响应,以指示该消息已在其目的地被递送。

原文地址:https://www.cnblogs.com/eleclsc/p/10845750.html

时间: 2024-11-05 14:48:29

【转】SIP协议 会话发起协议的相关文章

[百科] - SIP(会话发起协议)

SIP(会话发起协议)SIP是类似于HTTP的基于文本的协议.SIP可以减少应用特别是高级应用的开发时间.由于基于IP协议的SIP利用了IP网络,固定网运营商也会逐渐认识到SIP技术对于他们的深远意义. SIPSIP(Session Initiation Protocol)是一个应用层的信令控制协议.用于创建.修改和释放一个或多个参与者的会话.这些会话可以是Internet多媒体会议[1] .IP电话或多媒体分发.会话的参与者可以通过组播(multicast).网状单播(unicast)或两者的

SIP(Session Initiation Protocol,会话初始协议)

SIP(Session Initiation Protocol,会话初始协议)的开发目的是用来帮助提供跨越因特网的高级电话业务.因特网电话(IP电话)正在向一种正式的商业电话模式演进,SIP就是用来确保这种演进实现而需要的NGN(下一代网络)系列协议中重要的一员.支持H.264协议 SIP学习笔记 2007-12-28 21:39:23 学习 SIP 协议最快捷的方法是通过范例来学习, 找到了一个完整的呼叫流程,let's go! INVITE 主叫方Tesla首先发起 INVITE 消息到被叫

SSL协议会话建立过程解析

SSL协议 缩写 Secure SocketLayer,是一种制定的保证服务器和客户端安全通信的一种协议.最初是由 Netscape 在1996年发布,由于一些安全的原因SSL v1.0和SSL v2.0都没有公开,直到1996年的SSL v3.0.TLS是SSL v3.0的升级版,目前市面上所有的HTTPS都是用的是TLS,而不是SSL.本文主要分析和讲解TLS. HTTPS(Hyper TextTransfer Protocol over Secure Socket Layer),是一种基于

深入理解HTTP协议、HTTP协议原理分析

深入理解HTTP协议.HTTP协议原理分析 目录(?)[+] http协议学习系列 1. 基础概念篇 1.1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC,RFC 1945定义了HTTP/1.0版本.其中最著名的就是RFC 26

RTSP协议、RTMP协议、HTTP协议的区别

转载:http://easydarwin.org/article/Streaming/141.html RTSP. RTMP.HTTP的共同点.区别 共同点: 1:RTSP RTMP HTTP都是在应用应用层. 2: 理论上RTSP RTMPHTTP都可以做直播和点播,但一般做直播用RTSP RTMP,做点播用HTTP.做视频会议的时候原来用SIP协议,现在基本上被RTMP协议取代了. 区别: 1:HTTP: 即超文本传送协议(ftp即文件传输协议). HTTP:(Real Time Strea

TCP/IP协议与Http协议的区别

TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据.关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:"我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP.FTP.TELNET等,也可以自己定义应用层协议.WEB使用HTTP协议作应用层协议,以封装HTTP 文本信息,然后使用TCP/IP做

IP封包协议头/TCP协议头/TCP3次握手/TCP4次挥手/UDP协议头/ICMP协议头/HTTP协议(请求报文和响应报文)/IP地址/子网掩码(划分子网)/路由概念/MAC封包格式

IP协议头IP包头格式: 1.版本号:4个bit,用来标识IP版本号.这个4位字段的值设置为二进制的0100表示IPv4,设置为0110表示IPv6.目前使用的IP协议版本号是4. 2.首部长度:4个bit.标识包括选项在内的IP头部字段的长度. 3.服务类型:8个bit.服务类型字段被划分成两个子字段:3bit的优先级字段和4bit TOS字段,最后一位置为0. 4bit的TOS分别代表:最小时延,最大吞吐量,最高可靠性和最小花费.4bit中只能将其中一个bit位置1.如果4个bit均为0,则

HTTPS协议、TLS协议、证书认证过程解析

一.HTTPS 协议 HTTPS协议其实就是HTTP over TSL,TSL(Transport Layer Security) 传输层安全协议是https协议的核心. TSL可以理解为SSL (Secure Socket Layer)安全套接字层的后续版本. TSL握手协议如下图所示 (注:图片来源于google图片) 在建立TCP连接后,开始建立TLS连接.下面抓包分析TLS握手过程,抓包图片来源于传输层安全协议抓包分析之SSL/TLS (自己没抓到这么完整的包,只能搬运过来了,摔) (1

Http协议与TCP协议简单理解

在C#编写代码,很多时候会遇到Http协议或者TCP协议,这里做一个简单的理解. TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性.Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求.Http会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http会立即将TCP连接断开,这个过程是很短的.所以Http连接是一种短连接,是一种无状态的连接.所谓的无状态,是指浏览器每次向服务器发起请求的时候,