dev2dev 首页 > 资源中心 > 技术文章
了解Home Subscriber Server (HSS) Sh接口
摘要
Home Subscriber Server (HSS)是支持处理调用和会话的IMS网络实体主要用户数据库。本文说明了Home Subscriber Server与WebLogic SIP Server(WLSS)的通信方式,并且讨论了WebLogic SIP Server可以从HSS获取的不同数据,以及如何更新这些数据。本文从技术的角度概要介绍了DIAMETER协议和Sh接口,并给出了WLSS能够用于检索执行服务的用户数据的各类请求。
本文的第二部分将重点讨论BEA的互操作性测试(IOT)和Bridgewater System的HSS,以此作为在WLSS和HSS之间进行通信的一个例子。访问WebLogic Communications Platform开发者中心,可以找到提供有关SIP协议和DIAMETER的基本信息的其他文章。
简介
Home Subscriber Server是支持用于处理调用/会话的IMS网络实体的主要用户数据库。它包含用户配置文件,执行用户的身份验证和授权,并可提供有关用户物理位置的信息。它类似于GSM Home Location Register。与HSS通信的实体是应用服务器(AS)和 Call State Control Function 服务器 (CSCF),其中应用服务器以IMS环境为宿主并执行其中的服务。用户配置文件包含有关当前用户的信息——通常S-CSCF会在用户进行网络注册时下载和使用这个文件。
3GPP规范支持在IMS网络中使用3类ASes。注意,其中2类是遗留的(OSA和IM)。
- SIP AS:特定于IMS网络。
- OSA-SCS:OSA Service Capabilities Server。这是一个到OSA/Parlay的接口。
- IM-SSF:IP Multimedia Server Switching Functions,用于公开CAMEL Service给IMS。

图 1. HSS和其他网络实体之间的通信 每个AS都可以在Sh接口(IM-SSF通常使用Si接口进行通信)上使用DIAMETER协议选择与一个HSS进行对话。CSCF用于处理IMS网络中的SIP信号包。存在2类CSCF,它们在Cx接口上使用DIAMETER协议与HSS连接在一起:
- CSCF:Interrogating-CSCF。
- S-CSCF:Serving-CSCF是SIP Server,实施会话控制。它是信号平面的中心点。通常每个注册用户与整个会话都关联到同一个S-CSCF。
现在,在探讨Sh接口和WebLogic SIP Server之前,让我们先讨论一些DIAMETER协议。
背景:DIAMETER协议
DIAMETER基本协议是一种用于在IP Multimedia Subsystem和Next Generation Networks中执行身份验证、授权和账户管理(AAA)的协议。DIAMETER协议属于RFC3588规范,由著名的RADIUS协议演变而来。DIAMETER基本协议提供在通信中涉及的网络实体、错误通知、属性-值-对的传输和可扩展性之间的功能协商,这样就可以加入特定命令和新的AVP。DIAMETER还可以同时用在本地和漫游的情形中。和SIP不同,DIAMETER使用二进制编码,但是像Ethereal这样的工具可以轻松对协议消息进行解码,而且在这个互操作性测试中也使用了这个工具。
DIAMETER被设计为一种基本协议和应用程序的一个可扩展集,这意味着该协议划分为2个部分:基本协议,用于传输消息和错误通知,协商功能;DIAMETER应用程序,用于定义新的命令和数据单元。在我们的上下文环境中,这些新的应用程序是指Cx和Sh应用程序。Cx应用程序主要用于把CSCF连接到HSS,而Sh应用程序则由应用服务器来使用,IM-SSF是一个例外,它使用Si应用程序。
应用服务器,在这个例子中即为WebLogic SIP,使用一个命令(User-Data-Request,UDR)来请求数据。HSS使用包含所请求数据和结果代码的User-Data-Answer(UDA)作出回答。这个结果代码用于指示请求成功与否。例如,一次成功的操作的结果代码为Result Code 2001 DIAMETER_SUCCESS。
下面列出了RFC 3588中涉及到DIAMETER通信的一些术语(WLSS通常会担任除DIAMETER Server功能之外的所有角色):
- DIAMETER Agent:提供中继、代理、重定向或转换服务的DIAMETER节点。
- DIAMETER Client:位于实施访问控制网络边缘的设备。
- DIAMETER Node:实现DIAMETER协议的主进程,可以充当Client、Agent或Server。
- DIAMETER Peer:一个DIAMETER Node,给定的DIAMETER Node有一个到它的直接传送连接。
- DIAMETER Server:用于处理特定域的身份验证、授权和账户管理。
- Relay Agent:在无需修改消息的情况下转发请求和响应的实体。
Sh应用程序
现在是时候介绍我们的主角Sh应用程序了。这个接口允许应用服务器与HSS通信,以便它能够提取必需的数据来分派服务的逻辑。想象一个Call Screening服务,用户可以在其中配置激活服务的安排表。这些数据将保存在HSS中,而且可由WLSS进行恢复以激活服务。这类数据以2种形式存在:透明或不透明,透明意味着HSS从句法上而不是从语义上进行理解,而不透明则意味者HSS可以同时从句法和语义上进行理解。这些类型的数据对于用户是惟一的。我们称之为用户配置文件(User Profile)。基本上,一个用户配置文件包含一个到多个服务配置文件(Service Profile);每个服务配置文件定义了服务的执行方式。
Sh接口协议被定义为一个特定于IETF厂商的DIAMETER应用程序,这里的厂商是指3GPP。IANA指派给3GPP的厂商标识符是10415,而指派给Sh接口应用程序的DIAMETER应用程序标识符是16777217。
Sh数据类型
下面列出了可以使用Sh应用程序请求的数据的类型:
- 库数据:包含与服务相关的透明数据。
- 公共标识符:包含与用户相关的公共用户标识(Public User Identity,PUI)的列表。
- IMS用户状态:包含有关公共标识符的IMS用户状态的信息;可能的值为REGISTERED, NOT_REGISTERED,AUTHENTICATION_PENDING,REGISTERED_UNREG_SERVICES。
- S-CSCF名称:包含与用户相关的S-CSCF地址。
- 初始过滤器标准:包含服务的触发信息;AS只能获得与所提供服务相关的初始过滤器标准。
- 位置信息:包含与可能位于Circuit-Switched (CS)或Packet-Switched (PS)域中的用户相关的位置信息。
- 用户状态:包含CS/PS域中用户的状态。
- 记账信息:包含记账功能的地址。
- MSISDN:包含与公共用户标识相关的MSISDN。

图2 Sh数据UML图
Sh接口在应用服务器中的实现可以以2种模式进行工作:数据处理和订阅/通知。
- 数据处理(Pull/Update)数据处理通常保存在Sh Pull(用于从HSS中获取数据)和Sh Update(用于把数据保存到HSS中)中。当从HSS中检索数据时,需要创建一个Sh Pull请求,而把数据保存到HSS中时,则需要发出一个Sh Update请求。
- 订阅/通知订阅/通知模式允许当其他网络实体更新特定用户在HSS中的特定数据时,WLSS可以获得通知。
特定于Sh的命令
Sh的特定命令总结如下:
- UDR User-Data-Request,由WLSS发出,通常用于请求属于特定用户的用户数据。收到请求之后,HSS就会发出一个带有结果代码和数据本身的UDA User-Data-Answer。
- PUR Profile-Update-Request,由WLSS发出,用于更新保存在将使用PUA Profile-Update-Answer进行回答的HSS中的数据。使用Sh应用程序存储在HSS中的数据仅限于与该服务有关的数据。
- SNR Subscribe-Notifications-Request,由WLSS发出,用于发送电子邮件或取消对用户数据的订阅。HSS将使用SNA Subscribe-Notification-Answer进行回答。,
- PNR Push-Notification-Request,由HSS发出,用于把修改后的数据发送给当前订阅的WLSS。
Sh 权限列表
每次AS请求与特定用户相关的信息时,HSS都必须验证AS是否拥有发出请求所需的必要权限。HSS管理一个权限列表(Permission List),其中包含授予每个AS的权限。这些权限与前述的Sh-Pull、Sh-Update和Sh-SubNotif有关,可以逐个或者以任意组合进行分配。例如,可以授予一个AS Sh-Pull权限,但不能授予它Sh-Update权限。这些权限与HSS中配置的所有用户都有关。
特定于Sh的失效
Sh应用程序指定了2类故障:永久性失效和瞬时性失效。瞬时性失效用于在收到请求时通知同级该请求无法满足。该请求在将来能够得到满足。这些故障用于通知一个同级存在一个失效的请求(以永久或瞬时的方式)。我们将在说明基本可操作性测试(IOT)和实际HSS的内容中更加详细地处理这些失效。您可以在3GPP TS.29.329 specifications中找到Sh应用程序中规定的永久性失效的一个列表。您能够在其中找到两个例子(括号中是结果代码):
- DIAMETER_ERROR_OPERATION_NOT_ALLOWED (5101)
不允许用户请求的操作。
- DIAMETER_ERROR_USER_DATA_CANNOT_BE_MODIFIED (5103)
不允许修改所请求的用户数据。
WebLogic SIP Server的工作方式
本节考察了使用包含在当前版本的WLSS中的API与HSS服务器通信的容易程度。
WLSS配置文件API
DIAMETER Sh接口公开为一个Provider,而容器将负责所有的DIAMETER行为。对于开发人员,WebLogic SIP Server提供一个com.bea.wcp.profile.ProfileService接口,其实现方式注册在servlet上下文中,可以用于轻松检索配置文件。帮助类把用户数据返回为XML文档,开发人员可以使用标准的DOM技术来使用这些文档。如果使用的是Sh Pull Update命令,ProfileService会始终把用户数据返回为只读文档,所以在修改用户数据之前必须明确地把它复制下来。对于Sh Profile Update请求,应用程序可以指定通知ProfileListener类来自HSS的输入信息。由于聚合容器的存在,无论当前使用何种通道,HTTP或SIP,您都可以对HSS进行查询。
构建简单的Sh请求
构建Sh请求十分简单。Sh请求始终遵循以下模式:
protocol://uri/reference_type/access_key
在这个模式中:
- 协议显然是sh。
- Uri通常是指公共用户标识或用户标识。
- reference_type用于指定所请求的数据引用类型。
- access_key 对应属性-值对(Attribute-Value Pair ,AVP)的值。
下面给出了Sh Data Request的Document Selector Elements的一些例子:
- 请求有关服务IM2SMS的数据(这里的IM2MS代表一个ServiceIndication): sh://sip:username@domain.com/RepositoryData/IM2SMS
- 请求有关username@domain的公共身份: sh://sip:username@domain.com/IMSPublicIdentity/
- 请求MSISDN: sh://sip:username@domain.com/MSISDN/
检索ServiceProfile
在HTTP或 SIP servlet中,要做的第一件事就是导入com.bea.wcp.profile.ProfileService。在init() 方法中,保存了对ProfileService 的引用,以便从HSS中检索数据。下面代码段说明了如何实现:
public void init() throws ServletException
{
ServletContext sc = getServletContext();
// Get the ProfileService from the ServletContext
ps = (ProfileService)
sc.getAttribute(ProfileService.PROFILE_SERVICE);
if (ps == null)
{
throw new ServletException("Profile service not found");
}
System.out.println(getClass().getName() + " initialized");
}
准备Sh请求字符串
在WLSS中执行Sh Pull请求相当简单。下面的例子说明了如何使用一个switch语句,基于请求类型来构建Sh请求字符串:
public static String buildShRequest( int requestType,
String userName, String ServiceName, int domainType,
String serverName )
{
String docSelector = "sh://sip:";
// Get username
docSelector += userName;
// Matching RequestType with Data reference
switch(requestType)
{
case Constants.SH_REPOSITORY_DATA:
docSelector += "/RepositoryData/" + ServiceName;
break;
case Constants.SH_MSISDN:
docSelector += "/MSISDN/";
break;
case Constants.SH_IMS_PUBLIC_IDENTITY:
docSelector += "/IMSPublicIdentity/";
break;
case Constants.SH_CHARGING_INFO:
docSelector += "/ChargingInformation/";
break;
case Constants.SH_USER_STATE:
docSelector += "/UserState/";
docSelector += (domainType==Constants.SH_PS_DOMAIN)?"PS-Domain/":"CS-Domain/";
break;
case Constants.SH_IMS_USER_STATE:
docSelector += "/IMSUserState/";
break;
case Constants.SH_S_CSCF_NAME:
docSelector += "/S-CSCFName/";
break;
case Constants.SH_INITIAL_FILTER_CRITERIA:
docSelector += "/InitialFilterCriteria/" + serverName;
break;
case Constants.SH_LOCATION_INFO:
docSelector += "/LocationInformation/";
docSelector += (domainType == Constants.SH_PS_DOMAIN)? "PS-Domain/":"CS-Domain/";
break;
}
}
执行Sh Pull
现在,我们准备在WebLogic SIP Server中执行Sh Pull请求。在这个例子中,我们请求RepositoryData,以便需要获得用户以外的额外信息。服务名称是需要的。构建Sh请求之后,我们把它传递给前面已经实例化的ProfileService:
private String executeTest(String theShRequest)
{
String response = null;
try {
logger.debug("Sh Request: " + theShRequest );
// Get the document from the HSS
Document genericDoc = ps.getDocument(theShRequest);
response = DIAMETERHelper.toString(genericDoc.getDocumentElement());
logger.debug("HSS Response: \n" + response);
} catch (ProfileException e) {
// Get the Message Exception
MessageException me = (MessageException)e.getCause();
// Get the DIAMETER ResultCode
ResultCode rc = me.getResultCode();
session.setAttribute(Constants.DIAMETER_RESULT_CODE, rc.toString());
session.setAttribute("Exception", e.getMessage());
logger.debug("Exception - DIAMETER Result Code is: " + rc.toString() );
} catch (Exception e) {
response = e.getMessage();
session.setAttribute("Exception", e.getMessage());
logger.debug("Exception: " + response);
}
return response;
}
执行Sh Pull 更新
使用Sh Pull从HSS收到数据之后,现在可以使用标准的DOM技术来修改它了。保存新数据很简单:您要做的就是复制前面收到文档(因为ProfileServer返回的是只读文档),然后调用由ProfileServer公开的put()方法,如下所示:
private String executeTest(String theShRequest, String newData,
String newValue)
{
String response = null;
try {
logger.debug("Sh Request: " + theShRequest );
Document originalDoc = ps.getDocument(theShRequest);
// Preparing to modify the document
logger.debug("Going to prepare document");
// Modifying original document
Document modifiedDocument = this.saveDoc(
(Document)originalDoc.cloneNode(true),newData, newValue);
// Storing using Profile
ps.putDocument(theShRequest, modifiedDocument);
logger.debug("Saving data into HSS");
// Store in session the SIP SH Output Request
session.setAttribute(Constants.SIPAS_OUTPUT,
DIAMETERHelper.toString(modifiedDocument));
response = DIAMETERHelper.toString(
originalDoc.getDocumentElement());
logger.debug("HSS Response: \n " + response);
} catch (ProfileException e) {
MessageException me = (MessageException)e.getCause();
ResultCode rc = me.getResultCode();
session.setAttribute(Constants.DIAMETER_RESULT_CODE,
rc.toString());
session.setAttribute("Exception", e.getMessage());
logger.debug("Exception - DIAMETER Result Code is: " +
rc.toString() );
} catch (Exception e) {
response = e.getMessage();
session.setAttribute("Exception", e.getMessage());
logger.debug("Exception: " + response);
}
return response;
}
使用Bridgewater Systems HSS 进行Sh互操作性测试
本节分析了如何搭建测试环境和如何使用Bridgewater Systems驱动测试。我们首先介绍如何配置环境,然后简要讨论测试中使用的Web应用程序,并对WebLogic SIP Server和HSS之间交换的消息进行了描述。测试下的系统由2台运行WLSS 2.2实例的服务器组成,相当于一个DIAMETER节点,与Bridgewater HSS相连接。其中一台服务器将运行2个WLSS实例,一个用作Admin Server,另一个则用作DIAMETER节点。其他的DIAMETER节点运行在另一台服务器上,如图3所示:
图 3. 测试环境
如果没有真正的HSS,可以下载WLSS并使用我们的HSS Simulator。只要按照下列步骤去做即可:
- 下载并按照BEA WebLogic SIP Server 2.2 评估版。
- 使用Configuration Wizard 配置一个DIAMETER 域。
- 下载应用程序并在直径Sh客户端节点上部署它。
Configuration Wizard包括一个DIAMETER域模版,该模版创建了一个带有4个WebLogic SIP Server实例的域:
- 一台Administration Server
- 一个Diameter Sh 客户端节点
- 一个Diameter中继节点
- 一个HSS(HSS 模拟器)
请参考如何配置直径域的文档。
应用程序
本文中给出的示例应用程序很简单,它是为了轻松测试本文中描述的消息流而构建的。该应用程序允许查询和更新存储于HSS中的数据。可以使用简单的Web接口发出Sh-Pull、Sh-Update和Sh-Subs-Notify请求。如果是Sh-Pull,可以选择用户名、请求类型和服务名称,如果是Sh-Update,则可以选择服务数据和服务值。这个应用程序说明WLSS可以成功地与HSS进行通信,而且符合Sh接口的3GPP技术规范文档。

图4.显示用于测试Sh的Web应用程序的主页
有3个简单的JSP页面:Sh-Pull.jsp用于测试Sh-Pull请求,Sh-Update.jsp用于测试Sh-Update,而Sh-Subs-Notif.jsp用于测试Sh-Subs-Notif。还有一个特殊的页面profileViewer.jsp,它用于查询HSS以及获得完整的用户配置文件。您所有要做的就是在字段中插入用户名,然后提交表单。在web.xml中有2个参数:
- serverName ——用于查询InitialFilterCriteria。
- serviceName ——用于使用UDR和PUR查询HSS,与ServiceIndication一致。
这些参数在启动时读取,您可以按照自己的要求来修改它们。确定建立与HSS的连接后就可以使用这些页面来查询HSS。另外,Web应用程序打印出了ResultCode,HSS生成的XML响应,最后是异常,如图5所示: 
图 5.显示一个简单的PUR响应(单击小图可观看全图)
步骤 1: Testing Connect Disconnect from the HSS
在真正进行连接之前,WLSS应该可以连接到HSS服务器。在这种情况下,WLSS应该给配置好的HSS服务器发送Capability-Exchange-Request (CER)。HSS必须返回一个Capability-Exchange-Answer(CEA)。CEA用于确定每个同级支持哪些直径应用程序。
步骤2: 测试Sh-Pull
确定建立连接之后,WLSS能够发送User-Data-Request(UDR)请求给HSS Server:HSS应该正确读取该请求,然后发送一个响应User-Data-Answer(UDA)。另一方面,应用程序应该能够读取该响应:每个响应和请求都应该是匹配的。下图显示了UDR的行为:

图6. 显示 UDR行为(单击小图可观看全图)
获得正面测试结果的前提总结如下:
- WLSS连接到了Bridgewater HSS。
- 把Base DIAMETER Stack配置为与HSS进行通信。
- 用户存在于HSS中。
- WLSS位于HSS表列表中,而且WLSS的Repository Data的权限设置为可读。
步骤 3: 测试Sh-Update
这个命令类型可用于更新HSS中包含的用户数据。这个命令还可以用于删除HSS中的用户信息。WLSS发送一个Profile-Update-Request(PUR)给HSS,HSS执行更新,然后使用一个包含操作结果的Profile-Update-Answer(PUA)来应答。
值得强调的是,SIP Application Server可以更新/删除与它拥有的服务相关的数据。

图 7. 显示PUR行为
获得正面测试结果的前提总结如下:
- WLSS连接到了Bridgewater HSS。
- 把Base DIAMETER Stack配置为与HSS进行通信。
- 用户存在于HSS中。
- WLSS位于HSS表列表中,而且WLSS的Repository Data的权限设置为可写。
步骤 4: 测试Sh-Subs-Notif
WLSS使用消息订阅存在于HSS中的用户。WLSS发送Subscribe-Notifications-Request(SNR)来接收SNR中指定的用户数据修改的通知。HSS使用Subscribe-Notification-Answer(SNA)对SNR作出应答。这个命令还可用于删除订阅。

图 8. 显示SNR行为
获得正面测试结果的前提总结如下:
- WLSS连接到了Bridgewater HSS。
- 把Base DIAMETER Stack配置为与HSS进行通信。
- 用户存在于HSS中。
- WLSS正确配置在HSS表列表中,而且WLSS的Repository Data设置为(Sh-Subs-Notif)可用。
步骤 5: 测试Sh-Notif
Sh Update请求成功之后,HSS发送PNR消息给前面订阅的所有实体。所以,预定为接收修改通知的所有WLSS实体现在都将从HSS接收PNR消息。PNR消息包含有关修改后数据的详细信息。WLSS使用Push-Notification-Answer(PNA)进行应答。

图9. PNR 图
Download下载
- DIAMETER Web Application Test——本文中使用的DIAMETER Web 应用程序。
- Ethereal ——一个流行的网络协议分析器。
结束语
自前些年引入DIAMETER之后,它被证明是用于应用程序的下一代身份验证、授权和账户管理协议,比如网络访问和IP mobility。它提供可扩展的基本协议,用于交付AAA服务给新的访问技术或应用程序。设计DIAMETER的原本目的是解决RADIUS中的一些问题,比如安全,可靠性,客户端和服务器之间缺少对等关系,缺少实时账户管理,以及某些环境中的标准化使用(其中一些问题已经由RADIUS扩展解决)。DIAMETER部署的关键驱动力是对安全、标准化以降低成本和加快投入市场的速度以及跳出IMS的能力的关注。
本文利用Sh DIAMETER应用程序,对WebLogic SIP Server 2.2和Bridgewater HSS之间的通信进行了说明。本文描述了HSS的角色以及它如何存储数据。此外,本文还解释了WebLogic SIP Server如何检索和修改这些信息。本文中描述的示例Web应用程序证实了BEA与Bridgewater HSS的互操作性。Bridgewater是行业领先的提供商,为基于IP的服务提供以订户为中心的策略管理软件。
参考资料
- Dev2Dev上的WebLogic Communications Platform开发者中心
- UDR Flow Chart ——DIAMETER UDR Flow 图(PDF格式)
- PUR Flow Chart —— DIAMETER PUR Flow图(PDF格式)
- SNR Flow Chart —— DIAMETER SNR Flow图(PDF格式)
- WLSS 2.2 Doc ——WebLogic SIP Server 2.2 官方文档
- WLSS 2.2 Download ——WebLogic SIP Server 2.2 官方下载
- RFC 3588 —— DIAMETER基本协议
- 3GPP TS 29.328 ——Technical Specification Group Core Network 和Terminals, IP Multimedia (IM) Subsystem Sh 接口;信号传输流和消息内容
- 3GPP TS.29.329 —— Technical Specification Group Core Network 和Terminals; Sh Interface-基于DIAMETER协议;协议详细内容
致谢
作者要感谢Bridgewater Systems 公司市场发展部经理Pascal Henry的支持,以及他对本文的贡献和校对工作。
术语表
AAA: Authentication, Authorization, and Accounting
API: Application Programming Interface
AS: Application Server
CAMEL: Customized Application for Mobile network Enhanced Logic
CAP: Camel Application Part
CEA: Capability-Exchange-Answer
CER: Capability-Exchange-Response
CSCF: Call State Control Function
DOM: Document Object Model
EAP: Extensible Authentication Protocol
GSM: Global System for Mobile Communications
HSS: Home Subscriber Server
I-CSCF: Interrogating CSCF
ISC: IMS Service Control
IM-SSF: IP Multimedia Serving Switching Function
IMS: IP Multimedia Subsystem
IOT: Inter Operability Testing
NASREQ: Network Access Server Requirements
MSISDN: Mobile Subscriber International Services Digital Network
OSA: Open Service Architecture
OSA-SCS: OSA Service Capability Server
PNA: Push-Notification-Answer
PNR: Push-Notification-Response
PUA: Profile-Update-Answer
PUR: Profile-Update-Response
RADIUS: Remote Authentication Dial In User
S-CSCF: Serving CSCF
SIP: Session Initiation Protocol
SIP-AS: Sip Application Server
SNA: Subscribe-Notifications-Answer
SNR: Subscribe-Notifications-Response
UDA: User-Data-Answer
UDR: User-Data-Request
WLSS: WebLogic Sip Server
XML: Extensible Markup Language
| 作者简介 |
 Stefano Gioia |
Stefano Gioia 是EMEA的BEA WebLogic Sip Server 技术专家。他把主要精力都放在让IMS及其工作人员和合作伙伴能够跨越欧洲、中东和非洲的努力上。 |
作者其它文章
|