图-1 电话通信

1、SIP是何物?

SIP(会话发起协议)属于IP应用层协议,用于在IP网上为用户提供会话应用。会话(Session)指两方或多方用户之间的语音、视频、及其他媒体形式的通信,具体可能是IP电话、会议、即时消息等等。

图-2 SIP会话连接

SIP是一个信令协议,它对应于传统电话网络中的呼叫信令协议(比如SS7 ISUP)。构建一个完整多媒体通信架构还需要结合其他一些协议,必要的有:RTP,用于媒体传输;RSVP,用于QOS保证等等。

图-3多媒体通信的多种协议

2、SIP基本功能

2.1 会话的发起与管理

图-4 创建会话

SIP主要用于创建、修改和终止一个会话。一个创建会话的简单的例子如上图-3所示,其建立逻辑结构流程如下:

  • 发起方向目的方发送一个SIP请求消息(INVITE),其中包含提议的会话参数的描述,请求在二者之间建立一个会话;
  • 目的方返回一个SIP响应消息(200 OK),其中包含接受的会话参数的描述,接受会话建立请求
  • 发起方发送一个SIP请求消息(ACK)确认会话的建立。

一个会话建立后,如果对于会话进行修改,又该如何操作?下面一个修改会话的简单例子如图-4所示。

图-5 修改会话

对于会话的修改,其结构流程,如下所示:

  • 会话中的任意一方可以发送一个SIP请求消息(reINVITE),其中包含提议的新的会话参数,请求修改二者之间的会话;
  • 另一方返回一个SIP响应消息(200 OK),其中包含接受的新的会话参数,接受会话修改请求

既然会话可以创建和修改,那么又该如何实现一个会话的结束?其实现方式如下图-5所示。

图-6 结束会话

一个结束会话的逻辑结构流程如下所示:

  • 会话中的任意一方可以发送一个SIP请求消息(BYE),请求结束会话;
  • 另一方返回一个SIP响应消息(200 OK),接受会话结束请求

2.2 用户位置管理&轨迹

在城市中分布着很多移动信号基站,移动的SIP终端实时与最近的基站发生着数据交互,如图-6所示。

图-7 移动的用户

SIP要求终端定期向网络发送注册请求(REGGISTER),报告自己的当前位置。这样SIP服务器中始终存储了用户(终端)的当前地址。当用户被呼叫时,SIP服务器能够将SIP请求发送到用户的当前地址。

每一个基站都在记录出现在其信号范围内的手机用户信息,将一定范围内的基站所接收的信息集合起来,就能识别出一个手机用户在这个范围中的活动轨迹,如图-7所示.

图-8 SIP手机信令数据通过基站记录用户实时位置

每个人都有手机,所以数据有接近全样本的高覆盖率;每个人都随身携带手机,所以数据有直接反映空间位置的高精度;每天都在收集手机数据,所以数据有立等可取的高时效性。

3、实体 & 网络

SIP UA(User Agent,用户代理)是最基本的SIP实体,它通常就是用户终端。理想情况下,通过SIP UA就可以完成用户之间会话的建立。但是为了支持SIP的移动性,以及其他高级功能,比如运营商对呼叫的控制等等,会话发起及管理的信令过程不能直接在两个SIP UA之间完成,而是需要经过由若干SIP服务器构成的SIP信令网络。

图-9 网络路由的SIPs实体

这些SIP服务器可以分为两类:注册服务器和路由服务器。

  • SIP注册服务器(registrar)的主要功能是接受SIP UA的注册请求,维护用户名-地址映射。
  • 路由服务器的主要功能是将SIP消息路由到目标SIP UA。路由服务器有SIP重定向服务器(redirect server)SIP代理服务器(proxy)两种。前者以重定向方式路由SIP请求消息,后者以代理方式路由SIP请求消息。

在重定向方式下(如图-10所示),SIP重定向服务器收到了SIP请求消息,查询到目标SIP UA的当前地址后,通过SIP响应消息(302 Moved temporarily)返回给发起方SIP UA。之后的SIP消息交互与重定向服务器无关,发起方SIP UA直接向目标SIP UA的当前地址发送请求消息。

图-10 路由定向服务寻址

在代理方式下(如下图-11所示),SIP代理服务器收到了SIP请求消息,查询到目标SIP UA的当前地址后,将SIP请求消息转发到目标SIP UA的当前地址。之后的SIP消息交互都要经过SIP代理服务器。这使得SIP代理服务器可以对会话进行控制,比如结束会话等等。

图-11 路由代理寻址

4 SIP的原子性

图-12 SIP的原子性

SIP所提供的功能是通过一些原子性的基本功能(比如注册(registration),发起会话(Initiation)、会话结束等)组合而成的。每个原子性基本功能是通过一个SIP操作完成的SIP操作基于类似HTTP的请求/响应事务模型,每个操作的调用过程体现为一个所谓事务 – 包含一个SIP请求和一个或多个相应的SIP响应。其中SIP请求消息中的方法(Method)指示出调用的操作。

下表是在RFC 3261中定义的方法及其对应的SIP操作。

方法Method SIP操作

INVITE 会话邀请

ACK 确认会话邀请

CANCEL 取消会话邀请

BYE 结束会话

REGISTER 注册

OPTIONS 查询服务器能力

4.1 SIP协议组成

图-13 SIP协议

SIP是一个基于文本(text-based)的协议,使用 UTF-8 字符集。SIP消息与HTTP/1.1非常类似,同样可以包含消息体(message body),通常是会话描述(session descriptions),也可能是其他内容。

SIP 消息有两类:从客户机到服务器的请求消息(request),从服务器到客户机的响应消息(response)。

除了第一行分别是请求行(Request-Line)和状态行(Status-Line)以外,SIP请求消息和SIP响应消息的剩下部分的组成基本类似,包括消息头域(message header)和消息体(message body)两部分(如上图-13所示)。

4.2 SIP消息请求

根据请求行中的方法(method)的不同,SIP请求消息有很多种,分别完成各种操作的调用,实现各种功能,下面进行简单的介绍。

  • INVITE/reINVITE:INVITE 发起会话邀请。reINVITE(在一个已存在的对话中发送的INVITE称为reINVITE)修改已建立会话的参数。
  • ACK:完成会话建立的3次握手 [INVITE-200-ACK],仅仅用于INVITE
  • BYE :结束会话。
  • CANCEL:取消正在建立中会话(INVITE已发送,但尚未收到最终响应(final response))。
  • UPDATE:更新会话参数。它被建议用于替代 re-INVITE,与 re-INVITE不同在于:它可以在初始INVITE未完成时发送,能用于在早对话(early dialog)中更新会话参数。

上面的4个请求用于会话建立与管理。

  • REGISTER:登记UA当前的联系地址(contact)
  • OPTIONS:查询服务器或对端UA的能力,具体包括支持的方法(method),扩展(extensions)、编解码(codecs)等。
  • PRACK:临时响应(Provisional Response)确认。用于确认收到了临时响应,例如 “183 Session Progress”,以支持临时响应的可靠传送。它不能应用于“100 Trying ”,只有101~199 临时响应需要可靠传送。如果没有收到 PRACK,响应消息将被重传。
  • NOTIFY:事件通知,具体的事件包括、业务状态的改变(MWI,...),用户状态的改变等等。
  • SUBSCRIBE:订阅/取消(Expires=0)事件通知。
  • PUBLISH:发布事件状态。PUBLISH 与 REGISTER 的相似之处在于:允许用户在另一个实体(状态管理实体/registrar)中创建、修改和移除自己的状态。对PUBLISH 请求的寻址与对于SUBSCRIBE 请求的寻址是一样的,PUBLISH 请求的Request-URI 中填入的是用户希望发布其事件状态的资源地址。

上面的3个请求构成SIP事件发布-订阅-通知机制

  • INFO:用于传送 mid-call 信令信息,同一时刻只能有一个 INFO 事务存在。通常用于携带 PSTN 信令消息(作为 MIME 附件),例如,ISDN UUI (用户到用户信息)。
  • MESSAGE:针对即时消息 (IM)的扩展,用于传送即时消息。MESSAGE请求通过MIME附件中携带内容。MESSAGE 请求自身不发起 SIP 对话,在正常的用法中,每个即时消息都是单独存在的,非常类似 pager 消息。MESSAGE 请求可以在其他SIP请求发起的对话上下文中发送。
  • REFER:指示接收者 (Request-URI所标识的) 应该使用请求中提供的信息联系第三方。典型应用:Call Transfer features 。Allowed outside an established dialogue。

sip gw功能包括_道哥漫谈:大话有趣的SIP通信相关推荐

  1. sip gw功能包括_完整SIP/SDP媒体协商概论-SIP/WebRTC概要

    ​Session Description Protocol(简称是SDP)全称是会话描述协议,此协议用来创建一种协商机制,这种协商机制是由呼叫控制协议创建的介于两个呼叫用户之间的会话进行,协商机制支持 ...

  2. sip gw功能包括_全面解读SiP

    来源:原文来自"System in Package",作者Paul McLellan:部分内容转载自[EDA365,"超越摩尔之路--SiP简介"] SiP是组 ...

  3. 农信银支付清算系统题库_[多选] 通过农信银支付清算系统,银行汇票的功能包括以下哪些()。...

    [多选] 通过农信银支付清算系统,银行汇票的功能包括以下哪些(). 更多相关问题 [问答题] 什么叫堵塞?分述其目的和方法? [单选,案例分析题] 某公司生产某种电子产品,欲了解消费者最期待具有哪种特 ...

  4. 大脑构造图与功能解析_大脑的结构和功能分区_详解人脑构造与功能

    大脑的结构和功能分区 _ 详解人脑构造与功能 学习,可以开阔人的大脑 ; 学习,可以使人的大脑拥有更多的知识,人的大脑和肢 体一样,多用则灵,不用则废.那么下面学习啦小编给大家分享一些大脑的结构和功 ...

  5. 道哥:我人生有两大选择,为的却都是同一件事

    2019独角兽企业重金招聘Python工程师标准>>> 视频在这里:https://v.qq.com/x/page/b0519geiro4.html <初心>十集技术人物 ...

  6. 《白帽子讲Web安全》读后感 —— 对道哥的致敬

    <白帽子讲Web安全>读后感 --Deep Blue (一个安全小兵的感受) 这是一篇作业:这是一篇读后感:这是一篇记录安全的感悟:这是一篇对道哥的敬仰:这是我安全启蒙的钥匙...... ...

  7. win7系统备份还原软件_泰哥一键备份还原下载-系统备份还原工具 v1.0.1.14 官方版...

    泰哥一键备份还原是一款非常简单且实用的系统备份还原工具,可帮助用户快速将系统数据进行备份或者还原,支持多种不同的系统,包括Win32(64).WinPE.DOS等,可对任意分区进行备份还原操作,具备简 ...

  8. spacy spaCy主要功能包括分词、词性标注、词干化、命名实体识别、名词短语提取等等

    spaCy主要功能包括分词.词性标注.词干化.命名实体识别.名词短语提取等等https://zhuanlan.zhihu.com/p/51425975

  9. 道哥自述:为什么弹性安全网络将诞生最大的人工智能?

    前阵子,阿里科学家王刚.吴翰清同时入选MIT2017年度TR35 开创中国互联网企业先河 一文刷爆了朋友圈,阿里巴巴人工智能实验室首席科学家王刚.阿里云首席安全科学家吴翰清同时入选MIT2017.这是 ...

最新文章

  1. LaTex 各种特殊符号
  2. c++计算eigen随笔(8)-数组、矩阵、向量(1)
  3. pgsql数据库默认配置事务类型_PostgreSQL数据库事务出现未知状态的处理方法
  4. 单片机串行通信全解析
  5. Java基础:int和Integer的区别
  6. linq查询不包含某个值的记录_mysql基本知识点梳理和查询优化
  7. spring加载xml配置文件
  8. tar:归档中找不到 tar: 由于前次错误,将以上次的错误状态退出
  9. 用python 画炫酷的图并讲解-Python绘制六种可视化图表详解,三维图最炫酷!你觉得呢?...
  10. centos7 python3 爬虫登陆邮箱_Centos7搭建Scrapy爬虫环境
  11. 爆炸的符卡洋洋洒洒(01背包)
  12. OmniConverter: Mac上的最简单好用的免费全能音视频转换器
  13. 数据库小白 T-SQL练习500题 超详细!带素材!持续更新中~
  14. 有哪些比较好用的安卓模拟器(电脑端)
  15. 【C语言】基于51/52单片机实现楼梯灯控制程序
  16. 微信小程序 选项卡设置
  17. jQuery手动触发事件
  18. Java移除出界敌机,java实现飞机大战案例详解
  19. Zynq-7010/7020开发板(双核ARM Cortex-A9+A7)软硬件规格资料
  20. r生成新的dataframe_R语言中数据框的定义与使用

热门文章

  1. 利用jquery的qrcode.js插件生成二维码的两种方式的使用
  2. XP支持4G以上物理内存的方法
  3. WebBrowser控件跨域访问页面内容
  4. 对请求并发数做限制的通用RequestDecorator
  5. 面试题收集——Java基础部分(一)
  6. javaweb学习总结(三十四)——使用JDBC处理MySQL大数据
  7. Method not found: '!!0[] System.Array.Empty()'.
  8. C# HttpWebRequest提交数据方式
  9. 编码导致 html和aspx 样式差异,变形
  10. PHP封装的curl请求:有报错信息的 get post