6.6 简单网络管理协议 SNMP 6.6.1 网络管理的基本概念 网络管理包括对硬件、软件和人力的使用、综合与协调,以便对网络资源进行监视、测试、配置、分析、评价和控制,这样就能以合理的价格满足网络的一些需求,如实时运行性能,服务质量等。网络管理常简称为网管。 网络管理并不是指对网络进行行政上的管理。
网络管理的一般模型 被管设备 被管设备 因特网 被管设备 被管设备 A A A A 网管协议 被管设备 M 网络 管理员 管理站 A M —— 管理程序(运行 SNMP 客户程序) A —— 代理程序(运行 SNMP 服务器程序)
网络管理模型中的主要构件 管理站也常称为网络运行中心 NOC (Network Operations Center),是网络管理系统的核心。 管理程序在运行时就成为管理进程。 管理站(硬件)或管理程序(软件)都可称为管理者(manager)。 Manager 不是指人而是指机器或软件。 网络管理员(administrator) 指的是人。大型网络往往实行多级管理,因而有多个管理者,而一个管理者一般只管理本地网络的设备。
被管对象(Managed Object)。 网络的每一个被管设备中可能有多个被管对象。 被管设备有时可称为网络元素或网元。 在被管设备中也会有一些不能被管的对象。
代理(agent) 在每一个被管设备中都要运行一个程序以便和管理站中的管理程序进行通信。这些运行着的程序叫做网络管理代理程序,或简称为代理。 代理程序在管理程序的命令和控制下在被管设备上采取本地的行动。
网络管理协议 网络管理协议,简称为网管协议。 需要注意的是,并不是网管协议本身来管理网络。网管协议就是管理程序和代理程序之间进行通信的规则。 网络管理员利用网管协议通过管理站对网络中的被管设备进行管理。
客户服务器方式 管理程序和代理程序按客户服务器方式工作。 管理程序运行 SNMP 客户程序,向某个代理程序发出请求(或命令),代理程序运行 SNMP 服务器程序,返回响应(或执行某个动作)。 在网管系统中往往是一个(或少数几个)客户程序与很多的服务器程序进行交互。
网络管理的基本原则 若要管理某个对象,就必然会给该对象添加一些软件或硬件,但这种“添加”必须对原有对象的影响尽量小些。
SNMP 的指导思想 SNMP 最重要的指导思想就是要尽可能简单。 SNMP 的基本功能包括监视网络性能、检测分析网络差错和配置网络设备等。 虽然 SNMP 是在 TCP/IP 基础上的网络管理协议,但也可扩展到其他类型的网络设备上。
管理的系统架构:SNMP 的管理站和委托代理 整个系统必须有一个管理站。 管理进程和代理进程利用 SNMP 报文进行通信,而 SNMP 报文又使用 UDP 来传送。 若网络元素使用的不是 SNMP 而是另一种网络管理协议,SNMP 协议就无法控制该网络元素。这时可使用委托代理(proxy agent)。委托代理能提供如协议转换和过滤操作等功能对被管对象进行管理。
SNMP 的网络管理由三个部分组成 SNMP 本身 管理信息结构 SMI (Structure of Management Information) SMI 定义了命名对象和定义对象类型(包括范围和长度)的通用规则,以及把对象和对象的值进行编码的规则。 SMI 并不定义一个实体应管理的对象数目,也不定义被管对象名以及对象名及其值之间的关联。 管理信息库 MIB (Management Information Base)。 MIB 在被管理的实体中创建了命名对象,并规定了其类型。
6.6.2 管理信息结构 SMI SMI 的功能: (1) 被管对象应怎样命名; (2) 用来存储被管对象的数据类型有哪些种; (3) 在网络上传送的管理数据应如何编码。
SMI 规定所有被管对象必须在命名树上 根 itu-t (0) iso (1) iso/itu-t (2) org (3) dod (6) internet (1) 1.3.6.1 (iso.org.dod.internet) mgmt (2) mib-2 (1) 1.3.6.1.2.1 (iso.org.dod.internet.mgmt.mib-2) system(1) interface(2) at(3) ip(4) icmp(5) tcp(6) udp(7) egp(8) … … … … … … … … … ipInReceives(3) 1.3.6.1.2.1.4.3 (iso.org.dod.internet.mgmt.mib-2.ip.ipinreceives)
SMI 使用 ASN.1 SMI 标准指明了所有的 MIB 变量必须使用抽象语法记法 1(ASN.1)来定义。 SMI 既是 ASN.1 的子集,又是 ASN.1 的超集。 ASN.1 的记法很严格,它使得数据的含义不存在任何可能的二义性。 SMI 把数据类型分为两大类:简单类型和结构化类型。
基本编码规则 BER(Basic Encoding Rule) ISO 在制订 ASN.1 语言的同时也为它定义了一种标准的编码方案,即基本编码规则 BER。 BER 指明了每种数据类型中每个数据的值的表示。 发送端用 BER 编码,可将用 ASN.1 所表述的报文转换成唯一的比特序列。接收端用 BER 进行解码,得到该比特序列所表示的 ASN.1 报文。
用 TLV 方法进行编码 把各种数据元素表示为以下三个字段组成的八位位组序列: (1) T 字段,即标识符八位位组(identifier octet),用于标识标记。 (2) L 字段,即长度用八位位组(length octet),用于标识后面 V 字段的长度。 (3) V 字段,即内容八位位组(content octet),用于标识数据元素的值。
TLV 中的 T 字段 定义数据的类型 字节 1 可变 可变 数据元素 标记 T 长度 L 值 V 类 别 格 式 编 号 位 2 1 5
TLV 中的 L 字段 定义 V 字段的长度 指出 V 字段长度 = 2 字节 单字节的 L 字段 指出后续字节数 = 2 1 指出后续字节数 = 2 指出 V 字段长度 = 262 字节 多字节的 L 字段 1 1 1 1 1 后续字节数 = 2
TLV 中的 V 字段 定义数据的值 例如,INTEGER 15,其 T 字段是02, INTEGER 类型要用 4 字节编码。最后得出 TLV 编码为 02 04 00 00 00 0F。 又如 IPAddress 192.1.2.3,其 T 字段是 40,V 字段需要 4 字节表示,因此得出 IPAddress 192.1.2.3 的 TLV 编码是 40 04 C0 01 02 03。
6.6.3 管理信息库 MIB (Management Information Base)
6.6.4 SNMP 的协议数据单元和报文 SNMP的操作只有两种基本的管理功能,即: “读”操作,用 get 报文来检测各被管对象的状况; “写”操作,用 set 报文来改变各被管对象的状况。
SNMP 的探询操作 探询操作——SNMP 管理进程定时向被管理设备周期性地发送探询信息。 探询的好处是: 可使系统相对简单。 能限制通过网络所产生的管理信息的通信量。 但探询管理协议不够灵活,而且所能管理的设备数目不能太多。探询系统的开销也较大。如探询频繁而并未得到有用的报告,则通信线路和计算机的 CPU 周期就被浪费了。
陷阱(trap) SNMP 不是完全的探询协议,它允许不经过询问就能发送某些信息。这种信息称为陷阱,表示它能够捕捉“事件”。 这种陷阱信息的参数是受限制的。 当被管对象的代理检测到有事件发生时,就检查其门限值。代理只向管理进程报告达到某些门限值的事件(即过滤)。过滤的好处是: 仅在严重事件发生时才发送陷阱; 陷阱信息很简单且所需字节数很少。
SNMP 是有效的网络管理协议 使用探询(至少是周期性地)以维持对网络资源的实时监视,同时也采用陷阱机制报告特殊事件,使得 SNMP 成为一种有效的网络管理协议。
SNMP 使用无连接的 UDP SNMP 使用无连接的 UDP,因此在网络上传送 SNMP 报文的开销较小。但 UDP 不保证可靠交付。 在运行代理程序的服务器端用熟知端口 161 来接收 get 或 set 报文和发送响应报文(与熟知端口通信的客户端使用临时端口)。 运行管理程序的客户端则使用熟知端口 162 来接收来自各代理的 trap 报文。
SNMPv1 定义的协议数据单元类型(无编号 4) PDU PDU名称 用途 编号 0 GetRequest 用来查询一个或一组变量的值 1 GetNextRequest 允许在 MIB 树上读取下一个变量, 此操作可反复进行 2 Reponse 代理向管理者或管理者向管理者发送 响应 3 SetRequest 对一个或多个变量值进行设置 5 GetBulkRequest 管理者从代理读取大数据块的值 6 InformRequest 管理者从另一管理者读取代理的变量 7 SNMPv2Trap 代理向管理者报告异常事件 8 Report 管理者之间报告某些差错
SNMP 的报文格式 IP 数据报 UDP 数据报 SNMP 报文 SNMP 报文的数据部分 … 首部 变量绑定 有关加密信息 的字段 20 字节 8 字节 IP 首部 UDP 首部 安全 参数 版本 首部 SNMP 报文的数据部分 … 上下文引擎 ID 上下文名 PDU 类型 请求 ID 差错状态 差错索引 名 值 名 值 首部 变量绑定 有关加密信息 的字段 SNMP PDU
Get-request 报文 ASN.1 编码 GetRequest-PDU request-ID T A0 1F GetRequest L 1F GetRequest -PDU request-id error-status error-index variable-bindings T INTEGER L 04 V 05 AE 56 02 T INTEGER L 01 V 00 T INTEGER L 01 V 00 T SEQUENCE OF L 0E VarBind request-ID T SEQUENCE L 0C name value T OBJECT IDENTIFIER L 09 V 01 03 06 01 02 01 01 01 00 T NULL L 00 1. 3. 6. 1. 2. 1. 7. 1. 0