SNMP(Simple Network Management Protocol)——简单网络管理协议

发布时间 2023-04-12 16:20:06作者: 我家有只江小白

SNMP(Simple Network Management Protocol)——简单网络管理协议

 

目录

一、SNMP简介

1.背景

2.SNMP管理的网络架构

二、SNMP MIB

1.SNMP MIB简介

2.MIB分类

(1)公有MIB

(2)私有MIB

3.被管理设备的基本属性

(1)对象表示符

(2)对象的状态

(3)对象的访问权限

(4)对象的数据类型

三、SNMPv1工作原理

1.SNMPv1操作类型

2.SNMPv1报文格式

(1)Version

(2)Community

(3)SNMP PDU

(4)PDU Type

(5)Request ID

(6)Error Status

(7)Error Index

(8)Variable Bindings

(9)Enterprise

(10)Agent Addr

(11)Generic Trap

(12)Specific Trap

(13)Time Stamp

四、SNMPv2c工作原理

1.SNMPv2c报文格式

(1)Get-Request、Get-Next-Requset、Set-Request、Response和Inform PDU的格式

(2)SNMPv2c Trap PDU格式

(3)Get-Bulk-Request PDU格式

五、SNMPv3工作原理

1.SNMPv3操作类型

2.SNMPv3报文格式

一、SNMP简介
1.背景
SNMP是广泛应用于TCP/IP网络的一种通用网络管理协议,可以实现对全网中所有设备的集中管理,远比CLI和Web管理方式更加高效。而且,因为SNMP是国际通用协议,所以各大品牌设备都支持。一套SNMP的网络管理系统可以对不同种类和不同厂商的设备进行统一管理,从而提升网络的管理效率。

2.SNMP管理的网络架构
在SNMP中有两类重要的实体,一类是采用SNMP对网络设备进行监控、管理的应用层软件,在一套主机上运行着网络管理进程,使用UDP 162端口,可以被看成是SNMP客户端,每个被管理设备在配置了SNMP功能后,使用UDP 161端口和运行代理(Agent)进程,可以被看成是SNMP服务器,代理进程负责维护被管理设备的信息数据,并响应来自NMS的请求,把管理数据汇报给发送请求的NMS。

基于SNMP管理的网络架构

 

 

 

二、SNMP MIB
1.SNMP MIB简介
表面上就看,NMS管理的是设备,事实上管理的是设备商的一个个被管理对象,每台设备可能包括多个被管理对象,可以是设备中的某个硬件(如某个设备接口),也可以是在硬件、软件上配置的参数集合。SNMP通过MIB描述被管理设备商的各个对象。

被管设备上的代理进程收到NMS的请求信息,通过MIB完成响应的指令后,并把操作结果响应给NMS,当系统发声故障或者发生其他事件时,设备也会通过代理进程主动发从Trap信息给NMS,报告设备当前的状态变化。

SNMP中的MIB是一个分层结构,我们称为对象命名树,或对象标识符(OID)树

SNMP MIB对象命名树

 

 

 

在MIB对象命名树中,每一个节点代表一类对象。每类对象既有一个名称,又有一个节点标识,就是小括号中的数字。节点标识只要求在树中同层次节点间唯一,分支中各节点标识以小圆点(.)分隔,由上至下串行连接起来就形成了OID,每个对象的OID在整个对象命名树中时唯一的。

MIB对象命名树的顶级对象有三个,即ITU-T的ccitt(0),IOS的ios(1)和ITU-T、IOS两个组织的联合体join-ios-ccitt(2),形成了3个子树,这3个顶级对象旁边的数字代表了它们对应的标识,分别是0、1、2。

2.MIB分类
(1)公有MIB
一般由RFC定义,主要用来对各种公有协议(IP、ICMP、TCP、UDP等)进行结构化设计和接口标准化处理。大多数的设备制造商都需要按照RFC的定义来提供SNMP接口,这部分对应的MIB是对象命名树中的mib节点下面的对象。

 

 

 

(2)私有MIB
是公有MIB的必要补充。公司自行研发的私有协议或者特有功能时,可以利用私有MIB来完善SNMP接口的管理功能,同时对第三方网络管理软件管理存在私有协议或特有功能的设备提供支持,这部分对应的MIB是在internet(1)-private(4)-enterprise(1)节点下面的对象。

3.被管理设备的基本属性
(1)对象表示符
就是由对象所在分支中各节点对象的节点表示,自上而下以小圆点分隔组成的一串数字,如mib对象的OID为1.3.6.1.2.3.

(2)对象的状态
包括current(当前可用)、mandatory(必备)、optional(可选)、obsolete(禁用)、deprecate(已废弃)等,不同的SNMP版本支持的状态类型不完全一样。

(3)对象的访问权限
包括read-only(只读)、read-write(读写、可以读写、修改配置信息)、read-create(可以读取信息,修改配置,新增配置和删除配置)和no-accessible(不可存取、无法进行任何操作),不同的SNMP版本支持权限完全不一样。

(4)对象的数据类型
包括integer32、octetsring、object identifier、bull、ipaddress、counter32、counter64、gauge32、unsigned32、timeticks、opaque、BIT STRING等,不同的SNMP版本支持的数据类型完全不一样。

三、SNMPv1工作原理
SNMPv1采用团体名(类似于共享密码)认证,用来限制NMS对代理进程的访问,如果SNMP报文携带的团体名没有通过认证,则该SNMP报文将被丢弃。

1.SNMPv1操作类型
SNMPv1定义了5种操作类型

(1)Get-Request:NMS从代理进程的MIB中提取一个或多个参数值

(2)Get-Next-Request:NMS从代理进程的MIB中按照排序提取下一个参数值。

(3)Set-Request:NMS请求设置代理进程的MIB中的一个或多个参数请求。

(4)Response:代理进程返回一个或多个参数值,是对前3种请求操作的响应

(5)Trap:代理进程主动向NMS发送报文,告知设备上发生的紧急或重要事件。(如CPU使用率过高),但SNMPv1中的Trap报文无须NMS进行响应。

SNMPv1各种操作的交互方式

 

 

 

上面的5种操作,Get-Request,Get-Next-Request,Set-Request这3种请求操作与Response响应操作采用的是拉(pull)的方式,必须是先有请求,后有应答,即应答是非主动。而Trap操作是推(push)的方式,是由代理进程主动向NMS发送的,无须NMS请求。

2.SNMPv1报文格式
以上5种SNMPv1操作均有对应的SNMP报文,称为PDU(协议数据单元),采用相同的SNMP头部,基本格式如下:

SNMPv1报文格式

 

 

 

(1)Version
SNMP版本,是对应的版本号-1,如SNMPv1的本字段值为0。

(2)Community
团体名,用于代理进程与NMS之间的认证,有可读和可写两种,如果是执行Get,GetNext操作,则采用可读团体名进程认证,如果是执行Set操作,则采用可写团体名进行认证,这样可对不同管理人员的权限进行区分。

(3)SNMP PDU
是SNMPv1中的5种操作的消息内容,下面是各字段的具体介绍

SNMPv1的5中PDU格式

 

 

 

(4)PDU Type
代表PDU类型,Get-Request,Get-Next-Request,Response,Set-Request和Trap PDU的取值分别为0到4。

(5)Request ID
请求PDU ID,Response PDU的Request ID要与对应的Get-Requset、Get-Next-Request和Set-Request请求PDU中的Request ID一致。

(6)Error Status
表示在处理请求PDU时出现的粗偶状态,如noError(无错误)、tooBig(响应内容太多,无法封装在PDU中)、noSuchName(请求操作了一个不存在的变量)、badValue(Set操作使用了一个无效值或语法错误值)、readOnly(set操作试图修改一个只读属性的变量)、genErr(其他通用错误)。SNMPv1支持的错误类型比较少,没有细分,不便于故障分析。

(7)Error Index
差错索引,当出现异常情况时,提供变量绑定列表中导致异常的变量的信息。

(8)Variable Bindings
变量绑定列表,由变量名和对应变量值组成,一个变量绑定列表中可以包括多变量。

(9)Enterprise
生成Trap信息的设备类型,以OID表示

(10)Agent Addr
Trap源(代理进程)的IP地址

(11)Generic Trap
通用Trap类型,以具体的ID值表示,包括coldStart(发生了冷启动事件,取值为0)、warmStart(发生了热启动事件,取值为1)、linkDown(发生了链路关闭事件,取值为2)、Linkup(发生了激活链路事件,取值为3)、authenticationFailure(发生了认证失败事件,取值为4)、egpNeighborLoss(发生了EGP邻居丢失事件,取值为5)、enterpriseSpecific(发生了厂商自定义事件,取值为6)。

(12)Specific Trap
企业自定义的私有Trap信息。

(13)Time Stamp
自上次重新初始化网络实体开始,到产生Trap消息时已持续的时间,即sysUpTime对象的取值。

四、SNMPv2c工作原理
SNMPv2c两种新操作的交互方式

 

 

 

1.SNMPv2c报文格式
以上7种SNMP报文均使用如图所示的SNMP报头,但SNMPv2c的版本号为1。

(1)Get-Request、Get-Next-Requset、Set-Request、Response和Inform PDU的格式
Get-Request、Get-Next-Requset、Set-Request、Response四种PDU格式与SNMPv1对应的PDU格式一样,Inform PDU格式与SNMPv1 Get-Request、Get-Next-Requset和Set-Request这3种PDU格式一样。Get-Request、Get-Next-Requset、Set-Request、Response四种PDU的PDU Type字段值仍分别为0到3,但是Get-Bulk-Request、Inform和Trap PDU的PDU Type字段分别为5到7。

在SNMPv2c版本Response PDU的Error Status字段增加了更多错误类型,具体如下:

①wrongValue:进行set操作时候把变量修改为一个无效的值。

②wrongEncoding:错误的编码字段值。

③wrongType:进行set操作时候把变量修改为一个无效的类型。

④wrongLength:进行set操作时候把一个变量值设置成与它长度不一致的值。

⑤wrongValue:把一个变量设置为当前情况下无效的值。

⑥inconsistentValue:把一个变量设置为当前情况下无效的值。

⑦noAccess:试图设置一个不可访问的值。

⑧notWritable:视图修改一个存在,但不能修改的值。

⑨noCreation:试图修改一个存在,但不能创建的值。

⑩inconsistentName:试图设置一个当前不存在且不能创建的变量。

⑪commitFailed:set操作失败

⑫undoFailed:进行set操作失败,有些赋值无法回复

⑬genErr:除以上错误外的其他错误。

(2)SNMPv2c Trap PDU格式
它的格式与SNMPv1中的Trap PDU格式有所不同,它采用了SNMPv1的Get/Get-Next/Set PDU的请求PDU格式,但其PDU Type字段值为7,并将sysUpTime和snmpTrapOID作为Variable Bindings中的变量来构造报文。

(3)Get-Bulk-Request PDU格式
Get-Bulk-Request PDU的PDU Type字段值为5,格式与其他PDU格式有所不同,具体如下:

SNMPv2c Get-Bulk-Request PDU

 

 

 

①Non repeaters:指出在变量绑定列表中每次只返回一个后继变量(每次返回只包含一个变量)的变量数,告诉Get-Bulk命令可以通过简单的Get-Next操作检索前N个对象。

②Max repetitions:指出在变量绑定列表中除Non repeaters字段指定范围的变量外,其他变量可以返回的最大的后继变量数(每次可以返回多个变量)告诉Get-Bulk命令尝试使用M次Get-Next操作来检索变量绑定表中其余的变量。

假设一个Get-Bulk变量绑定为列表中有1到10号共10个变量。如果在Get-Bulk操作中Non repeaters字段值设为3,Max repetitions字段值设为4,则一次请求后将发声以下多次应答。

①因为Non repeaters字段值为3,所变量绑定列表中1到3号3个变量相当于对每个变量执行一次Get-Next操作,每次只请求返回后面的一个变量的值,这样一来,第一次Response报文中只返回第一个变量的值,第二次的Response报文中返回第二个变量的值,第三次的Response报文中返回第三个变量的值,这些Responsen报文中每个只包含一个变量对应的值。

②变量绑定表中前3个变量的值返回后,要对其余变量进行请求,因为Non repeaters字段值为4,所以每次最多可返回4个变量的值,第一次(总共请求是4次)的Response报文中返回4到7号共4个变量的值,第二次(总共是第五次)的Response报文中返回8到10号共3个变量的值(因为变量列表中没有其余变量了,所以本次仅返回3个变量的值)。

五、SNMPv3工作原理
SNMPv3是在SNMPv2c基础之上增加了完全机制,完善了管理机制,提供了USM的认证加密和VACM的访问控制,包括多个RFC。

1.SNMPv3操作类型
SNMPv3操作类型SNMPv2c基本是一致的,包括Get-Request、Get-Next-Requset、Set-Request、Response、Get-Bulk-Request、Inform、Trap7种(包括一个未定义具体的操作ReportPDU)

USM(基于用户安全模型)引入了用户名和组的概念,可以设置认证和加密功能。认证用于验证报文发送方的合法性,避免非法用户的访问:加密则是对NMS和Agent之间传输的报文进行加密,以免被窃听。通过有无认证和无加密等功能组合,可以为NMS何Agent之间的通信提供更高的安全保障。

VACM(基于视图的访问控制)技术定义了组、安全等级、上下文、MIB视图、访问策略5个元素。这些元素同时决定用户是否具有访问的权限,只有具有了访问权限的用户才能管理操作对象。同一个SNMP实体上可以定义不同的组,组与MIB视图绑定,组内又可以定义多个用户。当使用某个用户名进行访问的时候,只能访问对应的MIB视图定义对象。

SNMPv3的操作交互流程

 

 

 

交互流程如下:

(1)NMS向代理进程发送不带安全参数、认证、加密标志位均置0的Get-Request消息,以获取参数信息,主要从Agent获取AuthoritativeEngineID(标识一个SNMP实体)信息。

(2)代理进程发送不带安全参数,认证、加密标志位置0的Response消息响应NMS的请求,恢复NMS所请求侧参数。

(3)NMS向代理进程发送带安全的参数,认证、加密标志位置1的Get-Request消息,请求AuthoritativeEngineBoots和AuthoritativeEngineTime信息。

(4)代理进程对NMS发送的Get-Request消息进行认证,认证通过后对消息进行解密,认证标志位置1、加密标志位均置0,向NMS发送加密的Response消息,回复SNMP所请求的AuthoritativeEngineBoots和AuthoritativeEngineTime消息。

2.SNMPv3报文格式

 

 


①Version:SNMP版本号

②Msg ID:消息序列号(与v1和v2中的Request ID字段意义类似)响应报文中的Msg ID和请求报文中的值相同。

③Msg Max size:消息发送这支持的最大的消息尺寸,同时表明了发送者能够接收到的最大字节数。

④Msg Sec Model:指明了发送方采用的安全模式,取值为0到3,0表示任何模型,1表示采用SNMPv1安全模型,2表示采用SNMPv2安全模型,3表示SNMPv3安全模型。

⑤Msg Flag:请求报文指定是否要求回应report消息,消息是否进行了加密和认证。

⑥Security Parameters:包括了用户名、密钥、加密参数等安全信息。

⑦Context Engine ID:上下文引擎ID,SNMP实体唯一标识符,对于接收消息,该字段确定消息该如何处理,对于发送消息,该字段在发送一个消息请求时由应用提供。

⑧Contex Name:上下文名称,唯一标识在相关联的上下文引擎范围内部特定的上下文

⑨Data:数据内容。