2.18k likes | 2.46k Views
计算机网络管理. -- 第 4 章 简单网络管理协议. 电子信息工程学院计算机科学与技术系. 第 4 章 简单网络管理协议. 4.1 SNMP的演变 4.2 SNMPv1协议数据单元 4.3 SNMPv1的操作 4.4 实现问题 4.5 SNMPv2管理信息结构 4. 6 SNMPv2协议数据单元 4.6 SNMPv3 习题 作业. 这一章主要学习:. 了解SNMP协议的演变过程:(1990--1999)共三个版本 SNMP协议三个版本的主要内容: SNMP的协议数据单元 SNMP协议支持的操作 SNMP的安全机制.
E N D
计算机网络管理 --第4章 简单网络管理协议 电子信息工程学院计算机科学与技术系
第4章 简单网络管理协议 4.1 SNMP的演变 4.2 SNMPv1协议数据单元 4.3 SNMPv1的操作 4.4 实现问题 4.5 SNMPv2管理信息结构 4.6 SNMPv2协议数据单元 4.6 SNMPv3 习题 作业
这一章主要学习: • 了解SNMP协议的演变过程:(1990--1999)共三个版本 • SNMP协议三个版本的主要内容: • SNMP的协议数据单元 • SNMP协议支持的操作 • SNMP的安全机制
4.1 SNMP的演变 • 4.1.1 SNMPv1 • TCP/IP网络管理最初使用的是1987年11月提出的简单网关 监控协议(Simple Gateway Monitoring Protocol,SGMP), • 简单网络管理协议第一版(Simple Network Management Protocol,SNMPv1)是在SGMP基础上改进成的。陆续公布在1990年和1991年的几个RFC(Request For Comments)文档中,即: ⑴ RFC 1155(SMI); ⑵ RFC 1157(SNMP); ⑶ RFC 1212(MIB定义); ⑷ RFC 1213 (MIB-2规范)。
SNMPV1的优点: ⑴ 最主要的的优点是:简单,容易实现; ⑵ 基于人们熟悉的SGMP(Simple Gateway Monitoring Protocol)协议,而对SGMP的使用已相当熟悉,已具有相 当多的操作经验。 • 网络管理的两个标准 ⑴ IETF网络管理标准:SNMP (IETF:Internet Engineering Task Force,是全球互联网最具权威的技术标准化组织,主要任务是负责互联网相关技术规范的研发和制定) ⑵ OSI网络管理标准:CMIP/CMIS CMIP: Common Management Information Protocol;CMIS: Common Management Information Service
4.1.2 SNMPv2 • SNMPv1的不足: • 没有实质性的安全设施,无数据源认证功能,不能防止偷听。 • 面对这样不可靠的管理环境,许多制造商不得不废除了set命令,以避免网络配置被入侵者恶意窜改。 • 安全SNMP(S-SNMP)协议: • 为了修补SNMPv1的安全缺陷,1992年7月出现了一个新标准:安全SNMP(S-SNMP)(S即safety); • S-SNMP增强了安全方面的功能: • 用报文摘要算法MD5保证数据完整性和进行数据源认证; • 用时间戳对报文排序; • 用DES算法提供数据加密功能
但是S-SNMP没有改进SNMP在功能和效率方面的其他缺点。但是S-SNMP没有改进SNMP在功能和效率方面的其他缺点。 • SMP(Simple Management Protocol)协议: • SMP协议由8个文件组成,它对SNMP主要在以下4个方面进行了扩充与扩展: • 适用范围: ⑴SMP可以管理任意资源,不仅包括网络资源,还可用于应用管理、系统管理;⑵ 可实现管理站之间的通信;⑶ 可以描述一致性要求和实现能力;⑷ 管理信息的扩展性得到了增强。 • 复杂程度、速度和效率: ⑴ 保持了SNMP的简单性,更容易实现;⑵ 提供了数据块传送能力,因此速度和效率更高。
安全设施: 结合了S-SNMP提供的安全功能。 • 兼容性: 既可以运行在TCP/IP网络上,也适合OSI系统和运行其他通信协议的网络。 • Internet研究人员之间达成了共识: 在对S-SNMP和SMP讨论的过程中,Internet研究人员之间达成了如下共识: • 必须扩展SNMPv1的功能并增强其安全设施,使用户和制 造商尽快地从原来的SNMPv1过渡到第二代SNMP。 • 放弃S-SNMP,以SMP为基础开发SNMP第2版,即SNMPv2。
IETF(internet工程任务组)组织了两个工作组: • 一个组负责协议功能和管理信息库的扩展; • 一组负责SNMP的安全方面; • 于1992年10月正式开始工作,功能组的工作在1992年12月完成,安全组在1993年1月完成。 • 1993年5月它们发布了12个RFC(1441~1452)文件作为 SNMPv2草案标准。
一种意见认为SNMPv2安全机制实现起来太复杂,对代理的配置很困难,限制了网络发现能力,失去了SNMP的简单性。一种意见认为SNMPv2安全机制实现起来太复杂,对代理的配置很困难,限制了网络发现能力,失去了SNMP的简单性。 • 又经过几年的实验和论证,后来人们决定丢掉安全功能,把增加的其他功能作为新标准颁布,并保留SNMPv1的报文封装格式,称其为基于团体的SNMP(Community-based SNMP),简称SNMPv2C。 • 新的RFC(1901~1908)文档于1996年1月发布。表4.1列出了有关SNMPv2和SNMPv2C的RFC文件。
4.1.3 SNMPv3 • SNMPv2没有达到“商业级别”的安全要求: • 提供数据源标识、报文完整性认证、防止重放、报文机密性、授权和访问控制、远程配置和高层管理能力等; • SNMPv3工作组一直在从事新标准的研制工作。 • SNMPv3工作组的目标是:尽量使用已有的文档,使新标准: • 能够适应不同管理需求的各种操作环境; • 便于已有的系统向SNMPv3过渡; • 可以方便地建立和维护管理系统。
SNMPv3的建议标准(Proposed Standard): SNMPv3工作组于1998年1月发表了5个文件,作为建议标准(Proposed Standard): • RFC 2271——描述SNMP管理框架的体系结构; • RFC 2272——简单网络管理协议的报文处理和调度; • RFC 2273——SNMPv3应用程序; • RFC 2274——SNMPv3基于用户的安全模块; • RFC 2275——SNMPv3基于视图的访问控制模块。 • SNMPv3的建议标准在功能上主要增强了: • SNMP的安全性 • 高层管理的功能。
SNMPv3的新标准: • 在上述5个文件的基础上进行了修订,在1999年4月公布了7个文件,作为SNMPv3的新标准(DRAFT STANDARD): • RFC 2570—Internet标准网络管理框架第3版引论; • RFC 2571—SNMP管理框架的体系结构描述; • RFC 2572—简单网络管理协议的报文处理和调度系统; • RFC 2573—SNMPv3应用程序; • RFC 2574—SNMPv3基于用户的安全模块(USM) ; • RFC 2575—SNMPv3基于视图的访问控制模块(VACM); • RFC 2576—SNMP第1、2、3版的共存问题。
SNMPV3对SNMPv2的管理信息结构(SMI)的有关文件进行了修订,作为正式标准公布: SNMPV3对SNMPv2的管理信息结构(SMI)的有关文件进行了修订,作为正式标准公布: • RFC 2578——管理信息结构第2版(SMIv2) ; • RFC 2579——对于SMIv2的文本约定; • RFC 2580——对于SMIv2的一致性说明。 • SNMPv3的特点: • 在SNMPv2C的基础上增加了安全功能和高层管理功能; • 和以前的标准(SNMPv1和SNMPv2)完全兼容; • 结构上便于以后新功能模块的扩充。
4.2 SNMPv1协议数据单元 • 主要讨论SNMP的工作原理: • SNMP对管理对象的操作 • SNMP协议数据单元的格式 • SNMP报文的发送、接收和应答
4.2 SNMPv1协议数据单元 • 4.2.1 SNMPv1支持的操作 • SNMPv1是一种简单的“请求/响应”协议, • 使用“管理者-代理”模式,仅支持对被管对象值的检索和修改等简单操作。 • 网络管理系统发出一个请求,管理代理则返回一个响应。该过程通过SNMP操作实现。 • SNMPv1实体可以对MIB-2中的对象执行下列操作: • Get:管理站检索管理信息库中标量对象的值; • Set:管理站设置管理信息库中标量对象的值; • Trap:代理向管理站报告管理对象的状态变化。
SNMPv1的不足: • SNMPv1不支持管理站改变管理信息库MIB的结构,即不能增加和删除管理信息库中的管理对象实例,例如不能增加或删除表中的一行。 • 管理站不能向管理对象发出执行一个动作的命令。 • 管理站只能逐个访问管理信息库中的叶结点,不能一次性访问一个子树,例如不能访问整个表的内容。MIB-2中的子树结点都是不可访问的。 • 这些限制确实简化了SNMP的实现,但是也限制了网络管理的功能。
4.2.2 SNMP PDU格式 • SNMP报文的组成: 在SNMP管理中,管理站和代理之间交换的管理信息构成了SNMP报文。报文由3部分组成:见下图 • 版本号:是指SNMP的版本 • 团体名:用于身份认证 • 协议数据单元(PDU):管理站与管理代理之间交换的数据 • SNMP共有5种管理操作: • GetRequest • GetNextRequest • SetRequest • GetResponse • Trap
管理站发出的3种请求报文:其格式是一样的 • GetRequestPDU • GetNextRequestPDU • SetRequestPDU • 代理的应答报文格式只有一种: • GetResponsePDU • 代理用于事件报告的报文: • TrapPDU
GetRequest, GetNextRequest, SetRequest, GetResponse PDU格式是相同的,共有5个字段: • PDU类型 • 请求标识(request-id) • 错误状态(error-status) • 错误索引(error-index) • 变量绑定表(variable-binding)
PDU类型: 每种类型用一个整数表示 • GetRequestPDU: 0 • GetNextRequestPDU:1 • GetResponsePDU: 2 • SetRequestPDU: 3 • TrapPDU五种类型: 4 • 请求标识(request-id):赋予每个请求报文惟一的整数。 • 用于区分不同的请求。返回的应答报文,要根据其中的请求标识与请求报文配对; • 检测由不可靠的传输服务产生的重复报文。
错误状态(error-status): • 代理在处理管理站的请求时,可能出现的各种错误,共有6种错误状态
错误索引(error-index): • 指向出错的变量或出错变量的序号。 • 变量绑定表(variable-binding): • 变量名和对应值的表,说明要检索或设置的所有变量及其值。在检索请求报文中,变量的值应为0。 • 变量绑定表就是把多个变量的值装入一个PDU ,并通过一个应答得到所有的值,使得一次可以检索多个被管对象,这样可以大大减少网络管理的通信负担。
Trap报文的格式: • 制造商ID(enterprise):表示设备制造商的标识,与MIB-2的系统组对象sysObjectID的值相同。 • 代理地址(agent-addr):产生陷入的代理的IP地址; • 一般陷入(generic-trap):SNMP定义的陷入类型; • 特殊陷入(specific-trap):与设备有关的特殊陷入代码。 • 时间戳(time-stamp): 代理发出陷入的时间,与MIB-2中的系统组对象sysUpTime的值相同
管理站发出的3种请求报文:GetRequest、GetNextRequest管理站发出的3种请求报文:GetRequest、GetNextRequest 和SetRequest • 代理的应答报文格式只有一种:GetResponsePDU
4.2.3 报文应答序列 • 1、报文按管理站、管理代理划分 • 管理站报文 • GetRequest、GetNextRequest和SetRequest的报文由管理站发出,代理以GetResponse响应。 • 管理站可连续发出多个请求报文,然后等待代理返回应答报文。如果在规定的时间内收到应答,则按照请求标识进行配对,亦即应答报文必须与请求报文有相同的请求标识。 • 管理代理报文 • GetResponse响应报文 • Trap报文由代理发给管理站,不需要应答。
GetNext Request Get Request Set Request Trap Request Manager Manager Manager Manager Agent Agent Agent Agent Get Response Get Response Get Response SNMP Services Get GetNext Set Trap
4.2.4 报文的发送和接收 • 生成和发送SNMP报文 一个SNMP协议实体(PE)发送报文时执行下面的过程 • 首先按照ASN.1的格式构造PDU; • 将PDU、源地址、端口和目的地址、端口以及共同体名 称一起交给认证进程; • 认证进程检查源和目标之间是否可以通信; • 通过检查则把有关信息(版本号、团体名、PDU)组装 成报文; 3. 最后经过BER编码,将报文交传输实体发送出去。 见下图
接收和处理SNMP报文当一个SNMP协议实体(PE)接收到报文时执行下面的过程:接收和处理SNMP报文当一个SNMP协议实体(PE)接收到报文时执行下面的过程: • 首先按照BER编码恢复ASN.1报文; • 对解码后的报文进行基本的语法检查,丢弃非法报文; • 检查版本号,丢弃版本号不匹配的报文; • 将PDU、发送方地址和端口、接收方地址和端口发送到认证服务: • 如果认证失败,生成一个陷入报文,向发送站报告通信 异常情况 • 如果认证成功,认证服务返回PDU • 对PDU进行基本语法检查,丢弃非法的PDU,并对PDU进行相应处理 。
4.3 SNMPv1的操作 • 4.3.1 检索简单对象 • 检索简单的标量对象值可以用Get操作。 • 如果变量绑定表中包含多个变量,则一次还可以检索多个标量对象的值。接收GetRequest的SNMP实体以请求标识相同的GetResponse响应。
GetResponse操作具有原子性: • 事务:A想要从自己的帐户中转1000块钱到B的帐户里。从A开始转帐,到转帐结束的这一个过程,称之为一个事务。在这个事务里,要做如下操作: • . 从A的帐户中减去1000块钱。 • . 在B的帐户里加上1000块钱。 • 原子性操作:要么一起成功(A帐户成功减少1000,同时B帐户成功增加1000),要么一起失败(A帐户回到原来状态,B帐户也回到原来状态)的操作叫原子性操作。 • GetResponse操作具有原子性:如果所有请求的对象值可以得到,则给予应答;反之,只要有一个对象的值得不到,则不予应答,而可能返回3种错误状态之一:
GetResponse操作失败时,响应实体返回PDU中的错误状态GetResponse操作失败时,响应实体返回PDU中的错误状态 • PDU中错误状态字段置为:noSuchName • 变量中若: ⑴ 变量表中若一个对象无法与MIB中任何对象标识符匹配⑵ 要检索的对象是一个数据块(子树或表),没有对象实例生成。 • 响应实体返回的应答PDU中:⑴ 错误状态字段置为:noSuchName;⑵ 错误索引字段设置为一个数,指明有问题的变量。 • PDU中错误状态字段置为:tooBig • 响应实体可以提供所有要检索的值,但是变量太多,一个响应PDU装不下。 • 响应实体返回一个应答PDU,错误状态字段置为:tooBig。
PDU中错误状态字段置为:genError • 由于其他原因(例如代理不支持)响应实体至少不能提供一个对象的值; • 则返回的PDU中: ⑴ 错误状态字段置为:genError, ⑵ 错误索引字段置一个数,指明有问题的变量。 • 变量绑定表中不返回任何值。
使用GetRequest检索各对象实例的值 例4.1 图4.5所示的例子,是UDP组的一部分。 用检索命令:GetRequest检索各对象实例的值: 解答: GetRequest( udpInDatagrams.0,udpNoPorts.0, • udpInErrors.0,udpOutDatagrams.0) • 应该得到下面的响应: • GetResponse(udpInDatagrams.0=100,udpNoPorts.0=1, • udpInErrors.0=2,udpOutDatagrams.0=200)
100 1 2 200 图4.5 检索简单对象例
使用GetNextRequest检索各对象实例的值 • GetNextRequest的作用与GetRequest基本相同,PDU格式也相同,惟一的差别是: • GetRequest的检索变量名所指的是对象实例; • GetNextRequest的检索变量名所指的是“下一个”对 象实例。 比如: • GetRequest( udpInDatagrams.0):检索udpInDatagrams的值 • GetResponse(udpInDatagrams.0=100) • GetNextRequest( udpInDatagrams.0):检索udpNoPorts的值 • GetResponse(udpNoPorts.0=1)
例4.2 用GetNext命令检索图4.5中的4个值,直接指明对象标识符: • 解答: • GetNextRequest( udpInDatagrams,udpNoPorts, udpInErrors,udpOutDatagrams) • 得到的响应与上例是相同的: GetResponse( udpInDatagrams.0=100,udpNoPorts.0=1, • udpInErrors.0=2,udpOutDatagrams.0=200) • 可见标量对象实例标识符(例如udpInDatagrams.0)总是紧跟在对象标识符(例如udpInDatagrams)后面的。
例4.3 如果代理不支持管理站对udpNoPorts的访问, 则响应会不同。发出同样的命令: • GetNextRequest(udpInDatagrams,udpNoPorts, • udpInErrors,udpOutDatagrams) • 得到的响应是: • GetResponse( udpInDatagrams.0=100, udpInErrors.0=2, • udpInErrors.0=2,udpOutDatagrams.0=200) • 因为变量名udpNoPorts和udpInErrors的下一个对象实例都是udpInErrors.0=2。 • 当代理收到一个Get请求时: • 如果能检索到所有的对象实例,则返回请求的每个值; • 如果有一个值不能提供,则返回该实例的下一个值。
4.3.2 检索未知对象 • 例4.4对于一个未知对象,如何得到它的MIB结构? • 用GetNext的检索未知对象的特性可以发现其MIB结构。 • 以MIB-2的udp功能组为例进行说明。 ⑴ GetNextRequest(udp) • 得到的响应是: • GetResponse(udpInDatagrams.0=100) • 这样管理站知道了udp组的第一个对象。 • 思考:如何找到其他管理对象? ⑵ GetNextRequest(udpInDatagrams.0) • 得到的响应是: GetResponse(udpNoPorts.0=1) • 思考:用 GetNextRequest(udpInDatagrams)可以不可以?
4.3.3 检索表对象 • 例4.5已知一个设备,如何知道其的接口数与每个接口的速率?以图4.6为例进行说明 • GetNext可用于有效地检索表对象。 • ⑴ 用下面的命令,检索ifNumber的值: • GetRequest( 1.3.6.1.2.1.2.1.0) • GetResponse(2) • 我们可知道:设备有两个接口。 • 1.3.6.1.2.1.2.1.0 internet mgmt mib-2 interfaces
⑵ 检索每个接口的数据速率: • GetRequest(1.3.6.1.2.1.2.2.1.5.1) • 最后的1是索引项ifIndex的值。得到的响应是: • GetResponse(100000000) • 说明第一个接口的数据速率是10 Mb/s。 • 如果发出的命令是: • GetNextRequest(1.3.6.1.2.1.2.2.1.5.1) • 则得到的是第二个接口的数据速率: • GetResponse(560000) • 说明第二个接口的数据速率是56 kb/s。 • 思考:有否其它的命令也可得到第二接口的速率?
例4.5 如何检索一个表?假定管理站不知道该表的行数而想检索整个表,以图4.7所示的表为例说明。 • 检索一个表可以连续使用GetNext命令,且进行变量绑定,以提高检索效率。 • ⑴GetNextRequest(ipRouteDest, • ipRouteMetric1, • ipRouteNextHop) • ⑵ GetResponse(ipRouteDest.9.1.2.3=9.1.2.3, • ipRouteMetric1.9.1.2.3=3, • ipRouteNextHop.9.1.2.3=99.0.0.3)