SIP会话发起协议 - 先知道是什么(一)
少年,思无邪,最最动人。
协议概述
SIP
会话发起协议是VoIP
技术中最常用的协议之一。它是一种应用层协议
,与其它应用层协议协同工作,通过Internet控制多媒体通信会话
。SIP
采用SDP(会话描述协议)
的帮助,它描述了用于通过IP
网络传送语音和视频的会话和RTP(实时传输协议)
。SIP
可用于双方(单播)或多方(多播)会话。其它SIP应用包括文件传输,即时通讯、视频会议、网络游戏、以及
流媒体分发
。
网络元素
用户代理
代理服务器
注册服务器
重定向服务器
位置服务器
用户代理
用户代理是SIP
网络中最智能的设备或网络原件。它可以是软电话、手机或笔记本电脑。
用户代理在逻辑上分为两部分:
用户代理客户端(UAC)
:发送请求并接收响应的实体。用户代理服务器(UAS)
:接收请求并发送响应的实体。
SIP基于客户机 - 服务器
架构,其中呼叫者的电话充当发起呼叫的客户端,被叫方的电话充当响应呼叫的服务器。即:一部电话既可以做客户端,也可以做服务器端。
代理服务器
网络元素接收来自用户代理的请求并将其转发给另外一个用户。
作用类似路由
在
URI
的帮助下进行转发位于两个用户代理之间
代理服务器的两种类型
无状态代理:只是转发收到的消息,不存储任何呼叫或交易的信息。
有状态代理:可以跟踪收到每个请求与响应,在有需要的时候,将来可以使用,对方没有响应,可以重新发送请求。
注册服务器
注册服务器接受用户代理的注册请求。帮助用户在网络中进行身份认证。将URI和用户的位置存储在数据库中,以帮助同一域内的其它SIP服务器。
设备注册流程图:
注册流程描述:
设备向服务器发送 Register请求;
服务器向设备发送响应401,并在响应的消息头 WWW_Authenticate字段中给出适合设备的认证体制和参数;
设备重新向服务器发送 Register请求,在请求的 Authorization字段给出信任书, 包含认证信息;
服务器对请求进行验证,如果检查出 设备身份合法,向设备发送成功响应 200 OK,如果身份不合法则发送拒绝服务应答。
重定向服务器
重定向服务器接收请求,并在注册器创建的位置数据库中查找请求的预期收件人。使用数据库获取位置信息,并以3xx(重定向响应)
响应给用户。
位置服务器
位置服务器提供有关呼叫者可能的位置到重定向服务器或代理服务器的信息。
SIP系统架构图
呼叫流程图
会话基本呼叫流程图
说明:
发送到代理服务器的INVITE请求负责启动会话。
代理服务器发送100 尝试立即响应呼叫者(
lijiatu
)以停止INVITE请求的重新发送。代理服务器在位置服务器中搜索
nuonuo
的地址。获取地址后,进一步转发INVITE请求。此后,
nuonuo
手机生成的180 振铃(临时响应)返回给lijiatu
。nuonuo
拿起手机后一个200 OK响应很快产生。一旦200 OK到达
lijiatu
,nuonuo
从lijiatu
收到一个ACK。同时,会话建立,RTP数据包(会话)从两端开始流动。
会话结束后,任何参与者(
lijiatu
,nuonuo
)都可以发送一个BYE请求来终止会话。BYE直接从
lijiatu
到nuonuo
绕过代理服务器。最后,
nuonuo
发送200 OK响应来确认BYE,会话终止。在上述基本呼叫流程中,可以使用三个事务(标记为1,2,3)。
完整的呼叫(从INVITE到200 OK)称为对话Dialog。
SIP请求与响应
SIP消息有两种类型 - 请求与响应
请求的开始行包含定义请求的方法及定义要发送请求的URI
同样,响应的开始行包含响应代码
方法可以被认为是SIP请求,它们请求由另一用户代理或服务器采取的特定动作。
方法分为两种类型 : 核心方法 与 扩展方法
六种核心方法
Invite 邀请
用于启动与用户代理的会话。
成功的Invite 请求在两个用户代理之间建立对话。
在已经建立的对话框中发送Invite 被称为 re-invite,re-invite用于更改会话特性或刷新对话框的状态。
可以在邮件正文中包含主叫方的媒体信息。
示例:
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是逐跳请求,即它通过用户代理之间的元素,并接收下一个有状态元素生成的响应。
ACK 确认
ACK用于确认对INVITE方法的最终响应。
options
OPTIONS方法用于向用户代理或代理服务器询问其功能并发现其当前的可用性。
八种扩展方法
订阅
用户代理使用Subscribe建立订阅,以获取有关特定事件的通知。
它包含一个Expires头字段,指示订阅的持续时间。期限过后,订阅将自动终止。
订阅在用户代理之间建立一个对话。
用户可以使用Expires值0(零)发送另一个SUBSCRIBE方法来取消订阅。
通知
用户代理使用NOTIFY来获取特定事件的发生。通常,当订户和通知程序之间存在订阅时,NOTIFY将在对话框内触发。
NOTIFY包含指示事件的事件头字段和指示订阅的当前状态的
subscriptionstate
头字段。始终在订阅的开始和结束时发送NOTIFY。
发布
PUBLISH被用户代理用于向服务器发送事件状态信息。
当有多个来源的事件信息时,PUBLISH是非常有用的。
PUBLISH请求类似于NOTIFY,除了它不在对话框中发送。
PUBLISH请求必须包含Expires头字段和Min-Expires头字段。
参考
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可以在对话框内或对话框外发送。
MESSAGE的内容作为MIME附件在邮件正文中载入。
一个200 OK被正常接收响应,以指示该消息已在其目的地被递送。
SIP响应码
SIP响应是由用户代理服务器(UAS)
或SIP服务器生成的用于回复客户端生成的请求的消息。这可能是一个正式的确认,以防止UAC
转发请求。
响应可能包含
UAC
所需的一些额外的信息头字段。SIP有六个响应。
从HTTP中借用
1xx
到5xx
,在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(会话发起协议)
SIP(会话发起协议)SIP是类似于HTTP的基于文本的协议.SIP可以减少应用特别是高级应用的开发时间.由于基于IP协议的SIP利用了IP网络,固定网运营商也会逐渐认识到SIP技术对于他们的深远意义 ...
- Android呼叫管理服务之会话发起协议(SIP)API
原文:http://android.eoe.cn/topic/android_sdk Android提供了一个支持会话发起协议(SIP)的API,这可以让你添加基于SIP的网络电话功能到你的应用程序. ...
- Android网络功能之会话发起协议SIP
原文:http://android.eoe.cn/topic/android_sdk * 会话发起协议* Android提供了一个支持会话发起协议(SIP)的API,这可以让你添加基于SIP的网络电话 ...
- SIP协议 会话发起协议(一)
会话发起协议(SIP)是VoIP技术中最常用的协议之一.它是一种应用层协议,与其他应用层协议协同工作,通过Internet控制多媒体通信会话. SIP - 概述 以下是有关SIP的几点注意事项 - S ...
- 【转】SIP协议 会话发起协议
转自:https://www.cnblogs.com/gardenofhu/p/7299963.html 会话发起协议(SIP)是VoIP技术中最常用的协议之一.它是一种应用层协议,与其他应用层协议协 ...
- SIP协议 会话发起协议(二)
SIP - 响应码 SIP响应是由用户代理服务器(UAS)或SIP服务器生成的用于回复客户端生成的请求的消息.这可能是一个正式的确认,以防止UAC转发请求. 响应可能包含UAC所需的一些额外的信息头字 ...
- sip会话流程以及sip介绍(1)
参考连接 :https://www.2cto.com/kf/201609/546336.html https://www.w3cschool.cn/session_initiation_protoco ...
- SIP(Session Initiation Protocol,会话初始协议)
SIP(Session Initiation Protocol,会话初始协议)的开发目的是用来帮助提供跨越因特网的高级电话业务.因特网电话(IP电话)正在向一种正式的商业电话模式演进,SIP就是用来确 ...
- 会话描述协议(SDP)介绍
1.SDP的引入 SDP最初用于Mbone(组播骨干网)上的多媒体会议.Mbone 是Internet 的一部分,它的主要特征是对IP组播技术的使用.IP组播技术比较适合实现多方会话. 基于组播的会议 ...
随机推荐
- Java精进-手写持久层框架
前言 本文适合有一定java基础的同学,通过自定义持久层框架,可以更加清楚常用的mybatis等开源框架的原理. JDBC操作回顾及问题分析 学习java的同学一定避免不了接触过jdbc,让我们来回顾 ...
- Spring 04: IOC控制反转 + DI依赖注入
Spring中的IOC 一种思想,两种实现方式 IOC (Inversion of Control):控制反转,是一种概念和思想,指由Spring容器完成对象创建和依赖注入 核心业务:(a)对象的创建 ...
- Redis技术
Redis技术 Redis 简介 Redis 是一个 key-value 的 nosql 产品,存储的 value 类型更加丰富,包括 string(字符串), list(链表),set(集合),zs ...
- CCF NOI Online 2021 提高组 T2 积木小赛 (子序列自动机+后缀自动机,O(n^2))
题面 Alice 和 Bob 最近热衷于玩一个游戏--积木小赛. Alice 和 Bob 初始时各有 n 块积木从左至右排成一排,每块积木都被标上了一个英文小写字母. Alice 可以从自己的积木中丢 ...
- Crash的数字表格 (莫比乌斯反演)
Crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能同时被a和b ...
- C#基础_C#判断文件是否被打开
1.用文件流判断 using System; using System.Collections.Generic; using System.IO; using System.Linq; using S ...
- KingbaseES 与 Oracle 用户口令管理与资源管理
一.概述 KingbaseES可以对用户口令与用户占用资源进行必要的管理.其管理方式,在这里与Oracle数据库进行参考比较. KingbaseES 使用扩展插件建立的系统参数,这组参数可以对数据库资 ...
- Linux 配置ODBC连接Oracle
在使用kdb_database_link 扩展插件连接Oracle数据库时,必须先配置ODBC,确保通过ODBC能连接Oracle数据库.以下是配置ODBC的过程. 一.安装ODBC 1.安装 [ro ...
- C++ 二级指针与 const 关键字
可用七种不同的方式将 const 关键字用于二级指针,如下所示: //方式一:所指一级指针指向的数据为常量,以下几种为等效表示 const int ** pptc; //方式一 int const * ...
- 配置联想IMM使用AD账户登录
IMM是联想(IBM)服务器的管理卡Integrated Management Module的缩写,现在是第二个版本.通过它可以远程管理服务器,就像你在服务器面前操作一样.可以修改BIOS设置,可以重 ...