snmp总结一:概述

snmp总结一:概述

  1. SNMP概述

    SNMP是英文"Simple Network Management Protocol"的缩写,中文意思是"简单网络管理协议"。SNMP是一种简单网络管理协议,它属于TCP/IP五层协议中的应用层协议,用于网络管理的协议。SNMP主要用于网络设备的管理。由于SNMP协议简单可靠 ,受到了众多厂商的欢迎,成为了目前最为广泛的网管协议。

    SNMP是管理进程(NMS)和代理进程(Agent)之间的通信协议。它规定了在网络环境中对设备进行监视和管理的标准化管理框架、通信的公共语言、相应的安全和访问控制机制。网络管理员使用SNMP功能可以查询设备信息、修改设备的参数值、监控设备状态、自动发现网络故障、生成报告等。

    SNMP具有以下技术优点:

  • 基于 TCP/IP 互联网的标准协议,传输层协议一般采用 UDP。
  • 自动化网络管理。网络管理员可以利用 SNMP 平台在网络上的节点检索信息、修改信息、发现故障、完成故障诊断、进行容量规划和生成报告。
  • 屏蔽不同设备的物理差异,实现对不同厂商产品的自动化管理。SNMP 只提供最基本的功能集,使得管理任务与被管设备的物理特性和实际网络类型相对独立,从而实现对不同厂商设备的管理。
  • 简单的请求---应答方式和主动通告方式相结合,并有超时和重传机制。
  • 报文种类少,报文格式简单,方便解析,易于实现。
  • SNMPv3 版本提供了认证和加密安全机制,以及基于用户和视图的访问控制功能,增强了安全性。
  1. SNMP网络架构

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

2.1 NMS简介

复制代码
NMS是网络中的管理者,是一个利用SNMP协议对网络设备进行管理和监视的系统。NMS既可以指一台专门用来进行网络管理的服务器,也可以指某个设备中执行管理功能的一个应用程序。NMS可以向Agent发出请求,查询或修改一个或多个具体的参数值。同时,NMS可以接收Agent主动发送的Trap信息,以获知被管理设备当前的状态。

2.2 Agent简介

复制代码
Agent是网络设备中的一个应用模块,用于维护被管理设备的信息数据并响应NMS的请求,把管理数据汇报给发送请求的NMS。

Agent接收到NMS的请求信息后,完成查询或修改操作,并把操作结果发送给NMS,完成响应。同时,当设备发生故障或者其他事件的时候,Agent会主动发送Trap信息给NMS,通知设备当前的状态变化。

2.3 MIB简介

复制代码
任何一个被管理的资源都表示成一个对象,称为被管理的对象。MIB是被管理对象的集合。它定义了被管理对象的一系列属性:对象的名称、对象的访问权限和对象的数据类型等。每个Agent都有自己的MIB。MIB也可以看作是NMS和Agent之间的一个接口,通过这个接口,NMS可以对Agent中的每一个被管理对象进行读/写操作,从而达到管理和监控设备的目的。NMS、Agent和MIB之间的关系如下图所示。
  1. SNMP版本

    SNMP 主要有 SNMPv1、SNMPV2c、SNMPv3 几种最常用的版本。

3.1 SNMPv1

复制代码
SNMPv1 是 SNMP 协议的最初版本,提供最小限度的网络管理功能。SNMPv1 的 SMI 和 MIB 都比较简单,且存在较多安全缺陷。

SNMPv1 采用团体名认证。团体名的作用类似于密码,用来限制 NMS 对 Agent 的访问。如果 SNMP 报文携带的团体名没有得到 NMS/Agent 的认可,该报文将被丢弃。

3.2 SNMPv2c

复制代码
SNMPv2c 也采用团体名认证。在兼容 SNMPv1 的同时又扩充了 SNMPv1 的功能:它提供了更多的操作类型(GetBulk 操作等);支持更多的数据类型(Counter32 等);提供了更丰富的错误代码,能够更细致地区分错误。

3.3 SNMPv3

复制代码
SNMPv3 主要在安全性方面进行了增强,它采用了 USM 和 VACM 技术。USM 提供了认证和加密功能,VACM 确定用户是否允许访问特定的 MIB 对象以及访问方式。
  1. SNMP协议原理

4.1 SNMP操作

复制代码
SNMP 支持多种操作,主要为以下几种基本操作:
  • Get 操作:NMS 使用该操作从 Agent 获取一个或多个参数值。

  • GetNext 操作:NMS 使用该操作从 Agent 获取一个或多个参数的下一个参数值。

  • Set 操作:NMS 使用该操作设置 Agent 一个或多个参数值。

  • Response 操作:Agent 返回一个或多个参数值。该操作是前面三种操作的响应。

  • Trap 操作:Agent 主动发出的操作,通知 NMS 有某些事情发生。

    执行前四种操作时设备使用 UDP 协议采用 161 端口发送报文,执行 Trap 操作时设备使用 UDP 协议采用 162 端口发送报文。由于收发采用了不同的端口号,所以一台设备可以同时作为 Agent 和 NMS。

4.2 SNMP报文

4.2.1 报文格式

复制代码
一个 SNMP 报文共有三个部分组成,即公共 SNMP 首部、get/set 首部、trap 首部、变量绑定。

4.2.2 编码规则 BRE

复制代码
在具体系统中,我们需要用具体的编码规则将 ASN.1 语法表示的抽象数据转换成具体的比特流。SNMP 使用的编码方法是 BER(Basic Encoding Rule)。BER 的数据都由三个域构成:标识域(tag)+长度域(length)+值域(value)。

标识域 标识域 的编码规则

复制代码
标识域指明数据的类型,占用 1 个字节,常见的类型有:
BOOL(0x01); INT(0x02); OCTSTR(0x04); NULL(0x05); OBJID(0x06); ENUM(0x0A); SEQ(0x30);

SETOF(0x31); IPADDR(0x40); COUNTER(0x41); GAUGE(0x42); TIMETICKS(0x43); OPAQUE(0x44)

长度域的编码规则

复制代码
长度域指明值域的长度,不定长,一般为一到三个字节。其格式可分为短格式(后面的值域没有超过 127 长)和长格式。

length=30=>1E(30 没有超过 127,长度域为 0001 1110)

length=169=>81 A9(169 超过 127,长度域为 1000 0001 1010 1001,169 是后 8 位的值,前八位的第一个 1 表示这是长格式的表示方法,前八位的后七位表示后面有多少个字节表示针对的长度,这里,是 000 0001,后面有一个字节表示真正的长度,1010 1001 是 169,后面的值有 169 个字节长。)

4.2.3 实例分析

30 4b :表示整个 snmp 报文的编码方式为 30 ,即是 SEQUENCE 类型表示 snmp 报文的长度为 4b,即为 75

02 01 00 :02 表示该字段是 INTERGER 类型,01 表示该字段占用一个字节,00 表示版本号为 1

04 06 70 75 62 6c 69 63 :04 表示该字段为 OCTET STRING 类型,06 表示该字段的长度 ,70 75 62 6c 69 63 表示 "public"

a0 3e :a 是该字段的固定值,0 表示这是一个 get-request 报文,3e 表示 PUD 还有 62 个字节

02 01 48 : 02 表示该字段是 INTERGER 类型 ,01 表示该字段占用一个字节,48 表示request-id 为 72

02 01 00 :02 表示该字段是 INTERGER 类型 ,01 表示该字段占用一个字节,00 表示报文的差错状态为 0

02 01 00 :02 表示该字段是 INTERGER 类型 ,01 表示该字段占用一个字节,00 表示报文的差错索引为 0

30 33 : 30 表示编码类型为 30 ,即是 SEQUENCE 类型,33 表示后续 "键 - 值"区域占用 51 个字节

30 0f 06 0b 2b 06 01 02 01 19 03 02 01 05 01 05 00 : 30 表 示 编 码 类 型 为 30 , 即 是SEQUENCE 类型,0f 表示该字段共有 15 个字节,06 表示第一个变量为键,0b 表示键长为 11个字节,2b 06 01 02 01 19 03 02 01 05 01 表示 1.3.6.1.2.1.25.3.2.1.5.1 , 00 表示该值的字段的长度为 0,即为空