应用层——SNMP

网络管理的基本概念

网络管理包括对硬件、软件和人力的使用、综合与协调,以便对网络资源进行监视、测试、配置、分析、评价和控制,这样就能以合理的价格满足网络的一些需求,如实时运行性能,服务质量等。网络管理常简称为网管。

网络管理并不是指对网络进行行政上的管理。

网络是一个非常复杂的分布式系统。这时因为在网络上有很多不同厂家生产的、运行着多种协议的节点,而这些节点还在相互通信和交换信息,有时还需要把一些新的状态信息写入到这些节点上。

网络管理的五大功能

  • 故障管理:故障检测、隔离和纠正。
  • 配置管理:初始化网络、并配置网络。
  • 计费管理:记录网络资源的使用。
  • 性能管理:估价系统资源的运行状况及通信效率等。
  • 网络安全管理:对授权机制、访问控制、加密和加密关键字的管理。

网络管理的一般模型

网络管理模型中的主要构件

管理站

管理站也常称为网络运行中心,是网络管理系统的核心。它通常是个有图形界面的高性能的工作站,并由网络管理员直接操作和控制。所有向被管设备发送的命令都是从管理站发出的。

管理站中的关键构件是管理程序,管理程序在运行时就成为管理进程。

管理站(硬件)或管理程序(软件)都可称为管理者。管理者不是指人,而是指机器或软件。

网络管理员指的是负责网络管理的人员。

大型网络往往实行多级管理,因而有多个管理者,而一个管理者一般只管理本地网络的设备。

被管对象

在被管网络中有很多的被管设备,被管设备可以是主机、路由器、打印机、集线器、网桥或调制解调器等。

网络的每一个被管设备中可能有多个被管对象。被管对象可以是被管设备中的某个硬件,也可以是某些硬件或软件的配置参数的集合。

被管设备有时可称为网络元素或网元。

在被管设备中也会有一些不能被管的对象。

代理

在每一个被管设备中都要运行一个程序以便和管理站中的管理程序进行通信。这些运行着的程序叫做网络管理代理程序,或简称为代理。

代理程序在管理程序的命令和控制下在被管设备上采取本地的行动。

网络管理协议

网络管理协议简称为网管协议。网络管理协议是管理程序和代理程序之间进行通信的规则。

网络管理员利用网络管理协议,通过管理站对网络中的被管设备进行管理。

需要注意的是,网管协议本身不管理网络。

简单网络管理协议 SNMP

简单网络管理协议 SNMP(Simple Network Management Protocol) 中的管理程序和代理程序按客户–服务器方式工作。SNMP 使用无连接的 UDP。

管理程序运行 SNMP 客户程序,向某个代理程序发出请求(或命令),代理程序运行 SNMP 服务器程序,返回响应(或执行某个动作)。

在网管系统中,往往是一个(或少数几个)客户程序与很多的服务器程序进行交互。

SNMP 的指导思想

SNMP 最重要的指导思想就是要尽可能简单。

SNMP 的基本功能包括监视网络性能、检测分析网络差错和配置网络设备等。

在网络正常工作时,SNMP 可实现统计、配置、和测试等功能。当网络出故障时,可实现各种差错检测和恢复功能。

虽然 SNMP 是在 TCP/IP 基础上的网络管理协议,但也可扩展到其他类型的网络设备上。

SNMP 的管理站和委托代理

整个系统必须有一个管理站。

若网络元素使用的不是 SNMP 而是另一种网络管理协议,SNMP 协议就无法控制该网络元素。这时可使用委托代理。

委托代理能提供协议转换和过滤操作等功能,对被管对象进行管理。

SNMP 网络管理组成

SNMP 的网络管理由三个部分组成:

  • SNMP 本身
  • 管理信息结构 SMI(Structure of Management Information),关于 MIB 的一套公用的结构和表示符号。
  • 管理信息库 MIB (Management Information Base),管理信息库包含所有代理进程的所有可被查询和修改的参数。

SNMP 定义了管理站和代理之间所交换的分组格式。

所交换的分组包含各代理中的对象(变量)名及其状态(值)。SNMP 负责读取和改变这些数值。

SMI 定义了命名对象和定义对象类型(包括范围和长度)的通用规则,以及把对象和对象的值进行编码的规则。这样做是为了确保网络管理数据的语法和语义的无二义性。但从 SMI 的名称并不能看出它的功能。SMI 并不定义一个实体应管理的对象数目,也不定义被管对象名以及对象名及其值之间的关联。

MIB 在被管理的实体中创建了命名对象,并规定了其类型。管理程序使用 MIB 中的信息,对网络进行管理。

管理信息结构 SMI

SMI 主要说明了怎样定义管理对象和怎样访问管理对象。
SMI 的功能:

  • 被管对象应怎样命名;
  • 用来存储被管对象的数据类型有哪些种;
  • 在网络上传送的管理数据应如何编码。

SMI 规定所有被管对象必须在命名树上。

对象标识符

对象标识是一种数据类型,它指明一种“授权”命名的对象。“授权”的意思就是这些标识不是随便分配的,它是由一些权威机构进行管理和分配的。

对象标识是一个整数序列,以点(“.”)分隔。这些整数构成一个树型结构,类似于 DNS 或 Unix 的文件系统。对象标识从树的顶部开始,顶部没有标识,以root表示(这和 Unix 中文件系统的树遍历方向非常类似)。

上面的图显示了在 SNMP 中用到的这种树型结构。所有的 MIB 变量都从1.3.6.1.2.1这个标识开始。

树上的每个结点同时还有一个文字名。例如标识1.3.6.1.2.1就和iso.org.dod.internet.memt.mib-2对应。这主要是为了人们阅读方便。在实际应用中,也就是说在管理进程和代理进程进行数据报交互时,MIB 变量名是以对象标识来标识的,当然都是以1.3.6.1.2.1开头的。

SMI 数据类型

SMI 把数据类型分为两大类:简单类型、结构化类型。

管理信息库 MIB

管理信息库 MIB(Management Information Base)就是所有代理进程包含的、并且能够被管理进程进行查询和设置的信息的集合。

管理进程使用 MIB 中这些信息的值对网络进行管理(如读取或重新设置这些值)。只有在 MIB 中的对象才是 SNMP 所能够管理的。

MIB 被划分为若干个组,如system、interfaces、at(地址转换)和ip组等。

SNMP的协议数据单元和报文

SNMP 的操作只有两种基本的管理功能:

  • “读”操作,用get报文来检测各被管对象的状况;
  • “写”操作,用set报文来改变各被管对象的状况。

SNMP 的这些功能通过探询操作来实现。探询操作——SNMP 管理进程定时向被管理设备周期性地发送探询信息。

探询的好处:可使系统相对简单。能限制通过网络所产生的管理信息的通信量。

探询的缺点:不够灵活,而且所能管理的设备数目不能太多。开销也较大。

关于管理进程和代理进程之间的交互信息, SNMP 定义了 5 种报文:

  1. get-request操作:从代理进程处提取一个或多个参数值。
  2. get-next-request操作:从代理进程处提取一个或多个参数的下一个参数值。
  3. set-request操作:设置代理进程的一个或多个参数值。
  4. get-response操作:返回的一个或多个参数值。这个操作是由代理进程发出的。它是前面3中操作的响应操作。
  5. trap操作:代理进程主动发出的报文,通知管理进程有某些事情发生。

前面的 3 个操作是由管理进程向代理进程发出的。后面两个是代理进程发给管理进程的。

既然这些操作中的前 4 种操作是简单的请求-应答方式(也就是管理进程发出请求,代理进程应答响应),而且在 SNMP 中往往使用 UDP 协议,所以可能发生管理进程和代理进程之间数据报丢失的情况。因此一定要有超时和重传机制。

管理进程发出的前面 3 种操作采用 UDP 的 161 端口。代理进程发出的Trap操作采用 UDP 的 162 端口。由于收发采用了不同的端口号,所以一个系统可以同时为管理进程和代理进程。

trap

SNMP 不是完全的探询协议,它允许不经过询问就能发送某些信息。这种信息称为陷阱,表示它能够捕捉“事件”。

当被管对象的代理检测到有事件发生时,就检查其门限值。代理只向管理进程报告达到某些门限值的事件(即过滤)。

过滤的好处是:

  • 仅在严重事件发生时才发送陷阱;
  • 陷阱信息很简单且所需字节数很少。

使用探询(至少是周期性地)以维持对网络资源的实时监视。同时也采用陷阱机制报告特殊事件,使得 SNMP 成为一种有效的网络管理协议。

SNMP 的 UDP 报文格式

由于 SNMP 报文的编码采用了 ASN.1 和 BER,这就使得报文的长度取决于变量的类型和值。

各字段含义:

版本字段

版本字段是 0。该字段的值是通过 SNMP 版本号减去 1 得到的。显然 0 代表 SNMPv1。

团体名

团体名字段是一个字符串。这是管理进程和代理进程之间的口令,是明文格式。默认的值是public。SNMPv1 用团体名验证来控制访问权限。

PDU 类型字段

各种 PDU 对应的值(PDU 即协议数据单元,也就是分组):

PDU编号(T字段) PDU名称 用途
0(A0) get-request 从代理进程处提取一个或多个参数值
1(A1) get-next-request 从代理进程处提取一个或多个参数的下一个参数值
2(A2) get-reponse 代理向管理者或管理者向管理者发送响应
3(A3) set-request 设置代理进程的一个或多个参数值
4(A5) get-bulk-request 管理者从代理读取大数据块的值
5(A6) inform-request 管理者从另一管理者读取代理的变量
6(A7) SNMPv2-trap 代理向管理者报告异常事件
8(A8) report 管理者之间报告某些差错

对于get-request、get-next-requestset-request操作,请求标识由管理进程设置,然后由代理进程在get-response中返回。这个字段的作用是使客户进程(在目前情况下是管理进程)能够将服务器进程(即代理进程)发出的响应和客户进程发出的查询进行匹配。这个字段允许管理进程对一个或多个代理进程发出多个请求,并且从返回的众多应答中进行分类。

差错状态字段

差错状态字段是一个整数,它是由代理进程标注的,指明有差错发生。

差错状态 名称 描述
0 noError 没有错误
1 tooBig 代理进程无法把响应放在一个SNMP消息中发送
2 noSuchName 操作一个不存在的变量
3 badValue set操作的值或语义有错误
4 readOnly 管理进程试图修改一个只读变量
5 genErr 其他错误

差错索引字段

差错索引字段是一个整数偏移量,指明当有差错发生时,差错发生在哪个参数。它是由代理进程标注的,并且只有在发生noSuchName、readOnlybadValue差错时才进行标注。

名/值字段

get-request、get-next-requestset-request的请求数据报中,包含变量名称和变量值的一张表。对于get-requestget-next-request操作,变量值部分被忽略,也就是不需要填写。对于trap操作符(PDU 类型是 4),SNMP 报文格式有所变化。

ASN.1 和 BER

ASN.1(Abstract Syntax Notation 1)是一种描述数据和数据特征的正式语言。它和数据的存储及编码无关。在正式的 SNMP 规范中 MIB 和 SNMP 报文中的所有的字段都是用 ASN.1 描述的。

例如Get-request报文的 ASN.1 定义:

当有了这样的 ASN.1 定义,可以有多种编码方法把数据编码为传输的比特流。在 SNMP 报文中比特的编码采用BER(Basic Encoding Rule)。例如,对于一个简单的整数如 64,在 BER 中需要用 3 个字节来表示。第一个字节说明类型是一个整数,下个字节说明用了多少个字节来存储该整数(在这里是 1),最后一个字节才是该整数的值。

用 TLV 方法进行编码

TLV 中的 T 字段定义数据的类型

TLV 中的 L 字段定义 V 字段的长度

TLV 中的 V 字段定义数据的值

例如,INTEGER 15,其T字段是 02,INTEGER类型要用 4 字节编码。最后得出 TLV 编码为02 04 00 00 00 0F

例如,IPAddress 192.1.2.3,其T字段是 40,V字段需要 4 字节表示,因此得出 TLV 编码是40 04 C0 01 02 03

TLV 中的 V 字段可嵌套其他数据元素的 TLV 字段

Get-request报文 ASN.1 编码:

BER 指明了每种数据类型中每个数据的值的表示。发送端用 BER 编码,可将用 ASN.1 所表述的报文转换成唯一的比特序列。接收端用 BER 进行解码,得到该比特序列所表示的 ASN.1 报文。

SNMPv2

SNMPv2 既可以支持完全集中的网络管理,又可以支持分布式网络管理。

SNMPv2 的增强主要在 3 个方面:

  1. 管理信息结构的扩充
  2. 管理站之间的通信能力
  3. 新的协议操作

SNMPv2 引入了新的数据类型,增强了对象的表达能力,提供了更完善的表操作功能。SNMPv2 还定义了新的 MIB 功能组,包含了关于协议操作的通信消息,以及有关管理站和代理系统配置的信息。在协议操作方面,引入了两种新的 PDU,get-bulk-requestinform-request分别用于大块数据的传输和管理站之间的通信。

SNMPv2 的安全性比 SNMPv1 大有提高。在 SNMPv1 中,从管理进程到代理进程的共同体名称是以明文方式传送的。而 SNMPv2 可以提供鉴别和加密。

打赏
  • Copyrights © 2017-2023 WSQ
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信