典型的proxy server在路由 INVITE 请求到目标时插入 P-Called-Party-ID 头域.该头域用 porxy 收到请求的 Request-URI 填写。

UAS 从几个已注冊的 AORs 中标识出是会话邀请发送给哪个AOR。 

3GPP IMS 的用户能够获得一个或多个标识用户的 SIP URIs(AOR)。比如:一个用户能够获得一个业务 SIP URI 和一个个人 SIP URI。

一个应用的案例是。用户能够让业务 SIP URI 仅仅对工作伙伴有效而个人 SIP URI 仅仅对家庭成员有效。在某一特定的时间点上, 业务 SIP URI 和个人 SIP URI 都已注冊到 SIP registrar,因此两个 URI 都能接受新的会话邀请。当该用户收到一个增加会话的邀请。他/她应该知道会话是发给已注冊的几个 SIP URI 中的哪一个。

这项需求在
3GPP R5 中关于 SIP[4]的需求中提及。

当为 UA 服务的 SIP proxy 获得 INVITE,然后对请求 Request-URI 字段进行重定位目标,而且替换为用户在注冊时 REGISTER 请求中 Contact 头字段的所发布的 SIP URI 时。这个问题就会在会话建立中的会话终结端产生。

当 UAS 收到 SIP INVITE, 它不能推断请求发给哪个 AOR。某些人可能认为 To 头域字段指明了语义上被叫用户,所以无需对 SIP 进行该扩展。尽管 SIP 的 To 头域字段在大多数情况下意味着 called party ID, 但在下面两个特殊情况下并不对:

1. 会话在到达为用户服务的代理server之前被前面的 SIP 代理前转(forwarded)。重定向(redirected)等。

2. UAC 构造了一个 To 头域字段与 Request-URI 不同样 INVITE 请求。

To 头域字段的使用问题是它仅仅能被 UAC 填写而不能路径上的代理改动。

假设由于某种原因 UAC 没实用目标用户的 AOR 填写 To 头域字段,目标用户将不能区分

会话期望的 AOR。

这个问题还有一个可能解决方式建立在注冊时,不同的 AOR 使用不用的 Contact 头字段值。

UA 能够能过分配不同的 Contact 头字段值来区分不同的 AOR. 比如, 当 UA 注冊 AOR。sip:id1,Contact 头字段能够为 sip:id1@ua; 而sip:id2的注冊能够绑定到 Contact 字段 sip:id2@ua.

上面描写叙述的方案假定 UA 显式注冊它的每个 AOR, 因此必须全然控制分配给每次注冊

的联系地址。

然而,在 UA 不能全然控制它注冊的 AOR 的情况下。比方第三方注冊。这个方法即可不通。3GPP 可能这样一种注冊情形: UA能够在SIP之外预先指示网络当UA注冊特定的 AOR 时,

一些其它的 AOR URIs 能够被自己主动注冊。该需求被 3GPP R5 需求 SIP [4]涵盖.

在下一段我们给出关于这个问题的一个样例。它的情况是会话中已经存在有序的呼叫前转,因而 UAC 并不清楚当前 INVITE 的真实目标 URI。

我们假定用户代理 (UA) 注冊到代理server (P1)。



场景 UA --- P1

F1 Register UA -> P1

REGISTER sip:example.com SIP/2.0

Via: SIP/2.0/UDP 192.0.2.4:5060;branch=z9hG4bKnashds7

To: sip:user1-business@example.com

From: sip:user1-business@example.com;tag=456248

Call-ID: 843817637684230998sdasdh09

CSeq: 1826 REGISTER

Contact: sip:user1@192.0.2.4



用户注冊其个人 URI 也到代理server (P1)。

F2 Register UA -> P1

REGISTER sip:example.com SIP/2.0

Via: SIP/2.0/UDP 192.0.2.4:5060;branch=z9hG4bKnashdt8

To: sip:user1-personal@example.com

From: sip:user1-personal@example.com;tag=346249

Call-ID: 2Q3817637684230998sdasdh10

CSeq: 1827 REGISTER

Contact: sip:user1@192.0.2.4



然后,代理registrar (P1) 从另外一个代理server(P2)收到一个目标为该用户业务 SIP AOR 的 INVITE 请求。我们假定该 SIP INVITE 之前经历了一系列的前转。因此它的 To 头域字段值填写并非用户的 AOR。在这样的情况下我们假定会话最初是发给sip:other-user@othernetwork.com。 SIP server othernetwork.com 将会话前转到sip:user1- business @example.com。



场景 UA --- P1 --- P2

F3 Invite P2 -> P1

INVITE sip:user1-business@example.com SIP/2.0

Via: SIP/2.0/UDP 192.0.2.20:5060;branch=z9hG4bK03djaoe1

To: sip:other-user@othernetwork.com

From: sip:another-user@anothernetwork.com;tag=938s0

Call-ID: 843817637684230998sdasdh09

CSeq: 101 INVITE



代理server P1 定位目标用户并用其注冊时的 Contact 字段值替换 Request-URI。

F4 Invite P1 -> UA

INVITE sip:user1@192.0.2.4 SIP/2.0

Via: SIP/2.0/UDP 192.0.2.10:5060;branch=z9hG4bKg48sh128

Via: SIP/2.0/UDP 192.0.2.20:5060;branch=z9hG4bK03djaoe1

To: sip:other-user@othernetwork.com

From: sip:another-user@anothernetwork.com;tag=938s0

Call-ID: 843817637684230998sdasdh09

CSeq: 101 INVITE



当 UAS 收到 INVITE, 它不确推断是业务 URI 还是个人 URI 上收到会话邀请。不管 UAS 还有代理server以及应用server都不可能对提供会话目标 AOR 作出推断。我们解决问题方案是:同意用户的归属域代理server(SIP 中定义)插入一个标识会话目标的 AOR 的 P-Called-Party-ID 头域。

假设使用了这项 SIP 扩展的话。被叫用户代理server将在获得消息 F5 后,用 F5 中的 Request-URI 填写到 F6 中 P-Called-Party-ID 去。



消息流 F5 和 F6 内容例如以下:

F5 Invite P2 -> P1

INVITE sip:user1-business@example.com SIP/2.0

Via: SIP/2.0/UDP 192.0.2.20:5060;branch=z9hG4bK03djaoe1

To: sip:other-user@othernetwork.com

From: sip:another-user@anothernetwork.com;tag=938s0

Call-ID: 843817637684230998sdasdh09

CSeq: 101 INVITE



F6 Invite P1 -> UA

INVITE sip:user1@192.0.2.4 SIP/2.0

Via: SIP/2.0/UDP 192.0.2.10:5060;branch=z9hG4bKg48sh128

Via: SIP/2.0/UDP 192.0.2.20:5060;branch=z9hG4bK03djaoe1

To: sip:other-user@othernetwork.com

From: sip:another-user@anothernetwork.com;tag=938s0

Call-ID: 843817637684230998sdasdh09

P-Called-Party-ID: sip:user1-business@example.com

CSeq: 101 INVITE



当 UA 收到 INVITE 请求 F6 时,它能推断会话的目的 AOR, 并能依据此 AOR 提供对应的服务.

P-Called-Party-ID头域的更多相关文章

  1. P-Called-Party-ID 头域的应用说明

    P-Called-Party-ID 头域的适用场景 P-Called-Party-ID 适用于 UAS 须要知道在代理将目标改写为Contact 地址之前请求中Request-URI的目的AOR的情况 ...

  2. HTTP常见头域

    近期没需求,也没什么心情去看书,就总结一下自己以前看的HTTP协议基础内容吧.(会很乱,可能不适合一点都没接触过HTTP协议的人观看) 一.HTTP Request header 1.Cache头域 ...

  3. HTTP头域列表与解释 之 request篇

    HTTP 头域是HTTP协议中请求(request)和响应(response)中的头部信息,其实就是HTTP通信的操作参数,告诉web服务器和浏览器怎样处理这个通信.HTTP头从一个请求信息或者响应信 ...

  4. HTTP协议头域详解

    HTTP协议头域详解 Requests部分 Accept 指定客户端能够接收的内容类型 Accept: text/plain, text/html Accept-Charset 浏览器可以接受的字符编 ...

  5. HTTP协议header头域

    HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内 容请参考RFC2616.HTTP协议采用了请求/响应模型.客 ...

  6. Postman系列二:Postman中get接口实战讲解(接口测试介绍,接口测试流程,头域操作)

    一:接口测试介绍 接口测试:就是针对软件对外提供服务的接口输入输出进行测试,以及接口间相互逻辑的测试,验证接口功能和接口描述文档的一致性. 接口测试好处:接口测试通常能对系统测试的更为彻底,更高的保障 ...

  7. Http头域字段详解

    HTTP(HyperTextTransferProtocol) 是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616.HTTP协议采用了请求/响应模型.客 ...

  8. 关于HTTP协议头域详解

    HTTP1.1 请求头:消息头  Accept:text/html,image/*  告诉服务器,客户机支持的数据类型 Accept-Charset:ISO-8859-1  告诉服务器,客户机采用的编 ...

  9. 什么是Web缓存控制(基于HTTP头域)

    这是一篇转载的知识性的文档,主要目的是为了让Web缓存相关概念更容易被开发者理解并应用于实际的应用环境中.为了简要起见,某些实现方面的细节被简化或省略了.如果你更关心细节实现则完全不必耐心看完本文,后 ...

随机推荐

  1. C# 實現文件壓縮-- 背景:服務器Log.txt 過多,佔用過多硬盤空間,壓縮備份后節省空間資源

    1.壓縮實現代碼如下: 調用ICSharpCode.SharpZipLib.dll(free software,可以搜到源碼). 轉移指定目錄文件夾轉移到目標文件夾 壓縮目標文件夾 刪除目標文件夾 u ...

  2. dom监听事件class

    layui.use(['layer', 'form'], function(){ var layer = layui.layer ,form = layui.form; var $ = layui.j ...

  3. CAD参数绘制文字(网页版)

    在CAD设计时,需要绘制文字,用户可以设置设置绘制文字的高度等属性. 主要用到函数说明: _DMxDrawX::DrawText 绘制一个单行文字.详细说明如下: 参数 说明 DOUBLE dPosX ...

  4. Java IO(二)--RandomAccessFile基本使用

    RandomAccessFile: 翻译过来就是任意修改文件,可以从文件的任意位置进行修改,迅雷的下载就是通过多个线程同时读取下载文件.例如,把一个文件分为四 部分,四个线程同时下载,最后进行内容拼接 ...

  5. js里的稀疏数组

    今天在逛掘金网站的时候,在一篇文章里学到一个新名字,稀疏数组,特此记录一下. 稀疏数组就是包含从0开始的不连续索引的数组.也就是说数组中大部分的内容值都未被使用(或都为零). var arr = ne ...

  6. LogisticRegressionCV 参数使用以及含义 笔记

    第一次接触LogisticRegressionCV ,记录一下. Logistic回归是分类算法,不能应用于回归中(传入模型的y值,不能是float类型,必须是int类型) 正则化选择参数 :pena ...

  7. 简单说一下Set,list,Map的类型和自己的特点

    首先是Set,List,Map Set和list都是继承了Conllection接口,而Map是本身就是一个接口 set是最简单的一种集合,没有重复对象 set接口主要有两个实现: 1,hashSet ...

  8. [Python3网络爬虫开发实战] 7-动态渲染页面爬取

    在前一章中,我们了解了Ajax的分析和抓取方式,这其实也是JavaScript动态渲染的页面的一种情形,通过直接分析Ajax,我们仍然可以借助requests或urllib来实现数据爬取. 不过Jav ...

  9. shell脚本语言基本命令

    shell脚本语言基本命令脚本:可运行,不需要编译 #vi 1.sh[编写:i(顶格)或o(换一行)]#! /bin/bash##this is a test shell script##Writte ...

  10. Python:os模块 time模块

    1.os os.popen('cmd').read() 执行某个系统命令,:输出命令结果 os.getcwd()  获取当前操作目录 os.makedirs(r"C:\a\b\c" ...