SNMP:简单网络管理协议第1,2,3版

2024-04-02 20:58

本文主要是介绍SNMP:简单网络管理协议第1,2,3版,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SNMP 是专门设计用于在 IP 网络中管理网络节点(服务器、工作站、路由器、交换机及 HUB 等)的一种标准协议,它是一种应用层协议。 SNMP 使网络管理员能够管理网络效能,发现并解决网络问题以及规划网络增长。通过 SNMP 接收随机消息(及事件报告)网络管理系统获知网络出现问题。

 

  目前 SNMP 有 3 种版本 SNMPV1 、 SNMPV2 、 SNMPV3 。本篇将介绍 SNMPV1 信息。

 

  SNMPV1 是一种简单的请求 / 响应协议。网络管理系统发出一个请求,管理器则返回一个响应。这一行为的实现是通过使用四种协议操作中的其中任一种完成的。这四种操作分别是 GET 、 GETNEXT 、 SET 和 TRAP 。 NMS 通过 GET 操作,从 SNMP 代理处得到一个或更多的对象(实例)值。如果代理处不能提供请求列表中所有的对象(实例)值,它也就不提供任何值。 NMS 使用 GETNEXT 操作请求代理从请求列表或对象列表中取出下一个对象实例值。 NMS 通过 SET 操作向 SNMP 代理发送命令,要求对对象值重新配置。 SNMP 代理通过 TRAP 操作不定时的通知 NMS 所发生的特定事件。

 

  有关 SNMP 、 SNMPV2 及 SNMPV3 的相关信息,请查阅对应章节。

 

        协议结构

 

  SNMP 是一种应用程序协议,封装在 UDP 中。各种版本的 SNMP 信息通用格式如下所示:

 

Version         Community         PDU

 

    * Version:SNMP 版本号。管理器和代理器必须使用相同版本的 SNMP。需要删除具有不同版本号的信息,并不对它们作进一步的处理。

    * Community:团体名称,用于在访问代理器之前认证管理器。

    * PDU(SNMPv1):具有五种不同类型的 PDU:GetRequest、GetNextRequest、GetResponse、SetRequest 和 Trap。有关每部分的详细介绍请参见以下部分:

 

 

  GetRequest、GetNext Request、GetResponse 和 SetRequest PDUs 格式如下所示:

 

PDU Type         Request ID         Error Status         Error Index         Object 1,Value 1         Object 2,Value 2         …

 

    * PDU Type:指定传输的 PDU 类型:0 GetRequest;1 GetNextRequest;2 GetResponse;3 SetRequest。

    * Request ID:连接 SNMP 请求和响应。

    * Error Status:指出一个错误及错误类型。只有响应操作可以设置该字段,其它操作设置该字段为0。

    * Error Index:连接一个错误和一个特殊的对象实例。只有响应操作可以设置该字段,其它操作设置该字段为0。

    * Variable Bindings:用作 SNMPv1 PDU 的数据字段。每个变量绑定在当前值(除 Get 和 GetNext 请求之外,它们中值忽略不计)下都对应一个特殊对象实例

 

 

  Trap PDU 格式如下所示:

 

PDU Type         Enterp         Agent Addr         Gen Trap         Spec Trap         Time Stamp         Obj 1,Val 1         Obj 1,Val 1         …

 

    * PDU Type:指定传输的 PDU 类型(Trap=4)。

    * Enterprise:识别管理企业,在其注册权下定义 Trap。

    * Agent Address:代理器的 IP 地址,用于进一步的识别。

    * Generic Trap Type:描述事件报告字段,以下定义了7个值。

    * Specific Trap Type:当通用 Trap 成为企业指定类型时,用于识别非通用 Trap。

    * Timestamp:SysUpTime 对象值,表示最后一次设置初值和产生对应 Trap 间的时间数量。

SNMPV2 由 SNMPV1 演化而来。 SNMPV1 中的 GET 、 GETNEXT 及 SET 操作同样适用于 SNMPV2 ,只是 SNMPV2 添加和增强了有关协议操作。例如 SNMPV2 中的 TRAP 操作,不但具备 SNMPV1 中 TRAP 的相同功能,而且它采用了一种不同的消息格式,它用于替换 SNMPV1 中的 TRAP 。

 

  SNMPV2 中还定了两种新操作,即 GET BULK 和 INFORM 。 NMS 通过 GET BULK 操作能有效地获取大块数据,如对象列表中的多行。请求多少数据 GETBULK 返回一个包含尽可能多的请求数据的应答消息。 INFORM 操作使的一个 NMS 能发送 TRAP 给另一个 NMS 并能收到回复。 SNMPV2 中,如果回复 GET BULK 操作的 SNMP 代理不能提供请求表中所有变量值,那么 SNMP 代理只提供部分结果。

 

  有关 SNMP 、 SNMPV1 及 SNMPV3 的相关信息,请查阅对应章节。

 

        协议结构

 

  SNMP 是一种应用程序协议,封装在 UDP 中。各种版本的 SNMP 信息通用格式如下所示:

 

Version         Community         PDU

 

    * Version:SNMP 版本号。管理器和代理器必须使用相同版本的 SNMP。需要删除具有不同版本号的信息,并不对它们作进一步的处理。

    * Community:团体名称,用于在访问代理器之前认证管理器。

    * PDU(协议数据单元):SNMPv1、v2 和 v3 中的 PDU 类型和格式将在对应文件中作具体介绍。

 

  在 SNMPv2 中,Get、GetNext、Inform、Response、Set 和 Trap PDUs 具有以下格式:

 

PDU Type         Request ID         Error Status         Error Index         Object 1,value 1         Object 2,value 2         …

 

    * PDU Type:识别传输的 PDU 类型(Get、GetNext、Inform、Response、Set 或 Trap)。

    * Request ID:连接 SNMP 请求和响应。

    * Error Status:指出一个错误及错误类型。只有响应操作可以设置该字段,其它操作设置该字段为0。

    * Error Index:连接一个错误和一个特殊的对象实例。只有响应操作可以设置该字段,其它操作设置该字段为0。

    * Variable Bindings:用作 SNMPv2 PDU 的数据字段(值1,值2…)。每个变量绑定在当前值(除 Get 和 GetNext 请求之外,它们中值忽略不计)下都对应一个特殊对象实例。

 

 

SNMPv2 GetBulk PDU格式如下:

 

PDU Type         Request ID         Non Repeaters         Max Repetitions         Obj 1, Val 1         Obj 1, Val 1         …

 

    * PDU Type:识别 PDU 为 GetBulk 操作。

    * Request ID:连接 SNMP 请求和响应。

    * Non Repeaters:指定变量绑定字段中的对象实例号,并从请求开始多次进行检索。当实例是只有一个变量的标量对象时,使用该字段。

    * Max Repetitions:定义除 Non Repeaters 字段指定的变量以外的变量检索次数最大值。

    * Variable Bindings:用作 SNMPv2 PDU 数据字段(对象1,对象2……)。每个变量绑定在当前值(除 Get 和 GetNext 请求之外,它们中值忽略不计)下都对应一个特殊对象实例。

与前两种版本相比, SNMPV3 中增加了安全管理方式及远程控制。 SNMPV3 结构引入了基于用户的安全模型用于保证消息安全及基于视图的访问控制模型用于访问控制(USM)。这种安全管理方式支持不同安全性,访问控制及消息处理等模式的并发使用,其具体说明如下:  

 

    * 安全性

    * 认证和隐私

    * 授权和访问控制

    * 管理框架

    * 实体命名

    * 人员和政策

    * 用户名及密钥管理

    * 通知目标文件

    * 代理关系

    * SNMP 中的远程配置

 

  SNMPV3 使用 SNMP SET 命令配置 MIB 对象,使之能动态配置 SNMP 代理。这种动态配置方式支持本地或远程地配置实体的添加、删除及修改。

 

  有关 SNMP 、 SNMPV1 及 SNMPV2 的相关信息,请查阅对应章节。

 

        协议结构

 

  SNMPv3 信息格式:

 

Msg Processed by MPM (Msg Processing Model)

Version         ID         Msg Size         Msg Flag         Security Model

Msg Processed by USM (User Security Module)

Authoritative Engin ID         Authoritative Boots         Authoritative Engine Time         User name         Authentication parameters         Privacy Parameter

Scoped PDU

Context engine ID         Context name         PDU

 

    * Version:SNMPv3(3)。

    * ID:用作两个 SNMP 实体间的唯一标识,以调整请求和响应信息。

    * Msg Size:信息发送端所支持的八位信息最大值

    * Msg Flags:八位的串,包含三个最不重要的标记位:ReportableFlag、PrivFlag、AuthFlag。

    * Security Model:标识发送端使用的安全模式,接收端使用该安全模式处理该信息。

    * AuthoritativeEngineID:SNMP 的 SnmpEngineID 值包括信息交换。因此,该值涉及 Trap 资源、响应或报告,通过 Get、GetNext、GetBulk、Set 或 Inform 发送至目的地。

    * AuthoritativeEngineBoots:SNMP 的 snmpEngineBoots 值包括信息交换。

    * AuthoritativeEngineTime:SNMP 的 SnmpEngineTime 值包括信息交换。

    * User Name:发生信息交换的用户。

    * AuthenticationParameters:如果交换没有被认证,则为空。否则它就是一个认证参数。

    * PrivacyParameters:不允许私有交换,则为空。否则它就是一个私有参数。

    * PDU(Protocol Data Unit):SNMPv3 中的 PDU 类型与 SNMPv2 中的相同。

这篇关于SNMP:简单网络管理协议第1,2,3版的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/871039

相关文章

Java发送SNMP至交换机获取交换机状态实现方式

《Java发送SNMP至交换机获取交换机状态实现方式》文章介绍使用SNMP4J库(2.7.0)通过RCF1213-MIB协议获取交换机单/多路状态,需开启SNMP支持,重点对比SNMPv1、v2c、v... 目录交换机协议SNMP库获取交换机单路状态获取交换机多路状态总结交换机协议这里使用的交换机协议为常

Python实现简单封装网络请求的示例详解

《Python实现简单封装网络请求的示例详解》这篇文章主要为大家详细介绍了Python实现简单封装网络请求的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装依赖核心功能说明1. 类与方法概览2.NetHelper类初始化参数3.ApiResponse类属性与方法使用实

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

python连接sqlite3简单用法完整例子

《python连接sqlite3简单用法完整例子》SQLite3是一个内置的Python模块,可以通过Python的标准库轻松地使用,无需进行额外安装和配置,:本文主要介绍python连接sqli... 目录1. 连接到数据库2. 创建游标对象3. 创建表4. 插入数据5. 查询数据6. 更新数据7. 删除

Jenkins的安装与简单配置过程

《Jenkins的安装与简单配置过程》本文简述Jenkins在CentOS7.3上安装流程,包括Java环境配置、RPM包安装、修改JENKINS_HOME路径及权限、启动服务、插件安装与系统管理设置... 目录www.chinasem.cnJenkins安装访问并配置JenkinsJenkins配置邮件通知

Java对接MQTT协议的完整实现示例代码

《Java对接MQTT协议的完整实现示例代码》MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛,:本文主要介绍Ja... 目录前言前置依赖1. MQTT配置类代码解析1.1 MQTT客户端工厂1.2 MQTT消息订阅适配器1.

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、

Python yield与yield from的简单使用方式

《Pythonyield与yieldfrom的简单使用方式》生成器通过yield定义,可在处理I/O时暂停执行并返回部分结果,待其他任务完成后继续,yieldfrom用于将一个生成器的值传递给另一... 目录python yield与yield from的使用代码结构总结Python yield与yield