设为首页收藏本站language 语言切换
查看: 3181|回复: 21
收起左侧

[书籍] SNMP(简单网络管理协议)详解

[复制链接]
 成长值: 63715
发表于 2021-7-19 16:35:12 | 显示全部楼层 |阅读模式
SNMP简介
介绍SNMP的定义、目的、版本演进以及受益。
定义简单网络管理协议SNMP(Simple Network Management Protocol)是广泛应用于TCP/IP网络的网络管理标准协议。SNMP提供了一种通过运行网络管理软件的中心计算机(即网络管理工作站)来管理设备的方法。SNMP的特点如下:
  • 简单:SNMP采用轮询机制,提供最基本的功能集,适合小型、快速、低价格的环境使用,而且SNMP以UDP报文为承载,因而受到绝大多数设备的支持。
  • 强大:SNMP的目标是保证管理信息在任意两点传送,以便于管理员在网络上的任何节点检索信息,进行故障排查。



目的随着网络技术的飞速发展,在网络不断普及的同时也给网络管理带来了一些问题:
  • 网络设备数量成几何级数增加,使得网络管理员对设备的管理变得越来越困难;同时,网络作为一个复杂的分布式系统,其覆盖地域不断扩大,也使得对这些设备进行实时监控和故障排查变得极为困难。
  • 网络设备种类多种多样,不同设备厂商提供的管理接口(如命令行接口)各不相同,这使得网络管理变得愈发复杂。


在这种背景下,SNMP应运而生。通过“利用网络管理网络”的方式,SNMP实现了对网络设备的高效和批量的管理;同时,SNMP协议也屏蔽了不同产品之间的差异,实现了不同种类和厂商的网络设备之间的统一管理。

版本演进
1990年5月,RFC 1157定义了SNMP的第一个版本SNMPv1。RFC 1157提供了一种监控和管理计算机网络的系统方法。SNMPv1基于团体名认证,安全性较差,且返回报文的错误码也较少。
1996年,IETF颁布了RFC 1901,定义了SNMP的第二个版本SNMPv2c。SNMPv2c中引入了GetBulk和Inform操作,支持更多的标准错误码信息,支持更多的数据类型(Counter64、Counter32)。
鉴于SNMPv2c在安全性方面没有得到改善,IETF又颁布了SNMPv3的版本,提供了基于USM(User Security Module)的认证加密和基于VACM(View-based Access Control Model)的访问控制。

受益
  • 网络管理员可以利用SNMP平台在网络上的任意节点完成信息查询、信息修改和故障排查等工作,工作效率得以提高。
  • 屏蔽了设备间的物理差异,SNMP仅提供最基本的功能集,使得管理任务与被管理设备的物理特性、网络类型相互独立,因而可以实现对不同设备的统一管理,管理成本低。
  • 设计简单、运行代价低,SNMP采用“尽可能简单”的设计思想,其在设备上添加的软件/硬件、报文的种类和报文的格式都力求简单,因而运行SNMP给设备造成的影响和代价都被最小化。

SNMPv1/SNMPv2cSNMPv1/SNMPv2c报文结构
图1-3所示,SNMPv1/SNMPv2c报文主要由版本、团体名、SNMP PDU三部分构成。
图1-3  SNMPv1/SNMPv2c报文结构


报文中的主要字段定义如下:
  • 版本:表示SNMP的版本,如果是SNMPv1报文则对应字段值为0,SNMPv2c则为1。
  • 团体名:用于在Agent与NMS之间完成认证,字符串形式,用户可自行定义。团体名包括“可读”和“可写”两种,执行GetRequest、GetNextRequest操作时,采用“可读团体名”进行认证;执行Set操作时,则采用“可写团体名”认证。
  • SNMPv1/SNMPv2c PDU:包含PDU类型、请求标识符、变量绑定列表等信息。其中SNMPv1 PDU包括GetRequest PDU、GetNextRequest PDU、SetRequest PDU、Response PDU和Trap PDU几种类型,SNMPv2c PDU在SNMPv1的基础上新增了GetBulkRequest PDU。
    为了简化起见,SNMP操作今后叫做Get、GetNext、Set、Response、Trap和GetBulk操作。


SNMPv1/SNMPv2c操作类型
表1-1所示,SNMPv1/SNMPv2c规定了6种操作类型,用来完成NMS和Agent之间的信息交换。
表1-1  SNMPv1/SNMPv2c中涉及的操作
操作
描述

Get
Get操作可以从Agent中提取一个或多个参数值。

GetNext
GetNext操作可以从Agent中按照字典序提取下一个参数值。

Set
Set操作可以设置Agent的一个或多个参数值。

Response
Response操作可以返回一个或多个参数值。这个操作是由Agent发出的,它是GetRequest、GetNextRequest、SetRequest和GetBulkRequest四种操作的响应操作。Agent接收到来自NMS的Get/Set指令后,通过MIB完成相应的查询/修改操作,然后利用Response操作将信息回应给NMS。

Trap
Trap信息是Agent主动向NMS发出的信息,告知管理进程设备端出现的情况。

GetBulk
GetBulk操作实现了NMS对被管理设备的信息群查询。


SNMPv1/SNMPv2c工作原理SNMPv1和SNMPv2c的工作原理基本一致。SNMPv1/SNMPv2c的工作原理如图1-4所示。图1-4  基本操作类型



  • Get操作
    假定NMS想要获取被管理设备MIB节点sysContact的值,使用可读团体名为public,过程如下所示:
    • NMS:向Agent发送Get请求报文。报文中各字段的设置如下:版本号为所使用的SNMP版本;团体名为public;PDU中PDU类型为Get类型,绑定变量填入MIB节点名sysContact。
    • Agent:首先对报文中携带版本号和团体名进行认证,认证成功后,Agent根据请求查询MIB中的sysContact节点,得到sysContact的值并将其封装到Response报文中的PDU,向NMS发送响应;如果查询不成功,Agent会向NMS发送出错响应。


  • GetNext操作
    假定NMS想要获取被管理设备MIB节点sysContact的下一个节点sysName值,使用可读团体名为public,过程如下所示:
    • NMS:向Agent发送GetNext请求报文。报文中各字段的设置如下:版本号为所使用的SNMP版本;团体名为public;PDU中PDU类型为GetNext类型,绑定变量填入MIB节点名sysContact。
    • Agent:首先对报文中携带版本号和团体名进行认证,认证成功后,Agent根据请求查询MIB中的sysContact的下一个节点sysName,得到sysName的值并将其封装到Response报文中的PDU,向NMS发送响应;如果查询不成功,Agent会向NMS发送出错响应。


  • Set操作
    假定NMS想要设置被管理设备MIB节点sysName的值为HUAWEI,使用可写团体名为private,过程如下所示:
    • NMS:向Agent发送Set请求报文。报文中各字段的设置如下:版本号为所使用的SNMP版本;团体名为private;PDU中PDU类型为Set类型,绑定变量填入MIB节点名sysContact和需要设置的值HUAWEI。
    • Agent:首先对报文中携带版本号和团体名进行认证,认证成功后,Agent根据请求设置管理变量在管理信息库MIB中对应的节点,设置成功后向NMS发送响应;如果设置不成功,Agent会向NMS发送出错响应。


  • Trap操作
    Trap不属于NMS对被管理设备的基本操作,它是被管理设备的自发行为。当被管理设备达到告警的触发条件时,会通过Agent向NMS发送Trap消息,告知设备侧出现的异常情况,便于网络管理人员及时处理。例如被管理设备热启动后,Agent会向NMS发送warmStart的Trap。
    这种Trap信息是受限制的。只有在设备端的模块达到模块预定义的告警触发条件时,Agent才会向管理进程报告。这种方法有其好处是仅在严重事件发生时才发送Trap信息,减少报文交互产生的流量。

SNMPv2c新增的操作如图1-5所示。图1-5  SNMPv2c新增操作


  • GetBulk操作
    基于GetNext实现,相当于连续执行多次GetNext操作。在NMS上可以设置被管理设备在一次GetBulk报文交互时,执行GetNext操作的次数。
  • SNMPv3SNMPv3报文结构
    SNMPv3定义了新的报文格式,其报文结构如图1-6所示。
    图1-6  SNMPv3报文结构


    SNMP报文中的主要字段定义如下:
    • 版本:表示SNMP的版本,SNMPv3报文则对应字段值为2。
    • 报头数据:主要包含消息发送者所能支持的最大消息尺寸、消息采用的安全模式等描述内容。
    • 安全参数:包含SNMP实体引擎的相关信息、用户名、认证参数、加密参数等安全信息。
    • Context EngineID:SNMP唯一标识符,和PDU类型一起决定应该发往哪个应用程序。
    • Context Name:用于确定Context EngineID对被管理设备的MIB视图。
    • SNMPv3 PDU:包含PDU类型、请求标识符、变量绑定列表等信息。其中SNMPv3 PDU包括GetRequest PDU、GetNextRequest PDU、SetRequest PDU、Response PDU、Trap PDU和GetBulkRequest PDU。

    SNMPv3的体系结构
    SNMPv3提出了一个新的SNMP体系结构,这个体系结构为各种基于SNMP的NMS提供了一个通用的实现模型,即SNMPv3实体。SNMPv3实体可以分为SNMPv3引擎(SNMPv3 Engine)和SNMPv3应用程序(SNMPv3 Application),引擎与应用程序均由多个小模块组成。
    SNMPv3实体这种模块化的结构有以下优点:
    • 适应性强:适用于多种操作环境,既可以管理最简单的网络,又能够满足复杂网络的管理需求。
    • 方便管理:SNMP框架体系由多个功能相对独立的子系统或应用程序集合而成,因而可以很方便地对其进行管理。例如,若系统发生了故障,可以根据发生故障的功能类型,定位到相应的子系统。
    • 扩展性好:通过SNMP实体,可以很方便地进行系统扩展。比如,为了应用新的安全协议,就可以在安全子系统中为其定义单独的模块,从而在SNMP中支持该协议。

    SNMPv3由于采用了用户安全模块USM(User Security Model)和基于视图的访问控制模块VACM(View-based Access Control Model),在安全性上得到了提升。
    • USM:提供身份验证和数据加密服务。实现这个功能要求NMS和Agent必须共享同一密钥。
      • 身份验证:身份验证是指Agent或NMS接到信息时首先必须确认信息是否来自有权限的NMS或Agent并且信息在传输过程中未被改变。HMAC是一种使用安全哈希函数和密钥来产生信息验证码的有效工具,在互联网中得到了广泛的应用。SNMP使用的HMAC可以分为两种:HMAC-MD5-96和HMAC-SHA-96。前者的哈希函数是MD5,使用128位authKey作为输入。后者的哈希函数是SHA-1,使用160位authKey作为输入。
      • 加密:加密算法实现主要通过对称密钥系统,它使用相同的密钥对数据进行加密和解密。加密的过程与身份验证类似,也需要管理站和代理共享同一密钥来实现信息的加密和解密。SNMP使用以下二种加密算法:
        • DES:使用56bit的密钥对一个64bit的明文块进行加密。
        • AES:使用128bit、192bit或256bit密钥长度的AES算法对明文进行加密。

    • VACM:对用户组或者团体名实现基于视图的访问控制。用户必须首先配置一个视图,并指明权限。用户可以在配置用户或者用户组或者团体名的时候,加载这个视图达到限制读写操作或Trap的目的。



    SNMPv3的工作原理
    SNMPv3的实现原理和SNMPv1/SNMPv2c基本一致,唯一的区别是SNMPv3增加了身份验证和加密处理。下面以Get操作为例介绍下SNMPv3的工作原理。
    假定NMS想要获取被管理设备MIB节点sysContact的值,使用认证加密方式,过程如图1-7所示:图1-7  SNMPv3的Get操作


    • NMS:向Agent发送不带安全参数的Get请求报文,向Agent获取Context EngineID、Context Name和安全参数(SNMP实体引擎的相关信息)。
    • Agent:响应NMS的请求,并向NMS反馈请求的参数。
    • NMS:再次向Agent发送Get请求报文,报文中各字段的设置如下:
      • 版本:SNMPv3版本。
      • 报头数据:指明采用认证、加密方式。
      • 安全参数:NMS通过配置的算法计算出认证参数和加密参数。将这些参数和获取的安全参数填入相应字段。
      • PDU:将获取的Context EngineID和Context Name填入相应字段,PDU类型设置为Get,绑定变量填入MIB节点名sysContact,并使用已配置的加密算法对PDU进行加密。

    • Agent:首先对消息进行认证,认证通过后对PDU进行解密。解密成功后,Agent根据请求查询MIB中的sysContact节点,得到sysContact的值并将其封装到Response报文中的PDU,并对PDU进行加密,向NMS发送响应。如果查询不成功或认证、解密失败,Agent会向NMS发送出错响应。








  • 游客,如果您要查看本帖隐藏内容请回复














发表于 2021-7-19 17:16:45 | 显示全部楼层
感谢分享谢谢
沙发 2021-7-19 17:16:45 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2021-8-5 09:41:21 | 显示全部楼层
555555555555555555555
5# 2021-8-5 09:41:21 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2021-8-12 15:59:11 | 显示全部楼层
学习学习学习
7# 2021-8-12 15:59:11 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2021-8-12 15:59:30 | 显示全部楼层
收藏收藏收藏
8# 2021-8-12 15:59:30 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2021-8-12 15:59:39 | 显示全部楼层
谢谢楼主分享
9# 2021-8-12 15:59:39 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2022-5-2 23:26:44 | 显示全部楼层
谢谢分享                     
10# 2022-5-2 23:26:44 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2022-5-27 16:09:46 | 显示全部楼层
原理太深的话看不懂噢
12# 2022-5-27 16:09:46 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2022-8-23 23:32:18 | 显示全部楼层
里面的有些命令有错误,害我不浅啊。。。。。
15# 2022-8-23 23:32:18 回复 收起回复
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-2-23 04:26 , Processed in 0.109695 second(s), 26 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表