中国智能网应用协议_第1页
中国智能网应用协议_第2页
中国智能网应用协议_第3页
中国智能网应用协议_第4页
中国智能网应用协议_第5页
已阅读5页,还剩86页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、中国智能网应用协议中国智能网应用协议 20202020 年年 7 7 月月 版版 权权 声声 明明 本书版权属于上海欣方智能系统有限公司。任何单位或个人未经 本公司书面许可,不得将本书的部分或全部内容进行任何形式的节录、 增删、印刷、复制、翻译。或以任何形式进行传播。 版权所有,侵权必究版权所有,侵权必究! The copyright of this book belongs to Shanghai CINtel Telecom System Co. Ltd. No part of this book may be extracted, added, deleted, pressed, cop

2、ied, translated or transmitted in any form or by any means, without express written permission from CINtel Telecom System Co. Ltd. Copyright by Shanghai CINtel Telecom System Co. Ltd. 中中国国智智能能网网应应用用协协议议 C C- -I IN NA AP P 详详解解 (C CS S1 1 部部分分) 上海欣方智能系统有限公司上海欣方智能系统有限公司 2020 年年 7 月月 目 录 第第 1 章章绪论绪论.1

3、1.1智能网简介.1 1.2INAP 简介.1 1.3INAP 协议结构.2 1.4简单的例子.3 第第 2 章章ASN.1 基础基础.5 2.1ASN.1 简介.5 2.2ASN.1 的语法.6 2.3ASN.1 的基本编码规则.8 2.4INAP 中常用的 ASN.1 宏.11 第第 3 章章操作,应用服务单元和应用上下文操作,应用服务单元和应用上下文.14 3.1概述.14 3.2操作的定义.15 3.3应用服务单元(ASE)的定义 .23 3.4应用上下文定义.28 第第 4 章章操作的参数操作的参数.33 4.5操作及返回结果的参数定义.33 4.6数据类型定义.41 4.7ERRO

4、R 的定义.57 第第 5 章章INAP 与与 TACP 的配合的配合 .59 5.1TCAP 简介.59 5.2TCAP 的服务原语.60 5.3INAP 对 TCAP 原语的应用 .61 5.4对话建立.64 5.5对话继续.65 5.6对话结束.65 5.7用户放弃.66 5.8提供者放弃.66 5.9INAP 使用 TCAP 原语的例子 .66 第第 6 章章300 业务主流程业务主流程 INAP 交互信息详解交互信息详解.67 第第 1 章章 绪论绪论 1.1 智能网简介智能网简介 智能网是一个网络体系,它为了增强通信网的智能化程度而在现有的网上设置一些特殊的网 络单元(新的硬件设备

5、或新的软件功能) ,使得网络能够方便,快速的提供新的业务来满足用户的 需求。 智能网从产生到现在已经有了很大的发展,他容纳了越来越多的新技术,按照能力集分为 CS1,CS2,CS3,CS4 等几个阶段。目前在网上应用最为广泛的就是 CS1,他的大体结构如图 1-1 所示: 简单的说 CS1 智能网系统的运行方式如下: 业务提供者用 SCE(业务创建环境)开发业务,将业务逻辑通过 SMP(业务管理点)加 载到 SCP(业务控制点) ,将业务用户管理程序安装至 SMAP(业务管理接入点) 。 业务运营者通过 SMAP 设置业务用户数据,将用户数据加载到 SMP,SCP。 业务用户通过话机拨打智能业

6、务,端局分析业务接入码,将呼叫路由至 SSP(业务交换 点) ,SSP 通过 7 号信令网(SCCP/TCAP)将业务触发事件报告给 SCP,SCP 根据业务流 程和业务用户的数据控制 SSP 或 IP(智能外设)为用户提供这个业务的服务。 1.2 INAP 简介简介 智能网是一个分布式系统。它通过智能网结点中的各功能实体(FE)之间互相传递消息来协 调完成任务。前面 1.1 节中所述的智能网运行过程中,SCP 和 SSP,IP 要交换一些信息来完成一个 业务流程,这些信息流程的不同,就形成了不同的业务。实际上这些信息的集合就是 INAP 的内容。 这些信息一般主要包括: SSP 将业务触发信

7、息报告给 SCP; SCP 7 号信令网 SSPSSPSSPIP SMP SMAP SMAP SMAP SCE 图 1-1:CS1 智能网系统结构图 SCP 请求 SSP 设置一些事件检测点(如挂机,忙等) ; SCP 控制 SSP 或 IP 播放提示音或通过 DTMF 收号; SCP 向 SSP 设置一些计费控制信息; SCP 控制 SSP 连接某个被叫号码; SSP 向 SCP 报告一些检测出的事件(如挂机、忙等) ; SSP 向 SCP 报告计费的结果。 ITU-T 将智能网各功能实体之间的消息做一些总结归纳,形成一组与将智能网各功能实体之间的消息做一些总结归纳,形成一组与业务无关业务无

8、关的操作,并用的操作,并用 一种一种高层通信协议的形式加以规范定义高层通信协议的形式加以规范定义,即为智能网应用协议,称为,即为智能网应用协议,称为 INAP ( Intelligent Network Application Protocol ) 。所谓 INAP“与业务无关”就是这些操作可以实现所有的业务,也就是说, 业务的改变只需要改变操作的流程和操作的参数值,而不需要增加操作或改变操作的参数结构。业务的改变只需要改变操作的流程和操作的参数值,而不需要增加操作或改变操作的参数结构。 有了 INAP,新增加一个业务就变得很简单了,网上众多的 SSP 只需要设置一下业务触发数据 (主要是业务

9、接入码和业务关键字的对应关系) ,SCP 的工作是描述一个业务流程通过 INAP 来控 制 SSP 或 IP。 智能网系统中的各个设备往往是各个不同的厂家提供的,INAP 定义的精确和无二义性就变得 非常重要。目前 INAP 的语法的定义使用的是ASN.1(抽象文法记法一)(抽象文法记法一)。ASN.1 是描述应用 层协议最常用的一种工具。 在智能网的规范中 INAP 是最重要的一部分,INAP 以 OSI 为基础,定义了 SACF/MACF 规则、 各功能实体间的操作和差错、各功能实体发送和接收 INAP 操作时必须遵守的操作程序以及所使用 的低层业务等,即采用某种信息模型来描述实体之间通信

10、的交互规则。 ITU-T 的 Q1218 定义了 CS1-INAP 的国际标准。中国信息产业部传输所根据中国电信网络的 具体情况,抽取 Q.1218 的一个子集,对有关计费的操作参数做了细化,形成了中国智能网应用协 议,即 C-INAP 国标 CS1 部分(以下简称 C-INAP) 。C-INAP 支持以下 4 个功能实体间的接口程序: 业务交换功能(SSF) ; 业务控制功能(SCF) ; 业务数据功能(SDF) ; 专用资源功能(SRF) ; 即,包括了 SCF-SSF、SCF-SRF、SCF-SDF 间的接口协议。由于目前绝大多数厂家的 SCF 和 SDF 集成在 SCP 一个物理实体中

11、,采用内部接口。因此,在此仅对 SCF-SSF 和 SCF-SRF 的接口 进行介绍。 C-INAP 包含了 27 个操作,它们分为 20 个 ASE(应用服务单元,每个应用服务单元包含一个 操作,或者功能相关的几个操作) 。C-INAP 规定了 7 种应用上下文,每种应用上下文对应一组 INAP-ASE 的集合,以及它们的一种使用方式。 1.3 INAP 协议结构协议结构 OSI 的第七层为应用层,提供上层应用所需的通信支持,并从下层的表示层获得服务。对等的 应用层间的通信协议称为应用协议,例如智能网应用协议(即 INAP) 。ISO-9545 定义了应用层结 构(Application L

12、ayer Structure, ALS) ,该结构主要包括应用进程、应用实体、应用服务对象、应 用服务单元、控制功能等部分。 一个应用进程(Application Process, AP)通常是指所有的与一个应用有关的资源,用于完成特 定的信息处理活动。 在概念上,应用进程分为通信对象和非通信对象,其中的通信对象称为应用实体(AE) 。一个 应用进程可包括一个或多个应用实体。 应用实体可能很复杂,为了说明 AE 间的通信,需要将 AE 细分为多个组成对象,再分析这些 对象如何与他们的对等对象进行通信。这样,两个通信 AE 间的应用协议的设计就可简化为不太复 杂的多对通信对象间应用协议的设计。一

13、个 AE 可以分成一个或多个应用服务对象(Application Service Object, ASO) ,以及一个或多个应用服务单元(Application Service Element, ASE) 。AE 本 身是最大的 ASO,一个 ASO 可以是多个 ASE 的集合。 ASE 是 ASO 不可再分的基本部件,提供给用户一组服务原语或操作,一般分为公用和专用两 种。公用的是指能为若干应用提供通信能力的 ASE,例如 TCAP 等,专用的是指为某个应用提供 特定服务的 ASE, 如 INAP 自定义的 ASE。 在 ASO 中,除了包含若干 ASE 和 ASO 外,还可含有控制功能(C

14、ontrol Function, CF) , 他 负责协调 ASO 中多个 ASE 和 ASO 的活动。 INAP 的协议结构可用图 1-2 来表示。一个物理实体可以与其他的物理实体进行单个交互(情 况 a)或多个协调交互(情况 b) 。 情况 a 中,SACF 提供了使用 ASEs 的协调控制功能,包括 ASEs 所支持的操作顺序。SAO 表 示 SACF 加上与其他物理实体进行单个交互时所用的一些 ASEs。 情况 b 中,MACF 提供了对多个 SAO 的协调控制功能,其中每一个 SAO 与远端物理实体的 SAO 交互。 图 1-2:INAP 的协议结构 C-INAP 共定义了 20 个

15、 ASE,它们属于专用的 ASE,此外,还有七号信令提供的公用 TCAP ASE。前者是后者的用户,后者为前者提供服务。 1.4 简单的例子简单的例子 例如一个简单的 800 业务,业务用户拨 800 xxxxxxx(xxxxxxx 时 800 的形式号码) ,经过 SSP,SCP 翻译成一个实际的被叫号码接通。图 1-3 所示这个流程所使用的 INAP 操作。 主叫用户SSPSCP 拨 InitialDP 操作,包含参数:业务键(8) , 所拨号码() 调用业务键 8 所对应的 800 业务逻辑,根据形 式号码得到实际的被叫 号码 被叫用户 通话 Connect 操作,包含参数:实际被叫号

16、码() 图 1-3:最简单的 800 业务的 INAP 消息流程示意图 应用进程 SCCP MTP SACF ASEs TCAP SAO (a) 应用进程 SCCP MTP SACF ASEs TCAP SAO (b) SACF ASEs TCAP SAO MACF SACF单联系控制功能 MACF多联系控制功能 SAO单联系对象 ASE 应用服务单元 图 1-3 中的 InitialDP 和 Connect 是 INAP 中的两个比较重要的操作。InitialDP 操作负责将业务 触发的信息报告给 SCP,Connect 操作则是 SCP 控制 SSP 接续一个被叫号码。 当然图 1-3 只

17、是一个很简化流程,实际的 800 业务的流程要复杂的多。例如,如果 800 业务号 码需要输入密码,则需要使用 ConnectToResource,PromptAndCollectUserInformation 和 DisconnectForwardConnection 操作来连接语音资源、播放提示音并收集用户所拨的号码、断开语音 资源,则上面的流程就要变为图 1-4: 图 1-4 的流程虽然复杂了很多,但是它也不是非常完整的。一般的 SCP 在连接资源之前应该使 用 RequestReportBCSMEvent 来请求 SSP 设置一些事件检测点。如果这些事件发生(例如主叫或被 叫挂机) ,

18、SSP 要使用 EventReportBCSM 操作来通知 SCP。 如果需要实时计费,SCP 应该在 Connect 操作之前发送 ApplyCharging 操作来设置计费有关的 信息给 SSP,SSP 在呼叫结束后硬发送 ApplyChargingReport 操作将计费的结果报告给 SCP。 主叫用户SSPSCP 拨 InitialDP 操作,包含参数:业务键(8) , 所拨号码()调用业务键 8 所对应的 800 业务逻辑,请用户 输入密码 被叫用户 主叫和语音资源建 立连接 ConnectToResource 操作来连接语音资 源PromptAndCollectUserInform

19、ation 操作 来播放提示音并收号(包含提示语音号, 收号位数等参数) 听“请输入密码” 拨密码 1111 PromptAndCollectUserInformation 操作 的返回结果(包含用户所拨号码参数) 800 业务逻辑判断密码 正确,根据形式号码得 到实际的被叫号码 DisconnectForwardConnect 语音断开主 叫和语音资源的连接 Connect 操作,包含参数:实际被叫号 码() 通话 图 1-4:带密码的 800 业务的 INAP 消息流程图 第第 2 章章 ASN.1 基础基础 2.1 ASN.1 简介简介 抽象语法记法 1(ASN.1)是一种抽象的描述性语

20、言,它是由 CCITT(ITU-T)与 ISO 联合定 义的。ITU-T X.208 和和 ITU-T X.209 等相关标准规范了如何描述数据类型和这些数据值如何被转换等相关标准规范了如何描述数据类型和这些数据值如何被转换 成数据流进行传输,即成数据流进行传输,即 ASN.1 的抽象语法和传输语法的抽象语法和传输语法。在此对 ASN.1 只做简单的介绍。 ASN.1 的抽象语法记法只描述数据的结构形式,与具体的编码格式无关。ASN.1 语言记法与 大多数程序设计语言相似,包括一些固有类型和一套将固有类型构造成复杂类型的方法(即构造 类型) 。由于 ASN.1 语言具有的抽象描述特性,它很适合

21、用来描述 PDUs,是目前最常用的一种描 述高层协议的工具。它使用一种记法来描述协议所用到的数据类型、数据值,而描述中不必给出 具体的编码。因为 ASN.1 已经为自己的所有支持的数据类型定义了精确的编码规则,协议的实现 者根据协议的 ASN.1 描述文本和 ASN.1 本身的基本编码规则来确定协议的具体编码。 ASN.1 提供了几种基本的数据类型,例如整数(INTEGER) ,八位组(OCTET STRING) ,布 尔(BOOLEAN)等用来描述协议中的一些基本数据类型。它还提供了用基本数据类型来组合成复 杂的数据类型的方式,例如序列(SEQUENCE) ,选择(CHOICE) ,集合(S

22、ET)等。 ASN.1 的编码采用的是可变长的,层层嵌套的方式。如图 2-1 所示: 因为编码中的几乎任何要素(包括标记,长度和内容)都是可变长的,所以它的的表示能力 很强大。例如表示一个整数,因为前面有规定了长度,它可以用一个字节表示(如果整数值很小) , 也可以用多个字节表示(如果整数值很大) 。而长度的长度也是可变的,可以说无论内容有多长, 它都可以表示出来。 图 2-1:ASN.1 编码结构示意图 最外层的标记:例如 05 最外层的长度:0A(1+1+8+1+1+4) 最外层 的内容 分为两 部分 第 1.1 部分的标记:例如 03 第 1 部分的长度:08(1+1+1+1+1+3)

23、第 2 部分的标记:例如 02 第 2 部分的长度:04 第 2 部分的内容:例如八位组1234 ,编码为 31 32 33 34 第 1 部分 的的内容 又分为两 部分 1.1 和 1.2 第 1 部分的标记:例如 1 第 1.1 部分的长度:例如长度 01 第 1.2 部分的标记:例如 04 第 1.2 部分的长度:03 第 1.1 部分的内容:例如整数 10,编码为 0A 第 1.2 部分的内容:例如整数 32769,编码为 00 80 01 2.2 ASN.1 的语法的语法 模块定义模块定义 一个协议一般由几个 ASN.1 模块定义组成,一个 ASN.1 模块是对协议的一部分相对独立的

24、内 容的完整的描述,例如: IN-CS1-Errors ccitt recommendation q 1218 modules(0) cs1-errors(1) version1(0) DEFINITIONS IMPLICIT TAG:= BEGIN 模块体中的内容模块体中的内容 END 就是模块定义的一个框架。IN-CS1-Errors是模块的一个有意义的名字,括起来的是此模块对 应的对象标识,也就是说这个ASN.1模块作为一个对象,它在对象标识树中应该有自己的位置。所 谓对象标识树,如图2-2所示: 树中的每一个节点都对应一个整数,兄弟节点的整数值不重复,这样每一个对象(树中的节点) 都对

25、应一个从根开始的路径,这个路径由一串整数构成,这一串整数经过编码就构成了这个对象 的标识,例如C-INAP的7种应用上下文都对应一个对象标识(在第4章将有详述)。 模块定义接着对象标识之后的是一个关键字“DEFINITIONS”,关于“IMPLICIT TAG”的意 义在2.3节将有详述,“:=”之后是BEGIN和END括起来的模块体。 模块体由引入符号和赋值表构成,其中输入符号部分例如: IMPORTS ERROR FROM TCAPMessages ccitt recommendation q 773 modules(0) messages(1) version2(2) InvokeID,

26、 UnavailableNetworkResource FROM IN-CS1-DataTypes ccitt recommendation q 1218 modules(0) cs1-datatypes(2) version1(0); 表示这个模块所用到的ERROR,InvokeID,UnavailableNetworkResource三个符号在这个模块 中没有定义,是从别的模块引入的,其中ERROR是从TCAPMessages模块引入的,另外两个是从 IN-CS1-DataTypes模块引入的。 其它 iso ccitt recommendation 其它内容 b z q a . . 77

27、1 ac(1) 763 1218 modules(0) cs1-datatypes(2) cs1-errors(1) version(0) 图 2-2:对象标识树示意图 模块体的另外一部分是赋值表,由一系列的赋值项目构成,赋值项目分为两类,一类是类型赋 值,用于定义新的数据类型,一类是值赋值,用于定义值,例如: Cost:= INTEGER (0.maxCost) 是一个类型赋值项目,新的类型Cost被定义为一个整数,整数的范围是从0到maxCost maxCost INTEGER := 99,999,999 是一个值赋值项目,maxCost被定义为一个类型为整数的数值()。 固有类型及其值固

28、有类型及其值 ASN.1 抽象语法中的重要概念是数据类型和值。值是某个值集合中的一个元素,类型是值集 合的名字。 类型的说明用样板 typereference:=Type 定义, 这里 typereference 是类型 Type 的名字或引 用。例如: CourseLimit:=INTEGER 定义了 INTEGER 类型的一个数据类型名 CourseLimit。 ASN.1 有几种简单固有类型,常用的是 INTEGER,BOOLEAN,REAL,BITSTRING,ANY,OCTETSTRING,ENUMERATED,NULL 和 OBJECT IDENIFIER 类型。 INTEGER

29、类型包括所有正负整数值和 0。整数类型定义例子如下: NumerOfCustomers:=INTEGER BOOLEAN 类型包括 TRUE 或 FALSE 两种值。 REAL 类型由所有实数值组成。 BITSTRING 类型包括任何有序比特串。它的一个例子是: UserInteractionModes := BIT STRING voiceMessage(0), tone(1), display(2) 其中,UserInteractionModes 由 3 位比特串表示,第 1 位表示 VoiceMessage,第 2 位表示 Tone,第 3 位表示 Display。 OCTETSTRIN

30、G 类型是所有有序八位组(或字符)串的集合。一个 OCTET STRING 的值为 0 255。 ENUMERATED 类型由类型定义部分所枚举的有限值的集合。它的一个例子是: ActionIndicator := ENUMERATED activate(1) , deactivate(2) , retrieve(3) NULL 类型只有一个值:空值。 构造类型构造类型 ASN.1 提供了一些预定义的基本类型,协议模块定义的赋值表中的一系列类型赋值项目就是 利用这些基本类型来构造新的类型。每个类型赋值项目“:=”的左边是新类型的名字,右边的类 型可以是: 已定义的类型:就是在本摸块中已经定义了

31、的类型,或者从其它模块引入的类型; 基本类型:例如 INTEGER,OCTET STRING,BOOLEAN 等 序列类型:SEQUENCE 和 SEQUENCE OF 集合类型:SET 和 SET OF 选择类型:CHOICE 有标记类型:标记+隐式或显示指示+类型 SEQUENCE 把多种要素(component)组合在一起,包括简单和构造类型。一般,可以在 SEQUENCE 类型的每个要素之后使用关键字 OPTIONAL 和 DEFAULT。OPTIONAL 表明这个要 素在使用时可以忽略,而 DEFAULT 可以给这个要素置初始值。SEQUENCE 类型定义举例如下: C:=SEQUE

32、NCE a 0A, bB, c1IMPLICIT INTEGER 表示 C 被定义为一个序列类型,这个序列是由 a、b、c 三项组成的,a 是有标记类型,标记为 0,类型为 A;b 为类型 B;c 是有标记类型,标记为1,类型为 INTEGER,并且有隐式指示 (隐式指示的意思是:在编码的时候 INTEGER 的标记会被隐含掉, EXPLICIT 则是显式指示, 意思正好相反,这些在 2.3 接将会有更详细的描述) 。 SEQUENCE OF 包含同一类型的顺序序列,SET OF 定义同一类型值的无序集合。例如: D:=SEQUENCE SIZE(1.3) OF INTEGER 表示 D 被定

33、义为 1 到 3 个整数的序列。 SET 与 SEQUENCE 相似,把多种要素(component)组合在一起,两者不同仅在于 SEQUENCE 有序而 SET 无序。由于 SET 类型是无序的,所以各要素需要有不同的标记值(Tag) 。 E:=SET a 0A, bB, 表示 E 被定义为一个集合,它的定义方式与 SEQUENCE 类似,实际的区别是 SEQUENCE 中 的各项必须保证次序,而 SET 中的各项的次序是不要求的。 CHOICE 用来从类型集合中定义一个类型,其中每个要素应该有不同的标记值。例如: F:=CHOICE a 0A, b1B, 表示 F 被定义为有标记类型0A

34、和有标记类型1B 中的二者之一,也就是说它的编码或者与 0A 的编码一致,或者与1B 的编码一致。 上面只是列举了几种比较常用的构造类型定义方式,更详细的内容应参阅 ITU-T X.208。 2.3 ASN.1 的基本编码规则的基本编码规则 ASN.1 所定义的所有的类型的值的编码都分为三个部分: 此类型的标记的编码 值的内容的长度的编码 值的内容的编码 标记的编码标记的编码 每一个类型都有它的标记,如果标记对应的号码小于 31,那么它的编码比较简单: 一般的一些简单类型或序列、集合的标记是固定的,作用于全局,一般前两位用 00。例如整 数的标记号码为 2,整数的内容显然是不可再分的,所以是原

35、编码(0) ,所以整数标记的编码是 (十六进制 02) 。再如序列类型,标记的号码为 16(10000) ,序列的内容为构造编码(1)所以序 列标记的编码是(十六进制 30) 。 INAP 中常用的还有序列类型中的有标记类型,它们的标记是上下文指定的(10) ,如果标记 为7,又是原编码,那么它的编码用该是(十六进制 87) 。如果它是构造编码,它的编码应该为 (十六进制 A7) 如果标记的号码大于或等于 31,低 5 位无法表示,标记的编码将用多个字节表示。第一个字 节的表示方法仍然如图 2-3,区别在于低 5 位全为 1,11111 表示此标记是用多字节表示的。如果 标记号小于或等于 12

36、7,则总共用两个字节就够了,例如有标记类型32(原编码)将编码为: (9F 10) 。 当然,标记号可以任意的大,所以标记的编码的长度也不是固定的,因此编码的后几个字节 都只使用低 7 位,最高位用来判断标记的编码是否结束(1:没结束,0:结束) 。例如:有标记类 型128(原编码)的编码是: (9F 81 00) ,后两个字节的低 7 位,一共 14 位,合起来(000) 表示号码 128。再例如32767的编码应该是 ,后 3 个字节的低 7 位合起来()来表示 32767。 长度的编码长度的编码 标记编码之后是长度的编码,如果长度值小于或等于 127(用 7 位可以表示) ,那么长度用一

37、 个字节就可以表示(高位为 0) ,例如长度 33 的编码为。 如果长度支大于 127,那么长度要用多个字节表示,第一个字节的高位位 1,低 7 位表示长度 的长度,后续几个字节和起来表示长度值。例如长度值 128 就必须用两个字节表示: 。再如长度 值 32767 就必须用三个字节表示: 。 低 5 位用来表示标记号,因为标记 号小于 31,所以 11111 不会用到 第 5 位为 0 表示原编码,1 表示构造编码,源编码表示后面的 内容部分不可再分,构造编码表示后面的内容部分仍然是由一 个或几个完整的编码(标记+长度+内容)构成 高两位表示标记的类型,00 表示此标记适用于全局,01 表示

38、此标记适用于某 个应用,10 表示此标记是上下文指定的,11 表示此标记是私用的。 图 2-3 号码小于 31 的标记的编码 几种常用的基本类型的编码几种常用的基本类型的编码 布尔类型(布尔类型(BOOLEAN)的编码:)的编码:标记的编码为 01,长度为 01,内容为 00(如果布尔值为假, FALSE) ,或 FF(如果布尔值为真,TRUE) 。 整数类型(整数类型(INTEGER)的编码:)的编码:标记的编码为 02,内容的长度虽整数值的大小不同而不同, 整数的绝对值越大,整数所需要的字结束越多。整数用补码来表示,二进制位数为 8 的倍数,至 少有一个符号位,至多有 8 个符号位。所以整

39、体来说高 9 位不全为 0,也不全为 1。例如整数 127 的内容的编码为,可以用一个字节,而整数 128 的内容编码必须要两个字节 。而单字节应该是整 数值-128 的编码。再如-129 的编码为 ,129 的编码为 。 八位组(八位组(OCTET STRING)类型的编码:)类型的编码:标记的编码为 04,内容的编码就是八位组的具体内 容。八位组类型包括几种特殊的类型如主叫号码,被叫号码,通用数字,通用号码等,这些特殊 号码内部的编码方式由 ITU-T Q.763 规定。 空(空(NULL)类型的编码:)类型的编码:标记为 5,长度为 0,内容无。 枚举(枚举(ENUMERATED)类型的

40、编码:)类型的编码:标记为 0A,玫举的每一个值都是一个整数,内容的编 码和它对应的整数的编码相同。 SEQUENCE,SET 类型的编码类型的编码 SEQUENCE 的标记的编码为 30,SET 的标记的编码为 31,它们的内容的编码的区别在于内 容的各项是否一定保证次序,SEQUENCE 内容的各项的次序是要保证的,也就是说编码中的次序 必须与 ASN.1 描述中的次序一致,而 SET 则没有这个要求。下面以 SEQUENCE 为例来说明。 例如: SEQUENCE b INTEGER, c BOOLEAN 此类型的标记为 30,内容包括两项,b 为一个整数,假设值为 10,c 为布尔类型

41、,假设值为 TRUE,那么对应的这个 SEQUENCE 类型的值的编码为:30 06 02 01 0A 01 01 FF。 SEQUENCE 中的各项可能是可选的,例如 SEQUENCE b INTEGER OPTIONAL, c BOOLEAN OPTIONAL 如果 b 不选,c 的值为 TRUE,那么这个 SEQUENCE 的值的编码为:30 03 01 01 FF。如果 c 不选,b 的值为 10,那么这个 SEQUENCE 的编码为:30 03 02 01 0A。解码的时候根据标记是 01 还是 02 就可以确定 SEQUENCE 中实际哪一项没有选。 上面的例子是 SEQUENCE

42、 中的两项的类型不相同的情况,如果两项的类型相同,例如: SEQUENCE b INTEGER OPTIONAL, c INTEGER OPTIONAL b 和 c 都是 INTEGER,可以看出这个定义是有问题的。所以 SEQUENCE 中的各项一般是有 标记类型,例如: SEQUENCE b 0INTEGER OPTIONAL, c 1INTEGER OPTIONAL 如果 b 和 c 都选(值为 10 和 5) ,这个 SEQUENCE 类型的值的编码为:30 0A A0 03 02 01 0A A1 03 02 01 05。A0 是标记0的编码(上下文指定,并且为构造编码) ,A1 是

43、标记1的编码。如 果由某一项不选,解码的时候可以根据 A0 还是 A1 来区分到底哪一项没选。 实际上上面的编码中整数的标记和长度已经不重要了,所以可以把 SEQUENCE 定义为: SEQUENCE b 0IMPLICIT INTEGER OPTIONAL, c 1IMPLICIT INTEGER OPTIONAL 因为定义中用 IMPLICIT 修饰了 INTEGER,所以编码的时候 INTEGER 的标记和长度可以隐 含,如果 b 和 c 都选(值为 10 和 5) ,这个 SEQUENCE 类型的值的编码为:30 0A 80 01 0A 81 01 05。注意到标记0和标记1的编码分别

44、变为 80 和 81,这是因为这两个有标记类型的值的内容已 经是不可再分的原编码。 如果一个 ASN.1 的模块定义中的所有有标记类型的定义都使用 IMPLICIT,可以在模块定义的 开头使用 IMPLICIT TAG(见 2.2.1) ,这样模块体中所有的有标记类型都缺省使用了 IMPLICIT。 如果 SEQUENCE 的各项类型一致,语义上又没有区别,可以这样定义,例如: SEQUENCE SIZE(1.5) OF INTEGER 如果这个 SEQUENCE 的实际的值是 3 个整数(例如 3,10 和 128)的序列,那么他的编码是: 30 0A 02 01 03 02 01 0A 0

45、2 02 00 80 CHOICE 类型的编码类型的编码 CHOICE 类型的定义方式类似于 SEQUENCE,不过它没有一个自己的特殊标记,它的编码就 是它所定义的各项之一的编码。例如: CHOICE a 0INTEGER, b 1INTEGER 如果 CHOICE 选的是 a,整数值为 10,那么这个值的编码就是 a 的编码:80 01 0A(在这里已 经假定它所在的模块定义的开头使用了 IMPLICIT TAG) 。 2.4 INAP 中常用的中常用的 ASN.1 宏宏 除了使用 ASN.1 的基本语法规则来定义协议之外,ASN.1 还提供了宏定义的手段来描述协议 中的更多的概念。下面介

46、绍几种 INAP 中常用的宏定义。 OPERATION MACRO:= BEGIN TYPE NOTATION:= Argument Result Errors LinkedOperations VALUE NOTATION := value(VALUECHOICE localValue INTEGER, globalValue OBJECT IDENTIFIER) Argument:= ARGUMENT NamedType | empty Result:= RESULT ResultType | empty ResultType:= NamedType | empty Errors:= ER

47、RORS ErrorNames | empty LinkedOperations:= LINKED LinkedOperationsNames | empty ErrorNames:= ErrorList | empty ErrorList:= Error | ErrorList , Error Error:= value (ERROR)- - shall reference an error value | type- - shall reference an error type if no error value is specified LinkedOperation:= Operat

48、ionList | empty OperationList:= Operation | OperationList , Operation Operation:= value (OPERATION) - - shall reference an operation value | type - - shall reference an operation type if no operation value is specified NamedType:= identifier type | type END 上面是操作(OPERATION)宏的定义,它定义了一个框架,协议定义者用此来定义操作

49、。这 个框架说明了定义操作类型的语法和定义操作值的语法。操作的值可以采用一个整数来定义本地 值,也可以用一个对象标识来定义它的全局值。操作的类型定义较为复杂,它包括四个部分:参 数部分,返回结果部分,返回错误部分,链接操作部分: 参数部分可以为空,也可以是 ARGUMENT 关键字和一个已定义的数据类型。 返回结果部分可以为空也可以是 RESULT 关键字和返回结果的参数,而返回结果的参数 可以为空,也可以是一个已定义的数据类型。 返回错误部分可以为空,也可以是 ERROR 关键字和用花括号括起来的一些可能的错误名 字的列表。 链接操作部分可以为空,也可以是 LINKED 关键字和用花括号括起

50、来的一些可能的链接 操作名字的列表。 操作的几个要素是否为空决定了操作的类别,使得操作分为 4 类: 1 类操作:操作执行正确有返回结果,操作执行错误有返回错误; 2 类操作:操作执行正确无返回信息,操作执行错误有返回错误; 3 类操作:操作执行正确有返回结果;操作执行错误无返回信息; 4 类操作:操作执行正确和错误都无返回信息。 ERROR MACRO:= BEGIN TYPE NOTATION:= Parameter VALUE NOTATION := value(VALUE CHOICE localValue INTEGER, globalValue OBJECT IDENTIFIER) Parameter:= PARAMETERNamedType | empty NamedType:= identifier type | type END 上面是错误(ERROR)宏

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论