基本编码规则(BER)---SNMP

本文详细介绍了简单网络管理协议(SNMP)中使用的BER(Basic Encoding Rule)编码方法。BER编码包括标识域、长度域及值域三部分,文中通过实例解释了不同数据类型的BER编码方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本编码规则(BER)

SNMP使用的编码方法是BER(Basic Encoding Rule)。BER是一种编码规格说明,描述如何将 ASN.1 类型的值编码成字节串(string of octets)的方法
        SNMP使用的编码方法是BER(Basic Encoding Rule)。BER的数据都由三个域构成:标识域(tag)+长度域(length)+值域(value)。简称TLV格式。在ASN.1中,也称为Identifier-length-content(ILC).

  1. 标识域(tag):指明数据的类型,占用1个字节,常见的类型有:
    #define BER_TYPE_BOOLEAN				0x01
    #define BER_TYPE_INTEGER				0x02
    #define BER_TYPE_BIT_STRING				0x03
    #define BER_TYPE_OCTET_STRING				0x04
    #define BER_TYPE_NULL					0x05
    #define BER_TYPE_OID					0x06
    #define BER_TYPE_SEQUENCE				0x30
    #define BER_TYPE_COUNTER				0x41
    #define BER_TYPE_GAUGE					0x42
    #define BER_TYPE_TIME_TICKS				0x43
    #define BER_TYPE_NO_SUCH_OBJECT				0x80
    #define BER_TYPE_NO_SUCH_INSTANCE			0x81
    #define BER_TYPE_END_OF_MIB_VIEW			0x82
    #define BER_TYPE_SNMP_GET				0xA0
    #define BER_TYPE_SNMP_GETNEXT				0xA1
    #define BER_TYPE_SNMP_RESPONSE				0xA2
    #define BER_TYPE_SNMP_SET				0xA3
    #define BER_TYPE_SNMP_GETBULK				0xA5
    #define BER_TYPE_SNMP_INFORM				0xA6
    #define BER_TYPE_SNMP_TRAP				0xA7
    #define BER_TYPE_SNMP_REPORT				0xA8
    
  2. 长度域(length):指明值域的长度,长度不等,一般为一到三个字节。其格式可分为短格式(后面的值域长度<=127),长格式.

             2.1 短格式

 

                     length=30=>1E(30没有超过127,长度域为0001 1110)

             2.2 长格式

             长格式的表示方法: 1(1bit) K(7bit) K个八位组长度(K Byte)

            length=169=>81 A9(169超过127,长度域为 1000 0001 1010 1001,169是后8位的值,前8位的第一个1表示这是长格式的表示方法,前8位的后7位表示后面有多少个字节表示针对的长度,这里,是000 0001,后面有一个字节表示真正的长度,1010 1001是169,
 length=1500=>82 05 DC(1000 0010 0000 0101 1101 1100,先看第一个字节,表示长格式,后面有2个字节表示长度,这两个字节是0000 0101 1101 1100 表示1500)

     3.    值域(value)

           1. 整型Integer的编码 integer::=0x02 length{byte}* (*表示重复),最高位代表符号位,去掉多余的0。

               例: 1500=>02 02 05 DC 
                     40000=>02 03 00 9C 40

           2. 字符串类型的编码 string::=0x04 length{byte}* 例如:04 06 70 75 62 6c 69 63表示字符串public

           3.空类型的编码 null::=0x05 0x00

           4.对象标识ObjectID(oid)编码 SNMP服务器维护的所有管理信息库(MIB)对象采用ObjectID表示,其编码规则如下:

           objectID::=0x06  length  {subidentifier}*  

        (1) subidentifier::= {leadingbyte}* lastbyte    
        (2) leadingbyte::=1 7bitvalue      
        (3) lastbyte::=0 7bitvalue 
        (4) 首两个ID被合并为一个字节X*40+Y     
        虽然规则很多,但由于大多数子对象标识在0~127,只需按规则(1)、(4)即可;当子对象标识大于127,则按规则(2)、(3)、将其分解为多个字节,最后一个字节的高位为0,其余字节的高位为1

                                            

       如:1.3.6.1.810.1,根据规则(5),首两个子对象标识1.3被合并为2B(1 *40 +3=40+3=43); 子对象标识810超过127,根据规则(2)、(3)将其拆分为两个字节86 2A (810=11 0010 1010==>1000  0110  0010  1010);
   整个MIB被编码为:0x06 0x06 0x2b 0x06 0x01 0x86 0x2a 0x01。

       如:1.2.840.113549 最终编码如下:06 06 2a 86 48 86 f7 0d

      5.sequence组合类型的编码 sequence::=0x30 length{asndata}* 如:30 05 02 01 10 05 00表示一个sequence结构,内含两个成员,其中一个为整型,另一个为空类型(NULL)。

 

摘 要 I ABSTRACT II 第1章 绪论 1 1.1 ASN.1概述 1 1.2 ASN.1系列标准 1 1.3 ASN.1编解码的应用与发展前景 2 1.4论文章节结构组织 2 第2章 ASN.1词汇及词法约定 3 2.1 字符集 3 2.2 词项 3 2.3 本章小结 4 第3章 ASN.1数据类型定义 5 3.1 简单数据类型 5 3.1.1 布尔类型 5 3.1.2 空类型 5 3.1.3 整数类型 6 3.1.4 枚举类型 6 3.1.5 实数类型 7 3.1.6 位串类型 7 3.1.7 八位位串类型 8 3.2构造类型 8 3.2.1 序列类型 8 3.2.2 单序列类型 9 3.2.3 集合类型 10 3.2.4 单集合类型 10 3.3 本章小结 11 第4章 ASN.1BER编码规则 12 4.1 ASN.1BER数据值的编码结构 12 4.1.1标识符八位位组 12 4.1.2长度八位位组 13 4.1.3内容八位位组 14 4.1.4内容结束八位位组 14 4.2简单数据类型的编码 14 4.2.1 布尔值的编码 14 4.2.2 空值的编码 14 4.2.3 整数值的编码 15 4.2.4 枚举值的编码 16 4.2.5 实数值的编码 16 4.2.6 位串值的编码 18 4.2.7 八位位串值的编码 18 4.3 构造类型的编码 18 4.3.1 序列值的编码 18 4.3.2 集合值的编码 19 4.3.3 单序列值的编码 19 4.3.4 单集合值的编码 20 4.4本章小结 20 第5章 基于ASN.1BER规则的解码实现 21 5.1 布尔值的解码 21 5.2 空值的解码 23 5.3 整数值的解码 24 5.4 枚举值的解码 27 5.5 位串值的解码 27 5.6 八位位串值的解码 29 5.7 实数值的解码 30 5.8 构造类型解码 32 5.8.1 序列值的解码 32 5.8.2 单序列值的解码 35 5.8.3 集合值的解码 35 5.8.4 单集合的解码 35 5.9 解码系统设计流程图 37 5.10本章小结 38 第6章 基于ASN.1 BER规约的可视化编解码系统及通信 39 6.1 ASN.1BER可视化编解码系统 39 6.2编解码系统通信的实现 40 6.3编解码系统的测试 41 6.4本章小结 43 第7章 总结 44 7.1主要内容回顾 44 7.2本次设计的不足和进步完善 44 致谢 46 参考文献 47 附录A 外文翻译-原文部分 48 附录B 外文翻译-中文译文 56
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值