扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
摘要
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
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者