第三章 ASN.1
抽象语法标记1(ASN.1):用于提供正式、无歧义和精准的规则
巴克斯范式(BNF):""
双引号中的字符代表自己的本身<>
尖括号内包含必选项[]
方括号内包含可选项{}
大括号内包含可重复0至无数次的项|
竖线表示左右任选一项,相当于or::=
表示被定义的意思
数据类型
1.书写的布局是无效的,多个空格和制表符、空行等效于 一个空格。但是在定义符号 ::= 中不能有分隔符,否则不 能正确处理。
2.带小数点的小数形式不能在ASN.1中直接使用,在ASN.1 中实数实际定义为三个整数:尾数、基数和指数。
3.注释以两个连字符“—”开始,结束于行的结尾或者该行 中另一个双连字符。
4.用于表示值和字段的标识符、类型名和模块名由大小写 字母、数字和连字符“-” 组成。不能以连字符“-”结尾, 不能出现两个连字符(注释格式),不能出现下划线“_”。
5.值定义标识符以小写字母开头。
6.类型名和模块名以大写字母开头。
7.ASN.1定义的内部类型全部用大写字母表示。 8.关键字全部用大写字母表示。
编码规则
1.基本编码规则Basic Encoding Rules (BER)
2.规范编码规则Canonical Encoding Rules (CER)
3.唯一编码规则Distinguished Encoding Rules (DER)
4.XML编码规则XML Encoding Rules (XER)
5.压缩编码规则Packed Encoding Rules (PER)
6.通用串编码规则Generic String Encoding Rules (GSER)
7.ECN
ASN.1 编程
没仔细看,我现在也不会= =
BER 编码
以TLV方法进行编码,分为3段:
T标记、L长度、V值
标记
universal
1:bool
2:integer
3:bit string
4:octet string
5:null
6:object identifier
16:sequence
16:sequence-of
无标记:choice
无标记:ANY
tag组成:
2bit:标签类
00 universal
01 application
10 context specific
11 private
1bit:
0 简单类型
1 构造类型
5bit:
标签
tag标签值小于30时:仅在一个八位组中编码
tag标签值大于30时:标签值5位全部置1
每个后继八位组,左边第一位表示是否为最后一个八位组,1表示不是,0表示是
例如标签值91513(10110010101111001)
改写为:
xxx11111 10000101 11001010 01111001
再例如标签值6(110)
写为
xxx00110
长度
当长度小于127时:0xxx xxxx即可
当长度大于127时:
第一个八位组:1+后继八位组个数
例如:255
1000 0001 1111 11111
再如:256
1000 0010 0000 00001 0000 0000
又如:5
0000 0101
常见编码
BOOLEAN编码
tag:0000 0001(见标记中的universal)
length:0000 0001
vaule:
true: 1111 1111
false: 0000 0000
即
true: 01 01 00
false: 01 01 ff
字符串类型的编码
tag:0000 0100
length:后继八位组的个数
vaule:字符串的ascii码
例如:public
tag:04(见标记中的universal)
length:06
vaule:70 75 62 6c 69 63
最终答案:
04 06 70 75 62 6c 69 63
比特串类型的编码
在bit串前增加一个八位组,取值0~7,表名最后补位的个数。补0/1由发送方决定
例如:1011011101011
1011 0111 0101 1
故最后需要补3位
1011 0111 0101 1xxx
假设补0(也可补1,由发送方决定)
1011 0111 0101 1000
计数八位组:0000 0011
tag:0000 0011(见标记中的universal)
length:后继八位组个数
最终答案
03 03 03 B7 58
再如:10101
补位后
1010 1000
计数八位组
0000 0011
最终答案
03 02 03 A8
十六进制字节串类型的编码
tag:04
length:后继八位组个数
例如:
0A1B
答案:
04 02 0A 1B
再如:
01 23 45 67 89 ab cd ef
答案
04 08 01 23 45 67 89 ab cd ef
又如:ACE
答案:
04 02 AC E0
INTEGER类型的编码
若value中的最高位为1,0则需在前面补全一个全0的八位组
对于负数,value的最高位为1
tag:02
length:后继八位组的个数
对于正数
例如:64
64的二进制为:
0100 0000
故此答案为:
02 01 40
再如:128
二进制为:
1000 0000
故此答案为
02 02 00 80
对于负数
绝对值二进制+按位取反+末位加1即可
例如:
-64
绝对值的二进制为
0100 0000
按位取反
1011 1111
末位加1
1100 0000
所以答案为
02 01 C0
再如:-257
二进制为:0000000100000001
按位取反
1111 1110 1111 1110
末位加一
1111 1110 1111 1111
答案为
02 02 FE FF
快捷运算方法
对于大数,强行取余倒叙排列计算2进制肯定太慢了,这里选择拆分成256(256的幂数)的因子形式
例如:
49468=193256+60
我们知道
193为1100 0001即C1
256为1 0000 0000即100
60为0011 1100即3C
故此可以写成
`C1100+3C因此编码直接可以写为 C1 3C 又因为最高位为1,而该数是正数,所以补一个全0的八位组 最终答案: 02 03 00 C1 3C 再如负大数:-49769 由于256^2=6553620 但是负数最高位需要为1,作为标志位 因此256^2最大只能表示-32768 故此选择256^3,最大可表示-8388608 然后我们可以将256^3-49769 得到16727447 即
255256^2+61256+151`
得到编码
255 61 151
即
FF 3D 97
故此答案为
02 03 FF 3D 97
解码
解码也很容易
先去除tag和length
首先看最高位是否为1
若为1即为负数
否则为正数
例如:02 02 96 46
我们计算出96 46为38470
由于其最高位为1
所以我们用它去减2^16,即可得到结果-27066
对象标识符编码
tag:06
首两个id:X40+Y
如果有大于127的项,需要进行拆分
即最后一个字节的最高位为0,其余字节最高位为1
例如:810 = 11 0010 1010
即从后往前,8个一组
由于要补1或0,所以7个一组
1000 0110 0010 1010
所以答案为:86 2A
例如题目为:
1 3 6 1 810 1
首先将1,2项合并为
`140+3=43`
即
0010 1011
即
2B
所以为
2B 6 1 810 1
然后将超过127的部分拆分
即
2B 06 01 86 2A 01
最终结果为
06 06 2B 06 01 86 2A 01
空值类型编码
05 00
就这么多
sequence组合类型的编码
tag:30
length:后继八位组个数
value:每个类型按之前的排即可(tag+length+vaule)
set集合类型的编码
tag:31
length:后继八位组个数
BER的不足
带来了大量的冗余,增加了通信量的开销
主要出现在TLV三个字段的每个部分
增加了约50%的数据
第四章 IETF网络管理模型
本章个人认为主要讲了tcp/ip的网络管理方式和编程
网络管理的发展
ICMP协议
1.提供了路由器与主机、主机与主机直接传送控制信息的方法
2.Echo / Echo Reply(ping)
测试网络时延、网络设备可达性
SGMP协议
标志着TCP/IP专门管理工具的出现
CMOT协议(CMIP over TCP/IP)
基于TCP/IP协议的公共管理信息协议
CMOT协议集的组成:
1.关联控制服务元素(ISO ACSE)
2.远程操作服务元素(ISO DIS ROSE)
3.通用管理信息协议(ISO CMIP)
4.轻量级表示协议(LPP)
5.用户数据报协议(UDP)
6.传输控制协议(TCP)
7.网际协议(IP)
SNMP协议
特点:简单,容易实现且成本低
SNMP协议
发展历程
RMON
1.远程监控(RMON)为网络管理者提供了监控整个子网的能力,而不是各个单独设备的能力,是SNMP向互联网管理过渡的重要步骤。
2.对基本的SNMP MIB进行了扩充,可以提供有关互联网管理的主要信息。
SNMPv2
1.在管理信息结构和功能上对SNMP进行了扩充增加了安全性
2.1996年:去掉了SNMPv2的安全特性
SNMPv3
全面引入安全机制
三者相辅相成,相互兼容
SNMP网络管理模型
SNMP网络管理模型包括四个关键元素:
管理站、代理者、管理信息库、网络管理协议
管理站:
一般由专用设备构成,配置manager实体和一组管理应用程序,提供网络的故障、配置、计费、性能、安全等管理功能
代理者
装备了SNMP的平台
代理者对来自管理站的信息请求和动作请求进行应答,并随机地为管理站报告一些重要的意外事件。
管理信息库MIB
1.每一个被管理的资源就是一个对象,被称为managed object(MO)
2.各个代理系统中被管对象的集合构成该系统的MIB
管理站通过读取MIB中的对象的值来进行网络监控
在每一个网络节点(NE)都有自己私有的MIB
1.监视设备状态:通过读取MIB中的MO的值
2.控制设备:通过更改MIB中的MO的值
网络管理协议SNMP
SNMP只有两种基本的管理功能:
1.“读”操作,用get报文来检测各被管对象的状况;
2.“写”操作,用set报文来改变各被管对象的状况。管理站采用轮询的方式,SNMP 管理进程定时向被管理设备周期性地发送探询信息,对各个代理中的管理信息进行访问。
轮询的好处:
1.可使系统相对简单。
2.能限制通过网络所产生的管理信息通信量。
简单轮询方式的缺点
1.被管设备太多,则监测周期过长;
2.有些数据不需要,浪费通信资源。
陷阱引导轮询(Trap-directed polling)
1.管理站以不太频繁的周期(1天1次)进行一次初始化。
2.在初始化期间,轮询所有代理,将需要监测的所有关键信息读取出来;
3.有了基准以后,管理站便降低轮询频度;
4.当被管对象的代理检测到有事件发生时,就检查其门限值;
5.代理进程通过Trap消息方式只向管理进程报告达到某些门限值的事件,实现信息的过滤。
陷阱方式的好处:
1.仅在严重事件发生时才发送陷阱;
2.陷阱信息很简单且所需字节数很少。
SNMP是面向无连接的协议,管理站和代理之间没有维护中的连接,每次信息传递都是单独进行的,不同于CMIP请求和应答在一次连接中完成。且SNMP报文的传送开销较小
体系结构
非对称的二级体系结构
基本的SNMP体系结构是非对称的Manager/Agent两级结构
代管体系结构
由于利用SNMP网络管理需要管理站及其所有代理者支持UDP和IP
这限制了不支持TCP/IP协议的设备上的应用,同时很多小系统也不愿意承担维护SNMP、代理者软件和MIB的负担
为了容纳没有装载SNMP的设备,SNMP提出来代管(Proxy)的概念
RMON体系结构
1.RMON是一个中介代理,被置于管理站和代理之间,专门完成基于原始数据的信息计算
2.RMON的功能被分布式实现,从而大大补偿了网络集中管理的性能
多层体系结构
1.OSI是对称的。管理实体既可以是manager也可以是agent,结构易于扩展,有助于架构多层结构
2.SNMPv2/v3支持分层
SNMP管理信息模型
使用ASN.1描述被管对象和PDU
使用BER编码
通过传输层协议传送
管理信息结构SMI
宗旨是保持MIB的简单性和可扩展性
只允许存储标量和二维数组,不支持复杂的数据结构
MIB结构
管理信息库MIB使用一个层次型、结构化的形式,定义了一个设备可获得的网络管理信息。
这种层次树结构有3个作用:
1.表示管理和控制关系
2.提供结构化的信息组织技术
3.提供了对象命名机制
SMI的编码规则-BER
类别
1.通用类 00
2.应用类 00
3.上下文类 10
4.专用类 11SMI的数据类型两大分类
1.简单类型
1.1 integer
类别 00
格式 0
编号 00010
tag: 0x02
1.2 octet string
类别 00
格式 0
编号 00100
tag: 0x04
1.3 object identifier
类别 00
格式 0
编号 00110
tag: 0x06
1.4 null
类别 00
格式 0
编号 00101
tag: 0x05
1.5 sequence and sequence of
类别 00
格式 1
编号 10000
tag: 0x30
1.6 ipaddress
类别 01
格式 0
编号 00000
tag: 0x40
1.7 counter
类别 01
格式 0
编号 00001
tag: 0x41
1.8 gauge
类别 01
格式 0
编号 00010
tag: 0x42
1.9 timeticks
类别 01
格式 0
编号 00011
tag: 0x43
1.10 opaque
类别 01
格式 0
编号 00100
tag: 0x44
2.结构化类型
1.sequence
2.sequence ofd