SIP注册

注册服务为特定地区的位置服务创建绑定关系,这个绑定关系是用来建立包含一个或者多个联系地址的address-of-recordURI。因而,当那个地区的proxy接收到一个请求,这个请求的Request-URI和address-of-record的记录匹配,那么这个proxy会转发请求到这个address-of-record中登记的联系地址中去。
Address-of-Record:记录地址。一个address-of-record(AOR)是一个SIP或者SIPSURI它指向了一个具有定位服务的主机,这个主机可以把URI映射成为用户真正物理位置的URI。通常情况下,定位服务器是通过登记服务来建立的。一个AOR经常被认为是一个用户的”公共地址”。

 

需要注意的是,登记服务器(registrar)和proxy服务器都是逻辑上的角色,可以在网络中用一个设备来部属.还需要注意的是如果他们(登记服务器和proxy)本身是分开的,那么UA可以通过proxy服务器发送注册请求。 

 

1构造一个REGISTER请求
REGISTER请求用来增加、删除、查询绑定资料。

 

下面这些头域,除了Contact,必须在REGISTER头域中包含。Contact头域可选。
Request-URI:这个头域指明了登记服务所指明的位置服务所在的区域(比如sip:chicago.com)。”userinfo”和”@”元素在SIPURI中不能出现。
To:这个头域包含了被查询、增加、修改的address-of-record。to头域和Request-URI头域通常是不同的,因为这个由用户名组成。这个address-of-record必须是一个SIPURI或者SIPS URI.
From:这个头域包含了提交这个注册信息的用户的address-of-record资料。这个值和To头域的值相同,除非这个请求是第三方发起的注册请求。
Call-ID:UAC发出的给某个注册服务器(registrar)的所有注册请求都应该有相同的Call-ID头域值。如果相同的客户端用了不同的Call-ID值,注册服务器(registrar)就不能检测是否一个REGISTER请求由于延时的关系导致了故障。
Cseq:Cseq值保证了REGISTER请求的正确顺序。一个UA为每一个具备相同的Call-ID的REGISTER请求顺序递增这个Cseq字段。
Contact:REGISTER请求可以有一个Contact头域。这个头域可以有0个或者多个包含绑定地址信息的值。“expires”参数表明UA的绑定的有效时间。以秒为单位的整数。如果本参数没有制定,那么这个参数的值就是Expires头域的值。实现中,可以把超过2**32-1的值(4294967295秒或者136年)认为是2**32-1。非法的值应当视同3600。
UA在没有收到上一个注册请求的应答或者上一个REGISTER请求超时之前,禁止发送新的注册请求(就是说,包含一个新的Contact头域值,而不是重发)。 

 

1.1增加绑定
1.1.1 设置Contact地址的过期参数

当一个客户端发出一个REGISTER请求,它可能包含一个过期参数用来表示这个注册的地址的有效期。
客户端设置有效期的方法有两种:一个是通过设置Expires头域,一个是通过设置”expires”contact头域的参数来设置。后一种允许针对同一个REGISTER请求中的多个绑定联系地址中的每一个联系地址单独设定有效期,然后所有没有带”expires”参数的Contact头域的值都使用Expires的设置。
如果REGISTER中没有两种有效期都没有设置,这就表明这个有效期由服务器来决定。
1.1.2 Contact Adress的参数选择
如果在一个REGISTER请求中包含多个Contact,这说明UA想要把这些Contact头域的内容都和To头域中制定的address-of-record地址绑定起来。这个列表可以用”q”参数来区分Contact头域的优先级。”q”参数用来标志特定Contact头域值和其他绑定的address-of-record的联系地址之间的优先级。

 

1.2删除绑定
注册信息是一个纯粹软件的状态,并且如果不刷新会过期。如果需要,也可以被删除。一个客户端可以设置注册服务器(registar)的有效期(10.2.1)。一个UA可以通过发出有效期为”0”的REGISTER请求,使某一个联系地址立刻失效。UAS都需要实现这个机制使得在联系地址过期前能够被删除。
REGISTER规范中的Contact头域如果设置成为”*”则表示需要操作所有的注册项。但是也只能在具有一个Expires头域并且这个头域为’0’的情况下能够使用。(这就是说,只能够在要删除所有的注册项的时候使用”*”)。
用”*”来删除所有的注册项有一个好处,就是使得UA不需要知道每一个注册项的精确值。

 

1.3访问绑定
无论请求是否包含了Contact头域,给任何REGISTER请求的成功应答都包含了一个完整的绑定列表。如果REGISTER请求头域中不包含Contact头域,那么注册服务器的绑定列表将不会改变。

 

1.4刷新绑定
每一个UA都对先前它建立的绑定信息由刷新的义务。禁止对其他UA建立的绑定信息进行刷新。于是在这些绑定信息过期前,UA为每个绑定发出REGISTER请求来刷新绑定。也可以通过一个REGISTER请求来刷新数个绑定请求。
UA在一个刷新周期中,应该使用相同的Call-ID来进行注册调用。

 

1.6寻找注册服务器
UA有3种方法来决定向哪里发出注册请求:通过配置,使用address-of-record,广播方式。
1)一个UA可以用非本文档规定的方式,配置一个注册服务器的地址。
2)用请求的Request-URI部分种的address-of-record的服务器部分(hostpart),用普通的SIP服务器定位机制。比如,用户”sip:carol@chicago.com”地址的注册服务应该是”sip:chicago.com”。
3)UA可以通过监听广播的形式来获得注册服务器地址。

 

1.8错误响应
如果UA接收到一个423(间隔太简略)应答,它可能需要更改REGISTER请求中的所有有效期,使得这些有效期必须大于等于423应答头中的Min-Expires头域中的有效期,并且重新尝试发送这个REGISTER请求。 

 


2 处理REGISTER请求
一个注册服务器(registrar)就是一个UAS,这个UAS用来响应REGISTER的请求,并且维持一个绑定表,这个绑定表用来提供给它所管理的区域中的proxy服务器和重定向服务器的。
一个注册服务器禁止产生6xx应答。
一个注册服务器可以适当的转发REGISTER请求。通常用于一个注册服务器(registar)监听一个多点广播,并且通过302应答(临时转移)转发这个多点广播的REGISTER请求到它正确的处理位置。
一个注册服务器必须知道(例如,通过配置)它所管理的区域。注册服务器一定需要按照接收到的REGISTER请求顺序进行处理。


当接收到一个REGISTER请求,注册服务器(registrar)按照如下步骤处理:
1、注册服务器(registrar)检查Request-URI来决定是否它属于本注册服务器所管理的区域的Request-URI。如果不是,并且如果这个服务器同时也作为一个proxy服务器,那么这个服务器应当转发这个请求到指定的区域。
2、为了保证注册服务器能够支持所需要的扩展,注册服务器必须处理Require头域。
3、 一个注册服务器应当对UAC进行身份认证。
4、注册服务器应当检查认证的用户是否通过认证来更改这个address-of-record的登记权限。
5、注册服务器(registrar)从REGISTER请求的To头域中解出address-of-record。如果这个address-of-record并非在这个Request-URI指明的区域中合法,那么注册服务器必须发出一个404(没有找到)的应答,并且跳过后续步骤。接着URI必须转换成为标准的格式。所有的URI参数都必须删去(包括用户参数user-param),并且任何非法(escaped)字符必须转换成为合法字符(unescaped)格式。最后形成一个可以用于绑定的列表。
6、注册服务器(registrar)检查是否请求包含了一个Contact头域。如果没有包含,它跳过到最后一步。如果Contact头域包含了,注册服务器检查是否有一个Contact头域值是”*”,并且包含了一个Expires头域。如果请求有其他的Contact头域或者任何有效期的值是非0的,这个请求就是非法请求,并且服务器必须送回一个400(非法请求)的应答,跳过后续步骤。如果没有,那么注册服务器检查是否Call-ID复核每一个绑定的值。如果不符合,它必须删除绑定。如果符合,它必须仅仅删除保存的绑定表中CSeq值小于请求中的Cseq值的记录。否则,更新必须终止,请求失败。
7、现在注册服务器(registrar)可以依次处理Contact头域中的联系地址了。
8、注册服务器(registrar)返回一个200(OK)应答。这个应答必须包含Contact头域,并且这个头域的值中列举了所有当前绑定的注册信息。每一个Contact值都必须包含一个”expires”参数,用来标志还有多久这个绑定信息就过期了。应答也必须包含一个Date头域。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434882.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

profile 安卓work_androidWorkProfileGeneralDeviceConfiguration 资源类型

androidWorkProfileGeneralDeviceConfiguration 资源类型androidWorkProfileGeneralDeviceConfiguration resource type2020/9/22本文内容命名空间:microsoft.graphNamespace: microsoft.graph注意: 适用于 Intune 的 Microsoft Graph API 需要适用于租户…

[读书笔记]TCP/IP详解V1读书笔记-1

TCP数据单元:tcp segment UDP数据单元:udp datagram IP数据单元:IP datagram 链路层单元:frame --------------------------------------- 应用层: SMTP:简单邮件传输协议 FTP:文件传输协议 DNS…

pandas划分数据

1.根据列位置划分 execldata pd.read_excel(filepath) # 获取列数 bandscount execldata.shape[1] #去除最后一列数据类别 bandscount bandscount - 1 classifypointdata execldata[:, 0:bandscount] classifypointlabel execldata[:, -1] 2.根据字段名称进行划分 exec…

SIP协议(基础技术知识)

SIP协议(基础技术知识) SIP(Session InitiationProtocol)协议是Internet多媒体通信和控制协议体系的一部分,该协议族包括会话描述协议(SDP)、会话发布协议(SAP)和会话启动协议(SIP)。会话描述协议用于描述会话发布、会…

python 程序停止打印日志_停止 Spring Boot 服务的几种优雅姿势

在使用 Spring Boot 的时候,都要涉及到服务的停止和启动,当我们停止服务的时候,很多时候大家都是 kill -9 直接把程序进程杀掉,这样程序不会执行优雅的关闭。而且一些没有执行完的程序就会直接退出。我们很多时候都需要安全的将服…

Office - 安装程序找不到office.zh-cn\*.文件

Office - 安装程序找不到office.zh-cn\*.文件 在同时安装vs2008 和 office2007 有可能会遇到个问题(如果现在安装office2007,在安装vs2008 不会出现问题, 反正会出现下面问题)在安装office2007时总是提示“安装程序找不到 offi…

批量导出部分依赖图(PDP)

部分依赖图 (PDP) 和个体条件期望 (ICE) 图可用于可视化和分析目标响应1与一组感兴趣的输入特征之间的交互。 部分依赖图 (PDP) 显示了目标响应与一组感兴趣的输入特征之间的依赖关系,边缘化了所有其他输入特征(“补充”特征)的值。直观地说…

c#读蓝牙数据_CSharp--BlueTooth 实现蓝牙通讯的程序 C#开发 可以发送和接收数据 方便二次开发 - 下载 - 搜珍网...

蓝牙C#/BluetoothDemo/bin/Debug/BluetoothDemo.exe蓝牙C#/BluetoothDemo/bin/Debug/OpenNETCF.BluetoothEx.dll蓝牙C#/BluetoothDemo/BluetoothDemo.csproj蓝牙C#/BluetoothDemo/BluetoothDemo.csproj.user蓝牙C#/BluetoothDemo/frmMain.cs蓝牙C#/BluetoothDemo/frmMain.Desig…

基于SDP的提议/应答(offer/answer)模型简介

1、引入 在松耦合会议中,会话参数完全由会议创建者来确定,参与者能做的仅仅是根据这些会话参数来加入会议(当然也可以选择不加入)。这种情况下,主要要做的就是会话描述,在这里SDP本身就足够了。 但是在更为…

arcgis已知两点投影坐标求距离

问题: 已知中心点坐标,求个点与中心点坐标的距离 解决方法如下: 新建字段 在新建字段上右键字段计算器 利用字段计算器进行两点间距离计算 不懂问题请进群交流询问相关知识点

【原创】StreamInsight查询系列(十九)——查询模式之检测异常

上篇文章介绍了查询模式中如何发现趋势,这篇博文将介绍StreamInsight中如何检测异常。 测试数据准备 为了方便测试查询,我们首先准备一个静态的测试数据源:var now DateTime.Parse("09/12/2011 8:57:00 PM"); var input new[] {n…

tensorflow 旋转图片_使用TensorFlow对图像进行随机旋转的实现示例

https://www.jb51.net/article/178934.htm在使用深度学习对图像进行训练时,对图像进行随机旋转有助于提升模型泛化能力。然而之前在做旋转等预处理工作时,都是先对图像进行旋转后保存到本地,然后再输入模型进行训练,这样的过程会增…

SIP协议详解

SIP协议概念** 会话启动协议SIP(Session Initiation Protocol)是一个在IP网络上进行多媒体通信的应用层控制协议,它被用来创 建、修改、和终结一个或多个参加者参加的会话进程。 **SIP协议可用于发起会话,也可以用于邀请成员加入…

arcgis判断两个字段是否相等

def a(b,c):if(bc):return 1else:return 0 不懂问题请进群交流

深入浅出InfoPath——动态获取InfoPath中的命名空间

问题描述:我们在不同的开发Server和Product环境中部署InfoPath的时候,发现命名空间会随InfoPath的小版本变化而变化。 比如:http://schemas.microsoft.com/office/infopath/2003/myXSD/2011-03-14T09:12:19 处理办法: 使用Linq to…

一元三次方程重根判别式_许兴华——关于复数集中解一元二次方程的问题

在学习复数时,最近有个别比较好学的同学提出一个问题:“对于复数系数一元二次方程,是否可以用求根公式求解呢?”——回答是肯定的!关于复数集中解一元二次方程的问题。其实,在复数集内解关于x的一元二次方程…

arcgis批量将栅格里的nodata转为0

新建模型 修改名称 在arcgis的工具箱中新建一个模型,具体模型如下 模型里的具体参数如下 1.栅格计算器 2.输出路径,%—%这样的的输出可以保留之前的文件的名称 不懂问题请进群交流

基于SIP协议的视频通讯

1.sip协议及其发展 sip(session initiation protocal)称为会话发起协议,是由ietf(internet engineering task force)组织于1999年提出的一个在基于ip网络中,特别是在internet这样一种结构的网络环境中&…

hive sql 怎么实现循环_Hive存储过程实现-hpsql

1. 什么是hpsql目前版本的hive中没有提供类似存储过程的功能,使用Hive做数据开发时候,一般是将一段一段的HQL语句封装在Shell或者其他脚本中,然后以命令行的方式调用,完成一个业务或者一张报表的统计分析。好消息是,现…

解决若干WTL与VS2010的兼容问题(如error MSB6006: “cmd.exe”)

解决[error MSB6006: “cmd.exe” 已退出,代码为 9009。]问题: The AppWizard for VS2010 above has two small glitches (however they might deter people from using WTL with VS2010). These are very easy to fix: 1) [Output Directory] and [Intermediate Di…