SIP会话发起协议 - 先知道是什么(一)

少年,思无邪,最最动人。

协议概述

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

  • SIP采用SDP(会话描述协议)的帮助,它描述了用于通过IP网络传送语音和视频的会话和RTP(实时传输协议)

  • SIP可用于双方(单播)或多方(多播)会话。文章来源地址https://www.yii666.com/article/332380.html

  • 其它SIP应用包括文件传输,即时通讯、视频会议、网络游戏、以及流媒体分发

网络元素

  • 用户代理

  • 代理服务器

  • 注册服务器

  • 重定向服务器

  • 位置服务器

用户代理

用户代理是SIP网络中最智能的设备或网络原件。它可以是软电话、手机或笔记本电脑。

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

  • 用户代理客户端(UAC):发送请求并接收响应的实体。

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

SIP基于客户机 - 服务器架构,其中呼叫者的电话充当发起呼叫的客户端,被叫方的电话充当响应呼叫的服务器。即:一部电话既可以做客户端,也可以做服务器端。

代理服务器

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

  • 作用类似路由

  • URI的帮助下进行转发

  • 位于两个用户代理之间

代理服务器的两种类型

  • 无状态代理:只是转发收到的消息,不存储任何呼叫或交易的信息。

  • 有状态代理:可以跟踪收到每个请求与响应,在有需要的时候,将来可以使用,对方没有响应,可以重新发送请求。

注册服务器

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

设备注册流程图:

SIP会话发起协议 - 先知道是什么(一)

注册流程描述:

  1. 设备向服务器发送 Register请求;

  2. 服务器向设备发送响应401,并在响应的消息头 WWW_Authenticate字段中给出适合设备的认证体制和参数;

  3. 设备重新向服务器发送 Register请求,在请求的 Authorization字段给出信任书, 包含认证信息;

  4. 服务器对请求进行验证,如果检查出 设备身份合法,向设备发送成功响应 200 OK,如果身份不合法则发送拒绝服务应答。

重定向服务器

重定向服务器接收请求,并在注册器创建的位置数据库中查找请求的预期收件人。使用数据库获取位置信息,并以3xx(重定向响应)响应给用户。

位置服务器

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

SIP系统架构图

SIP会话发起协议 - 先知道是什么(一)

呼叫流程图

SIP会话发起协议 - 先知道是什么(一)

会话基本呼叫流程图

SIP会话发起协议 - 先知道是什么(一)

说明:

  • 发送到代理服务器的INVITE请求负责启动会话。

  • 代理服务器发送100 尝试立即响应呼叫者(lijiatu)以停止INVITE请求的重新发送。

  • 代理服务器在位置服务器中搜索nuonuo的地址。获取地址后,进一步转发INVITE请求。

  • 此后,nuonuo手机生成的180 振铃(临时响应)返回给lijiatu网址:yii666.com

  • nuonuo拿起手机后一个200 OK响应很快产生。

  • 一旦200 OK到达lijiatunuonuolijiatu 收到一个ACK。

  • 同时,会话建立,RTP数据包(会话)从两端开始流动。

  • 会话结束后,任何参与者(lijiatunuonuo)都可以发送一个BYE请求来终止会话。

  • BYE直接从lijiatunuonuo绕过代理服务器。文章来源地址:https://www.yii666.com/article/332380.html

  • 最后,nuonuo发送200 OK响应来确认BYE,会话终止。

  • 在上述基本呼叫流程中,可以使用三个事务(标记为1,2,3)。

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

SIP请求与响应

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

  • 请求的开始行包含定义请求的方法及定义要发送请求的URI

  • 同样,响应的开始行包含响应代码

方法可以被认为是SIP请求,它们请求由另一用户代理或服务器采取的特定动作。

方法分为两种类型 : 核心方法 与 扩展方法

六种核心方法
Invite 邀请
  • 用于启动与用户代理的会话。

  • 成功的Invite 请求在两个用户代理之间建立对话。

  • 在已经建立的对话框中发送Invite 被称为 re-invite,re-invite用于更改会话特性或刷新对话框的状态。

  • 可以在邮件正文中包含主叫方的媒体信息。

SIP会话发起协议 - 先知道是什么(一)

示例:

INVITE sips:Bob@TMC.com SIP/2.0 
  Via: SIP/2.0/TLS client.ANC.com:5061;branch = z9hG4bK74bf9
  Max-Forwards: 70
  From: Alice<sips:Alice@TTP.com>;tag = 1234567
  To: Bob<sips:Bob@TMC.com>
  Call-ID: 12345601@192.168.2.1  
  CSeq: 1 INVITE
  Contact: <sips:Alice@client.ANC.com>
  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是用于终止既定会话的方法。

  • BYE请求通常路由端到端,绕过代理服务器。

Register 注册
  • REGISTER请求执行用户代理的注册。

  • 它在正在注册的用户的To头中携带AOR(记录地址)

Cancel 取消
  • CANCEL用于终止未建立的会话。

  • CANCEL是逐跳请求,即它通过用户代理之间的元素,并接收下一个有状态元素生成的响应。

SIP会话发起协议 - 先知道是什么(一)

ACK 确认
  • ACK用于确认对INVITE方法的最终响应。

options
  • OPTIONS方法用于向用户代理或代理服务器询问其功能并发现其当前的可用性。

八种扩展方法
订阅
  • 用户代理使用Subscribe建立订阅,以获取有关特定事件的通知。

  • 它包含一个Expires头字段,指示订阅的持续时间。期限过后,订阅将自动终止。

  • 订阅在用户代理之间建立一个对话。

  • 用户可以使用Expires值0(零)发送另一个SUBSCRIBE方法来取消订阅。

SIP会话发起协议 - 先知道是什么(一)

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

  • NOTIFY包含指示事件的事件头字段和指示订阅的当前状态的subscriptionstate头字段。

  • 始终在订阅的开始和结束时发送NOTIFY。

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

  • 当有多个来源的事件信息时,PUBLISH是非常有用的。

  • PUBLISH请求类似于NOTIFY,除了它不在对话框中发送。

  • PUBLISH请求必须包含Expires头字段和Min-Expires头字段。

SIP会话发起协议 - 先知道是什么(一)

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

  • REFER必须包含Refer-To标题。这是REFER的强制标题。

  • REFER可以在对话框内部或外部发送。

  • A 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可以在对话框内或对话框外发送。网址:yii666.com<

  • MESSAGE的内容作为MIME附件在邮件正文中载入。

  • 一个200 OK被正常接收响应,以指示该消息已在其目的地被递送。

SIP会话发起协议 - 先知道是什么(一)文章地址https://www.yii666.com/article/332380.html

SIP响应码

SIP响应是由用户代理服务器(UAS)或SIP服务器生成的用于回复客户端生成的请求的消息。这可能是一个正式的确认,以防止UAC转发请求。

  • 响应可能包含UAC所需的一些额外的信息头字段。

  • SIP有六个响应。

  • 从HTTP中借用1xx5xx,在SIP中引入了6xx

  • 1xx被视为临时响应,其余的是最终响应。

S.No. 功能和说明
1 1xx:临时/信息响应信息响应用于指示呼叫进程。通常回应是端到端(100尝试除外)。
2 2xx:成功回应这类回应旨在表明请求已被接受。
3 3xx:重定向响应一般来说,这些类响应是由重定向服务器响应INVITE发送的。他们也被称为重定向类响应。
4 4xx:客户端失败响应客户端错误响应表明,从UAC方面识别出一些错误,无法满足请求。
5xx:服务器故障响应此类响应用于指示由于服务器错误而无法处理该请求。
6 6xx:全局失效响应此响应类指示服务器知道请求将在尝试的任何地方失败。因此,请求不应发送到其他位置。

SIP - header

报头是SIP消息的组成部分,其传达有关消息的信息。它被构造为头序列字段序列。

SIP头字段在大多数情况下遵循与HTTP头字段相同的规则。标头字段定义为标题:字段,其中标题用于表示标题字段名称,字段是包含信息的标记集。每个字段由一个字段名,后跟冒号(“:”)和字段值(即字段名称:字段值)组成。

SIP标题格式

SIP会话发起协议 - 先知道是什么(一)

版权声明:本文内容来源于网络,版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。文本页已经标记具体来源原文地址,请点击原文查看来源网址,站内文章以及资源内容站长不承诺其正确性,如侵犯了您的权益,请联系站长如有侵权请联系站长,将立刻删除

SIP会话发起协议 - 先知道是什么(一)-相关文章

  1. 在Asterisk CLI里面采用originate发起一个呼叫

    Asterisk cli下面可以执行很多命令,originate的用途是发起一个呼叫然后连接到指定的应用或上下文。 跟.call呼叫文件和AMI管理接口里的外呼功能一样,有两种语法格式: 呼叫成功转应用:         originate tech/data application appname appdata 呼叫成功转流程:         origin

  2. Freeswitch使用originate转dialplan

    概述Freeswitch是一款非常好用的开源VOIP软交换平台。最近在对fs做一些功能测试,测试的过程中产生的一个需求,如何从fs发起呼叫并把后续的呼叫流程转到某一个dialplan上,这样在测试时会非常方便好用,可以随时修改dialplan定制业务流程。通过对fs官方文档搜索后,排除了“

  3. freeswitch拨打分机号

    概述电话语音服务中,有一种稍微复杂的场景,就是总机分机的落地场景,客户拨打总机号码之后,需要再拨打分机号转接到指定的话机。分机号的拨打一般在总机接通之后,会有语音提示,总机收号之后转接分机。分机号转接的实现方式其实和IVR的实现方式是一致的,都是

  4. FreeSWITCH小结:呼叫的发起与跟踪

    需求描述##虽然现有的FreeSWITCH功能已经很强大,但是很多情况下,为了配合业务上的功能,还需要做一些定制开发。有一个基本需求是:如何控制fs外呼,并跟踪外呼后的一系列状态。解决方案##下面我就把自己现有的解决方案跟大家分享下,以便抛砖引玉,引出大家更好的方

  5. Android呼叫管理服务之会话发起协议(SIP)API

    原文:http://android.eoe.cn/topic/android_sdkAndroid提供了一个支持会话发起协议(SIP)的API,这可以让你添加基于SIP的网络电话功能到你的应用程序。Android包括一个完整的SIP协议栈和集成的呼叫管理服务,让应用轻松无需管理会话和传输层的沟通就可设置传出和传入的语音通话,或直

  6. 小睿开始呼叫用户,然后FS怎么跟用户交互的整个流程原理

    学习从小睿开始呼叫用户,然后FS怎么跟用户交互的整个流程原理;    1.小睿向欣方新发起呼叫请求;    2.欣方新可以通过线路发起SIP协议请求,来呼叫用户;    3.当用户接通后,将建立起双方的基本呼叫场景;    4.然后欣方新将保持对用户的呼叫请求;而用户将会断开对欣方新的

  7. 呼叫转接ECT

    ECT(Explicit Call Transfer,呼叫转接)是一种较为特殊的补充业务。签约ECT业务的用户A先呼叫用户B,在与用户B建立通话后,用户A通过终端发起保持用户B呼叫的请求,此时用户B会听到一段背景音乐,并且与用户A的通话暂时断开。用户A紧接着呼叫另一个用户C,在与用户C建立通话

  8. Android网络功能之会话发起协议SIP

    原文:http://android.eoe.cn/topic/android_sdk* 会话发起协议*Android提供了一个支持会话发起协议(SIP)的API,这可以让你添加基于SIP的网络电话功能到你的应用程序。Android包括一个完整的SIP协议栈和集成的呼叫管理服务,让应用轻松无需管理会话和传输层的沟通就可设置传出和传入的

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信图片_20190322181744_03.jpg

微信扫一扫打赏

请作者喝杯咖啡吧~

支付宝扫一扫领取红包,优惠每天领

二维码1

zhifubaohongbao.png

二维码2

zhifubaohongbao2.png