SNMP

SNMP

SNMP(Simple Network Management Protocol,简单网络管理协议)广泛用于网络设备的远程管理和操作。SNMP允许管理员通过NMS(网络管理系统)对网络上不同厂商、不同物理特性、采用不同互联技术的设备进行管理,包括状态监控、数据采集和故障处理。

SNMP的网络架构


SNMP网络架构由三部分组成:NMS、Agent和MIB。

·NMSNetwork Management System,网络管理系统)是SNMP网络的管理者,能够提供友好的人机交互界面,方便网络管理员完成大多数的网络管理工作。

·AgentSNMP网络的被管理者,负责接收、处理来自NMS的SNMP报文。在某些情况下,如接口状态发生改变时,Agent也会主动向NMS发送告警信息。

·MIBManagement Information Base,管理信息库)是被管理对象的集合。NMS管理设备的时候,通常会关注设备的一些参数,比如接口状态、CPU利用率等,这些参数就是被管理对象,在MIB中称为节点。每个Agent都有自己的MIB。MIB定义了节点之间的层次关系以及对象的一系列属性,比如对象的名称、访问权限和数据类型等。被管理设备都有自己的MIB文件,在NMS上编译这些MIB文件,就能生成该设备的MIB。NMS根据访问权限对MIB节点进行读/写操作,从而实现对Agent的管理。

NMS、Agent和MIB之间的关系如图:

MIB以树状结构进行存储。树的每个节点都是一个被管理对象,它用从根开始的一条路径唯一地识别(OID)。如图所示,被管理对象B可以用一串数字{1.2.1.1}唯一确定,这串数字是被管理对象的OID(Object Identifier,对象标识符)。

MIB视图是MIB的子集合,将团体名/用户名与MIB视图绑定,可以限制NMS能够访问的MIB对象。当用户配置MIB视图包含某个MIB子树时,NMS可以访问该子树的所有节点;当用户配置MIB视图不包含某个MIB子树时,NMS不能访问该子树的所有节点。

 

 

SNMP基本操作

SNMP提供四种基本操作:

·Get操作:NMS使用该操作查询Agent MIB中节点的值。

·Set操作:NMS使用该操作配置Agent MIB中节点的值。

·告警操作:SNMP告警包括Trap和Inform两种。

⑴Trap操作:Agent使用该操作向NMS发送Trap报文。Agent不要求NMS发送回应报文,NMS也不会对Trap报文进行回应。SNMPv1、SNMPv2c和SNMPv3均支持Trap操作。

⑵Inform操作:Agent使用该操作向NMS发送Inform报文。Agent要求NMS发送回应报文,因此,Inform报文比Trap报文更可靠,但消耗的系统资源更多。如果Agent在一定时间内没有收到NMS的回应报文,则会启动重发机制。只有SNMPv2c和SNMPv3支持Inform操作。

SNMP版本介绍

目前,设备运行于非FIPS模式时,支持SNMPv1、SNMPv2c和SNMPv3三种版本;设备运行于FIPS模式时,只支持SNMPv3版本。只有NMS和Agent使用的SNMP版本相同,NMS才能和Agent建立连接。

·SNMPv1采用团体名(Community Name)认证机制。团体名类似于密码,用来限制NMS和Agent之间的通信。如果NMS配置的团体名和被管理设备上配置的团体名不同,则NMS和Agent不能建立SNMP连接,从而导致NMS无法访问Agent,Agent发送的告警信息也会被NMS丢弃。

·SNMPv2c也采用团体名认证机制。SNMPv2c对SNMPv1的功能进行了扩展:提供了更多的操作类型;支持更多的数据类型;提供了更丰富的错误代码,能够更细致地区分错误。

·SNMPv3采用USMUser-Based Security Model基于用户的安全模型)认证机制。网络管理员可以配置认证和加密功能。认证用于验证报文发送方的合法性,避免非法用户的访问;加密则是对NMS和Agent之间的传输报文进行加密,以免被窃听。采用认证和加密功能可以为NMS和Agent之间的通信提供更高的安全性。

 

NETCONF

NETCONF(Network Configuration Protocol,网络配置协议)是一种基于XML的网络管理协议,它提供了一种可编程的、对网络设备进行配置和管理的方法。用户可以通过该协议设置参数、获取参数值、获取统计信息等。这使得他在第三方软件的开发上非常便利,很容易开发出在混合不同厂商、不同设备的环境下的特殊定制的网管软件。

用户可通过以下三种方式来使用NETCONF协议配置/管理设备:

· 用户可以通过Telnet、SSH、Console登录到设备的CLI界面,通过命令行界面编辑下发NETCONF指令。该方式一般用于研发和测试环境。在XML视图下,将合法的NETCONF报文直接拷贝、粘贴到命令行提示符处,即可验证设备的NETCONF功能是否运行正常。

· 非FIPS模式下,用户可以通过HTTP、HTTPS登录到设备的Web页面,系统会自动将Web页面的配置转换成NETCONF指令下发给设备来实现对设备的访问;FIPS模式下,用户可以通过HTTPS登录到设备的Web页面,系统会自动将Web页面的配置转换成NETCONF指令下发给设备来实现对设备的访问。该方式为NETCONF最普遍的使用方式,用户在简洁易用的图像化Web页面上完成配置,配置结果也会以简洁清晰的方式呈现给用户,整个NETCONF的交互过程对用户透明。

· 用户使用自己开发的配置工具给设备下发NETCONF指令来实现对设备的访问。此时需要将下发NETCONF指令用SOAP封装成通用的格式,以便设备能够正常转换。因此,使用该方式前必须开启NETCONF over SOAP功能。

 

 

RBAC

RBAC(Role Based Access Control,基于角色的访问控制)通过建立“权限<->角色”的关联实现将权限赋予给角色,并通过建立“角色<->用户”的关联实现为用户指定角色,从而使用户获得相应角色所具有的权限。RBAC的基本思想就是给用户指定角色,这些角色中定义了允许用户操作哪些系统功能以及资源对象。RBAC采用权限与用户分离的思想,提高用户权限分配的灵活性,减小用户授权管理的复杂度,降低管理开销。

 

总结:SNMP为一个进行网络管理的协议,假设设备支持该协议,则可以通过可以进行网络管理的工具,对设备进行集中管理,目前华三网络设备管理的工具为IMC(intelligence management control),相当于SNMP三部分中的NMS,其界面如图:

Mib Browser工具是用来测试SNMP协议的工具,NETCONF是类似于SNMP的网络管理协议,是用XML语言编写的。

 

 

05-12
### SNMP协议概述 SNMP(Simple Network Management Protocol)是一种用于管理和监控网络设备的应用层协议[^3]。它最初于1988年被制定,并迅速成为互联网环境中广泛使用的网络管理解决方案之一。目前,SNMP已经发展到了第三版(SNMPv3),提供了更高的安全性和功能性。 #### 协议组成与架构 SNMP的核心组成部分包括以下几个方面: - **管理站(Manager)**:负责发送请求并接收来自代理的信息。 - **代理(Agent)**:运行在网络设备上的程序,收集本地系统的数据并通过SNMP向管理站报告。 - **管理信息库(MIB, Management Information Base)**:定义了一组对象及其语义,供SNMP使用以描述网络资源的状态和性能指标。 SNMP的架构通常分为两种模式: - **主代理模式**:由单一代理直接响应管理站发出的所有查询请求[^1]。 - **子代理模式**:通过引入额外的子代理分担工作负载,其中每个子代理专注于特定类型的MIB视图。这种设计增强了灵活性和可扩展性,尤其是在复杂的分布式环境当中[^4]。 #### 配置指南 以下是针对基于Cisco IOS平台配置SNMP服务的一些基本指导: 1. 启用SNMP服务 要启用SNMP功能,可以通过设置读取团体字符串来允许远程管理系统访问设备的数据。例如: ```shell snmp-server community public RO ``` 2. 设置陷阱目标地址 如果希望当某些事件发生时通知指定的管理站点,则需配置trap receiver参数如下所示: ```shell snmp-server host 10.0.0.1 version 2c private ``` 3. 安全加固措施 对于不再需要的服务应当及时停用以防潜在风险暴露在外网之中。比如停止不必要的SNMP操作可通过下面这条指令完成: ```shell no snmp-server enable traps ``` 若要验证当前状态是否已成功关闭,可以借助`show snmp`命令查看详细情况[^2]。 需要注意的是以上例子仅适用于支持IOS系列固件的产品线;而对于其他品牌或者型号则可能有所差异,请参照对应手册获取确切步骤说明。 --- ### 示例代码片段 以下是一个简单的Python脚本示例,展示如何利用pysnmp库从远程主机检索系统名称OID (`.1.3.6.1.2.1.1.5`) 的值: ```python from pysnmp.hlapi import * errorIndication, errorStatus, errorIndex, varBinds = next( getCmd(SnmpEngine(), CommunityData('public'), UdpTransportTarget(('demo.snmplabs.com', 161)), ContextData(), ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysName', 0))) if errorIndication: print(errorIndication) elif errorStatus: print('%s at %s' % (errorStatus.prettyPrint(), errorIndex and varBinds[int(errorIndex)-1][0] or '?')) else: for varBind in varBinds: print(' = '.join([x.prettyPrint() for x in varBind])) ``` 此段代码展示了如何构建GET请求以及解析返回的结果集。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值