




已阅读5页,还剩56页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 抽象语法标记 1 1ASN 1的定义 ASN 1是AbstractSyntaxNotationOne的缩写 翻译成中文就是 抽象语法标记 ASN 1是一种数据对象描述标准 包括数据描述语言和数据编码规则两部分 作为一个国际标准 ASN 1主要应用在通信协议的具体表示上 两个不同系统之间通信 可以预先使用ASN 1的数据类型 其中 在SNMP中定义SNMP的协议数据单元PDU和管理对象MIB的格式就用到ASN 1 1 2ASN 1的基础 ASN 1定义的数据类型分为简单类型和结构类型 它不同于其他高级语言 它是一种数据描述语言 只定义数据类型 且每种数据类型都有对应的传输编码 1 2 1类型和值 类型分为 简单类型 结构类型 定义类型和其他类型 1 简单类型 INTEGER整型BOOLEAN布尔型REAL实型OCTETSTRING字节串型OBJECTIDENTIFIER标识符型ENUMERATED枚举型NULL空类型 2 结构类型 将已知类型按照一定的结构组织起来 形成的一种更复杂的数据类型 组成结构类型的已知类型称为结构类型的组件 4种结构类型 SET集合结构SEQUENCE序列结构SETOF元素相同的集合结构SEQUENCEOF元素相同的序列结构 3 其他类型CHOICE选择类型ANY任意一种已知类型 上面所讲的类型都是ASN 1标准中已定义好的 所以又称为ASN 1内置类型 一般使用时 用户可利用这些类型再定义满足自己需求的类型 定义类型时 需要为类型确定一个名字以便利用它 类型名又称为类型引用 用户定义类型并没有产生新的类型 只是为ASN 1定义了一个新的类型引用 值是需要处理的数据 必须属于某个类型 类型定义 Age INTEGER值定义 ageAge 25使用简单类型定义结构类型SampleType SampleType SEQUENCE nameOCTETSTRINGmarriedBOOLEANageINTEGER 该结构类型的3个组件类型分别为OCTETSTRING BOOLEAN和INTEGER下面为该类型实例赋值 sampleSampleType SEQUENCE name MARY H marriedTRUE age28 1 2 2符号和命名约定 在ASN 1中 可以出现的字母符号有以下几种 26个大写英文字母A Z26个小写英文字母a z10个阿拉伯字母0 9符号 和 其中 英文字母区分大小写 ASN 1的命名约定 1 2 3基本符号和关键字 1 类型引用 即类型名 要求符合类型名命名标准 不能和ASN 1标准中的关键字和保留字相同 2 标识符 用来标识一个特定的值或类型 3 值引用 即值名 要求符合值名的命名规则 与标识符的命名规则相同 要根据上下文确定是值引用还是标识符 4 模块引用 即模块名 要求符合模块名命名标识 根据上下文确定是模块引用还是类型引用 5 空标识符 出现空标识符的地方不含任何字符 6 数字 一位或多位数字 除单个数字外 第一个数字不能为0 7 二进制串 单引号引起的0个或多个0 1组成的序列 后缀为B 如 0110100 B 8 十六进制串 单引号引起的0个或多个0 9A F组成的序列 后缀为H 6AB9324 H 9 字节字符串 双引号引起来的0个或多个字节序列 如序列中出现双引号符号本身 需用双引号引起来 10 单符号 和 单字符 意义根据上下文确定 可作为终结符使用 关键字为ASN 1语言本身保留使用的符号 具有特定的意义 一般不允许使用 如BOOLEAN INTEGER BIT STRING SETOCTET NULL PRESENT等 1 2 4ASN 1标签 ASN 1的类型是为了应用程序通信 因此 除了CHOICE和ANY类型 这两种类型最终被归结为别的类型 其他的ASN 1类型都有传输标识 称为类型标签 Tag 标签用一个字节表示 包括3部分 依次是类别 2位 P C指示位 1位 和标志号 Tagnumber 5位 1 类别ASN 1类型分为4个大的类别 通用类 UNIVERSAL ASN 1的所有内置类型都属于通用类型 应用类 APPLICATION 应用类和某一具体的应用领域有关 只在该应用领域内才有意义 在不同的应用领域 两个不同类型可以有相同的Tag 但意义不同 上下文有关类 CONTEXT SPECIFIC 只存在于结构类型中 用于区分在一个结构中可能引起混淆的组件 私有类 PRIVATE SNMP中没用到它 2 P C指示位 在Tag中占一位 用于指明该类型是简单类型还是结构类型3 标志号 在Tag中占5位 是个正整数 用来唯一区分属于同一类别中的不同类型 类型所属类别 P C指示位和所属类别一起构成类型的Tag Tag是区分类型的关键所在 不论类型符号形式如何定义 如果它们的Tag相同则认为是同一种类型 通用类类型的Tag由ASN 1定义 应用程序类 上下文有关类和私有类都属于用户定义的类型 它们的Tag在定义时确定 1 3常用类型 1 3 1简单类型1 整数类型 包括正的和负的任意整数以及02 逻辑类型 只有两个值可选 true和false3 空类型 只有一个值null4 OCTECTSTRING 字节串类型 0或多个字节组成的序列5 OBJECTIDENTIFIER 对象标识符类型 可以用来标识任意的信息实体 1 3 2结构类型结构类型的SEQUENCE和SEQUENCEOF在SNMP中用到了 1 SEQUENCE结构类型 组件可以是0个或多个不同类型组成的有序序列2 SEQUENCEOF构造类型 由同一类型组成的有序序列 1 3 3其他类型1 CHOICE是选择类型 在列举的类型序列中选择一种 2 ANY是任意类型 可以是ASN 1或其他标准定义的任意一种类型 这两种类型的值符号等同于取代他们的具体类型 1 4标签类型和子类型 1 4 1标签类型一般地 用户在定义类型时 除了名字外 Tag 传输编码都继承基础类型原有的定义 标签类型 用户在利用已有的类型定义新类型时 也为新类型定义新的Tag 如Age INTEGER 类型Age也是整型 Tag 传输编码都不改变 标签定义的间接方式的语法为 类别名 标识号 IMPLICITIpaddress APPLICATION0 IMPLICITOCTETSTRING SIZE 4 Ipaddress的基础类型是OCTETSTRING 但它的Tag已经不再是基础类型的Tag了 而是新分配了一个 另外 在结构类型SET中 不同的组件经常有相同的类型 为了避免混淆 也需要将这些组件定义为标签类型 1 4 2子类型如果类型A的值集合是另一个类型B的值集合的子集 那么类型A称为类型B的子类型 如Subint INTEGER 0 255 这样的子类型称为简单子类型 还有形式复杂的子类型 复杂子类型使用如下的关键字 SIZE FROM INTERSECTION UNION EXCEPT ALL如INTEGER ALLEXCEPT 1 20 IA5String yes UNION no UNION maybe PrintableString FROM a b c d PrintableString SIZE 10 PrintableString SIZE 1 10 1 5对象标识符类型 对象命名树与OID 2 基本编码规则 ASN 1用来定义数据类型和值 传输语法是为不属于同一类型的值制订一套标准的编码格式 BER是一种传输语法 它将数据按ASN 1定义的数据类型格式进行二进制编码 解码 然后进行传输 BER将数据表示为标志 长度 内容 T L V 如果是结构类型 则值域包含多个T L v 2 1Tag字节对于Tag字节 从左到右 最高两位表示该类型所属的4大类别 第三位为P C位 指明是简单类型还是复杂类型 余下的5位指明类型的标志号 2 2长度字节1 长度确定编码 分为短格式和长格式 长度小于等于127 用短格式 只占一个字节 字节第一位为0 后7位表示长度值 否则 用长格式 第一字节的最高位为1 后7为随后表示长度的字节数 2 长度不确定编码 长度字节最高位为 1 后7位为 0 以后为值编码 后跟两个所有位都为 0 的字节 作为结束符号 2 3值编码2 3 1简单类型1 整数类型 通用类简单类型 Tag字节格式为02H 长度字节根据实际值编码后占用的字节数设置 值编码用二进制补码表示 2 字节串 值部分不做任何编码 如下以ASC 码表示的 MIB 4D4942 的编码格式 值TLVMIB04034D4942 3 对象标识符对象标识符编码时 格式为通用类简单类型 Tag为06H 长度字节根据实际值编码后占用的字节数设置 值编码部分是组成标识符的每个整数按标识符中出现的顺序依次排列 对象标识符前两个整数值一般较小 为节省编码量 BER规定将这两个整数一起编码 设X Y分别表示组成标识符的前两个整数 则传输是这两个整数由40 X Y得到的整数表示 设n表示得到的结果 则OID前两个整数与n之间的关系 对象标识符 1361211 的完整编码格式如下值TLV 1361211 06062B06010201014 null类型 编码只有一种格式值TLVNull0500 2 3 3结构类型结构类型由组件构成 它没有自己的值 即结构类型的值由它的组件的值组成 每个组件可以是简单类型 也可以是另外定义的结构类型 但最终 所有的结构类型总会归结为基本的简单类型 其编码形式为 结构类型Tag T 结构类型长度 L 组件1编码 组件n编码 结构类型遇到最多的类型是序列类型 包括SEQUENCE和SEQUENCEOF 这两种结构类型都属于通用类结构类型 tag为30H 2 4显示和隐式标签ASN 1共4类 简单类型 结构类型 标签类型和特殊类型 CHOICE和ANY 前两种类型有固定的Tag 后两种没有 他们的Tag最终归结为某种特定的已知类型 标签类型的实质是改变原有类型的标签 值编码方式不变 如Counter APPLICATION1 IMPLICITINTEGER 0 42945894 类别为应用程序 01 简单类型 0 标志号1 故Tag值为41H 编码格式为TLv010000010000000100000000标志41H长度01H内容00H 2 5综合实例2 5 1从PDU结构可以看出 它有3个结构层次 第一层3部分 前两个固定为一个整数和字符串 可用简单类型表示 第三部分是结构类型 Message SEQUENCE versionINTEGER communityOCTETSTRING dataPDUs PDUs CHOICE get requestGETRequest PDU PDU第二部分 GETRequest PDU 0 IMPLICITSEQUENCE request idINTEGER error statusINTEGER error indexINTEGER Variable bindingsVarBind VarBind SEQUENCE nameOBJECTIDENTIFIER valueNULL 2 5 编码分析 SNMP报文解析 000050784c70c3e3000d87cbd9d808004500PxLp E 001044a74a000080115e8d0a0a100f0a0a D J 002010af0aed00a100305c8c302602010004 0 0 0030067075626c6963a11902020099020100 public 0040020100300d300b06072b060102010101 0 0 00500500 SNMP报文解析 000050784c70c3e3000d87cbd9d808004500PxLp E 001044a74a000080115e8d0a0a100f0a0a D J 002010af0aed00a100305c8c302602010004 0 0 0030067075626c6963a11902020099020100 public 0040020100300d300b06072b060102010101 0 0 00500500 30 是第一个字节 表示SNMP消息是ASN 1的SEQUENCE类型 SNMP报文解析 000050784c70c3e3000d87cbd9d808004500PxLp E 001044a74a000080115e8d0a0a100f0a0a D J 002010af0aed00a100305c8c302602010004 0 0 0030067075626c6963a11902020099020100 public 0040020100300d300b06072b060102010101 0 0 00500500 第二个字节表示SNMP消息的长度是26 10 38 SNMP报文解析 000050784c70c3e3000d87cbd9d808004500PxLp E 001044a74a000080115e8d0a0a100f0a0a D J 002010af0aed00a100305c8c302602010004 0 0 0030067075626c6963a11902020099020100 public 0040020100300d300b06072b060102010101 0 0 00500500 第一个组件表示版本号 020100是一个TLV组 02表示整形的Tag字节 01表示长度为一个字节 00表示值为0 所以SNMP版本号v1为0 TLV SNMP报文解析 000050784c70c3e3000d87cbd9d808004500PxLp E 001044a74a000080115e8d0a0a100f0a0a D J 002010af0aed00a100305c8c302602010004 0 0 0030067075626c6963a11902020099020100 public 0040020100300d300b06072b060102010101 0 0 00500500 TLV Tag为04H 表示为通用类型的OCTETString类型 SNMP报文解析 000050784c70c3e3000d87cbd9d808004500PxLp E 001044a74a000080115e8d0a0a100f0a0a D J 002010af0aed00a100305c8c302602010004 0 0 0030067075626c6963a11902020099020100 public 0040020100300d300b06072b060102010101 0 0 00500500 TLV 表示长度为6字节 SNMP报文解析 000050784c70c3e3000d87cbd9d808004500PxLp E 001044a74a000080115e8d0a0a100f0a0a D J 002010af0aed00a100305c8c302602010004 0 0 0030067075626c6963a11902020099020100 public 0040020100300d300b06072b060102010101 0 0 00500500 TLV public 的ASCII值 表示团体名为public SNMPPDU解析 000050784c70c3e3000d87cbd9d808004500PxLp E 001044a74a000080115e8d0a0a100f0a0a D J 002010af0aed00a100305c8c302602010004 0 0 0030067075626c6963a11902020099020100 public 0040020100300d300b06072b060102010101 0 0 00500500 Tag a1H 表示PDUtype为GetNextRequest T SNMPPDU解析 000050784c70c3e3000d87cbd9d808004500PxLp E 001044a74a000080115e8d0a0a100f0a0a D J 002010af0aed00a100305c8c302602010004 0 0 0030067075626c6963a11902020099020100 public 0040020100300d300b06072b060102010101 0 0 00500500 表示SNMPPDU的长度是19H L SNMPPDU解析 000050784c70c3e3000d87cbd9d808004500PxLp E 001044a74a000080115e8d0a0a100f0a0a D J 002010af0aed00a100305c8c302602010004 0 0 0030067075626c6963a11902020099020100 public 0040020100300d300b06072b060102010101 0 0 00500500 TLV 02H表示ASN 1的通用类型INTEGER SNMPPDU解析 000050784c70c3e3000d87cbd9d808004500PxLp E 001044a74a000080115e8d0a0a100f0a0a D J 002010af0aed00a100305c8c302602010004 0 0 0030067075626c6963a11902020099020100 public 0040020100300d300b06072b060102010101 0 0 00500500 TLV 长度为2B SNMPPDU解析 000050784c70c3e3000d87cbd9d808004500PxLp E 001044a74a000080115e8d0a0a100f0a0a D J 002010af0aed00a100305c8c302602010004 0 0 0030067075626c6963a11902020099020100 public 0040020100300d300b06072b060102010101 0 0 00500500 TLV 02020099表示Requestid为0 x00000099 SNMPPDU解析 000050784c70c3e3000d87cbd9d808004500PxLp E 001044a74a000080115e8d0a0a100f0a0a D J 002010af0aed00a100305c8c302602010004 0 0 0030067075626c6963a11902020099020100 public 0040020100300d300b06072b060102010101 0 0 00500500 TLV ASN 1的INTEGER类型 SNMPPDU解析 000050784c70c3e3000d87cbd9d808004500PxLp E 001044a74a000080115e8d0a0a100f0a0a D J 002010af0aed00a100305c8c302602010004 0 0 0030067075626c6963a11902020099020100 public 0040020100300d300b06072b060102010101 0 0 00500500 TLV SNMPPDU解析 000050784c70c3e3000d87cbd9d808004500PxLp E 001044a74a000080115e8d0a0a100f0a0a D J 002010af0aed00a100305c8c302602010004 0 0 0030067075626c6963a11902020099020100 public 0040020100300d300b06072b060102010101 0 0 00500500 TLV 020100表示error statue为0 SNMPPDU解析 000050784c70c3e3000d87cbd9d808004500PxLp E 001044a74a000080115e8d0a0a100f0a0a D J 002010af0aed00a100305c8c302602010004 0 0 0030067075626c6963a11902020099020100 public 0040020100300d300b06072b060102010101 0 0 00500500 TLV 020100表示error index为0 SNMPPDU解析 000050784c70c3e3000d87cbd9d808004500PxLp E 001044a74a000080115e8d0a0a100f0a0a D J 002010af0aed00a100305c8c302602010004 0 0 0030067075626c6963a11902020099020100 public 0040020100300d300b06072b060102010101 0 0 00500500 TLV ASN 1的SEQUENCE类型 长度为13B SNMPPDU解析 000050784c70c3e3000d87cbd9d808004500PxLp E 001044a74a000080115e8d0a0a100f0a0a D J 002010af0aed00a100305c8c302602010004 0 0 00
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年电池电源行业当前竞争格局与未来发展趋势分析报告
- 2025年检验检测行业当前市场规模及未来五到十年发展趋势报告
- 支委会的召开课件
- 操作安全知识培训课件
- 2025年部编版新教材语文七年级上册期末复习计划
- (2025)中小学教师资格证考试教育学心理学试题库及参考答案
- 2025全国企业员工全面质量管理知识考试试题库及参考答案
- (2025)物权法试题库及参考答案
- 2025年保育员(中级)操作证考试试题及答案
- 2024年土木工程师:“房屋建筑及施工”专业知识试题及答案
- 2024城市电缆线路岩土工程勘察规范
- 变电站巡检维护服务方案
- 华为质量回溯(根因分析与纠正预防措施)模板
- GB/T 23781-2024黑芝麻糊质量通则
- 2023版评审准则和CNAS对照表
- 收养申请人情况声明
- CATIA CAA 二次开发详细教程(11) 程序的发布
- 分布式光伏发电项目可行性分析报告(方案)讲解演示模板ppt课件-图文
- 高空作业安全刷漆施工方案
- 医疗康养项目运营方案
- 保密档案培训课件
评论
0/150
提交评论