SNMP(简单网络管理协议)介绍
简介
作为系统管理员的重要工作之一是收集关于服务器和基础设施的准确信息。有许多工具和选项可用于收集和处理这种类型的信息。其中许多工具都是建立在一种称为SNMP的技术之上。
SNMP代表简单网络管理协议。这是服务器可以共享有关其当前状态的信息的一种方式,也是管理员可以修改预定义值的通道。虽然协议本身非常简单,但实现SNMP的程序的结构可能非常复杂。
在本指南中,我们将向您介绍SNMP协议的基础知识。我们将介绍其用途,协议在网络中的典型使用方式,协议版本之间的差异等。
基本概念
SNMP是实现在网络堆栈的应用层上的协议(点击这里了解网络层)。该协议被创建为一种以一致的方式从非常不同的系统中收集信息的方式。尽管它可以与各种系统连接,但查询信息的方法和相关信息的路径是标准化的。
SNMP协议有多个版本,许多网络硬件设备实现了某种形式的SNMP访问。最广泛使用的版本是SNMPv1,但在许多方面它是不安全的。它的流行主要源于其无处不在和长期存在。除非您有充分的理由不这样做,我们建议您使用提供更高级安全功能的SNMPv3。
一般来说,由SNMP进行配置文件的网络主要由包含SNMP 代理的设备组成。代理是一个可以收集有关硬件的信息,将其组织成预定义条目,并使用SNMP协议响应查询的程序。
在这个模型中,用于向代理查询信息的组件称为SNMP 管理器。这些机器通常具有其网络中所有支持SNMP的设备的数据,并可以发出请求以收集信息和设置某些属性。
SNMP管理器
SNMP管理器是配置为轮询SNMP代理以获取信息的计算机。在仅讨论其核心功能时,管理组件实际上比客户端配置要简单得多,因为管理组件只是请求数据。
管理器可以是任何能够使用正确凭据向SNMP代理发送查询请求的计算机。有时,这是作为监控套件的一部分实现的,而其他时候,这是管理员使用一些简单的实用程序来快速创建请求。
在SNMP协议中定义的几乎所有命令(我们稍后将详细介绍这些)都是设计为由管理器组件发送。这些包括GetRequest、GetNextRequest、GetBulkRequest、SetRequest、InformRequest和Response。除此之外,管理器还被设计为响应Trap和Response消息。
SNMP代理
SNMP代理完成了大部分工作。它们负责收集有关本地系统的信息并将其存储在可以查询的格式中。更新名为“管理信息库”或MIB的数据库。
MIB是一个分层的、预定义的结构,用于存储可以查询或设置的信息。这些信息可以由已经使用正确凭据(即SNMP管理器)进行的良好形式的SNMP请求访问。
代理计算机配置了哪些管理器可以访问其信息。它还可以充当中间人,报告它可以连接到但未配置为SNMP流量的设备的信息。这为使组件在线并且可通过SNMP访问提供了很大的灵活性。
SNMP代理响应协议定义的大多数命令。这些包括GetRequest、GetNextRequest、GetBulkRequest、SetRequest和InformRequest。此外,代理被设计为发送Trap消息。
理解管理信息库
SNMP系统中最难理解的部分可能是MIB,或管理信息库。MIB是一个数据库,遵循管理器和代理遵循的标准。它是一个分层结构,在许多领域是全球标准化的,但也足够灵活,可以允许供应商特定的添加。
MIB结构最好理解为自上而下的分层树。每个分支都带有一个标识号(从1开始)和一个唯一的标识字符串,用于该层次结构的标识。您可以互换使用字符串和数字。
要引用树的特定节点,必须从树的未命名根到所讨论的节点的路径。其父ID(数字或字符串)的血统被串在一起,从最一般的开始,形成一个地址。层次结构中的每个交叉点在此表示中由一个点表示,因此地址最终成为一系列由点分隔的ID字符串或数字。整个地址被称为对象标识符,或OID。
将SNMP代理嵌入其设备的硬件供应商有时会实现具有自己字段和数据点的自定义分支。但是,有一些标准的MIB分支是定义良好的,并且可以被任何设备使用。
我们将讨论的标准分支都将位于相同的父分支结构下。该分支定义符合MIB-2规范的信息。
到达该分支的基本路径是:
1.3.6.1.2.1
这也可以用字符串表示为:
iso.org.dod.internet.mgmt.mib-2
1.3.6.1或iso.org.dod.internet部分是定义互联网资源的OID。接下来的2或mgmt是管理子类。在其下的1或mib-2定义了MIB-2规范。
这是一个熟悉MIB树的好资源。这个特定页面代表了我们一直在谈论的交叉点的连接节点。您可以通过检查“上级”和“下级”引用来查看树的更上层和更下层的内容。
思科提供的SNMP对象导航器是另一个类似的工具。这可以用于深入了解层次结构,以找到您需要的信息。SolarWinds也提供了类似的树。
基本上,如果我们想要查询我们的设备以获取信息,大多数路径将以1.3.6.1.2.1开头。您可以浏览树界面以了解可以查询和设置的信息类型。
SNMP 协议命令
SNMP 被广泛采用的一个原因是其命令的简单性。虽然要实现或记住的操作很少,但它们足够灵活,以满足协议的实用要求。
以下的协议数据单元(PDU)描述了协议允许的确切消息类型:
- Get:管理器向代理发送 Get 消息,以请求特定 OID 的值。这个请求将通过 Response 消息回复给管理器,并携带数据。
- GetNext:GetNext 消息允许管理器请求 MIB 中的下一个顺序对象。这是一种可以遍历 MIB 结构而不必担心要查询哪些 OID 的方法。
- Set:管理器向代理发送 Set 消息,以更改代理上变量的值。这可用于控制配置信息或以其他方式修改远程主机的状态。这是协议定义的唯一写操作。
- GetBulk:这个管理器到代理的请求的功能就好像进行了多个 GetNext 请求。回复给管理器的数据将尽可能多(在请求设置的约束内),以适应数据包的大小。
- Response:代理发送的这个消息用于将任何请求的信息发送回管理器。它既作为请求的数据的传输,也作为对请求接收的确认。如果无法返回请求的数据,响应将包含可以设置进一步信息的错误字段。对于上述任何请求以及 Inform 消息,都必须返回一个响应消息。
- Trap:Trap 消息通常由代理发送给管理器。Trap 是异步通知,即接收到它们的管理器是未经请求的。它们主要用于代理通知管理器其受管设备上正在发生的事件。
- Inform:为了确认接收到一个 Trap,管理器向代理发送 Inform 消息。如果代理没有收到此消息,它可能会继续重新发送 Trap 消息。
有了这七种数据单元类型,SNMP 能够查询并发送关于您网络设备的信息。
协议版本
自首次引入以来,SNMP 协议经历了许多变化。最初的规范是在 1988 年的 RFC 1065、1066 和 1067 中制定的。由于它已经存在了很长时间,因此仍然得到广泛支持。然而,该版本存在许多安全问题,包括以明文进行身份验证,因此在未受保护的网络上使用时,其使用是极不鼓励的。
协议的第二个版本工作始于 1993 年,并对早期标准进行了一些重大改进。这个版本包括一个新的“基于 party”的安全模型,旨在解决先前版本固有的安全问题。然而,这个新模型并不是很受欢迎,因为它难以理解和实现。
因此,版本 2 的一些“分支”被创建,每个分支保留了版本 2 的大部分改进,但替换了安全模型。在 SNMPv2c 中,重新引入了基于社区的认证,这是 v1 中使用的相同模型。这是 v2 协议中最受欢迎的版本。另一个实现称为 SNMPv2u,使用基于用户的安全性,尽管这从未很受欢迎。这允许针对每个用户进行身份验证设置。
1998 年,SNMP 协议的第三个(也是当前的)版本作为规范提案进入。从用户的角度来看,最相关的变化是采用了基于用户的安全系统。它允许您将用户的身份验证要求设置为以下模型之一:
- NoAuthNoPriv:使用此级别连接的用户没有进行身份验证,也没有消息的隐私。
- AuthNoPriv:使用此模型的连接必须进行身份验证,但消息是未加密的。
- AuthPriv:需要身份验证并且消息是加密的。
除了身份验证外,还实施了访问控制机制,以提供对用户可以访问哪些分支的细粒度控制。版本 3 还具有利用传输协议(如 SSH 或 TLS)提供的安全性的能力。
结论
现在您对协议的运作方式有了很好的了解,您已经具备了在自己的基础设施中实施 SNMP 所需的基础。
在下一个指南中,我们将讨论如何安装和配置必要的组件,以利用系统上的 SNMP。
相关文章:
SNMP(简单网络管理协议)介绍
简介 作为系统管理员的重要工作之一是收集关于服务器和基础设施的准确信息。有许多工具和选项可用于收集和处理这种类型的信息。其中许多工具都是建立在一种称为SNMP的技术之上。 SNMP代表简单网络管理协议。这是服务器可以共享有关其当前状态的信息的一种方式,也…...
Spring中常见的设计模式
使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性、更具有灵活、优雅,而Spring中共有九种常见的设计模式 工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于…...
【MySQL】——数值函数的学习
🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-Z1fAnfrxGD7I5gqp {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…...
LLMs模型选择,LLMs复读机问题,LLMs长文本处理方案
为什么会出现 LLMs 复读机问题? LLMs 复读机问题(LLMs Parroting Problem)是指大型语言模型(LLMs)在生成文本时可能出现的重复或重复先前输入内容的现象。出现LLMs复读机问题可能有以下几个原因: 数据偏差…...
LeetCode.144. 二叉树的前序遍历
题目 144. 二叉树的前序遍历 分析 这道题目是比较基础的题目,我们首先要知道二叉树的前序遍历是什么? 就是【根 左 右】 的顺序,然后利用递归的思想,就可以得到这道题的答案,任何的递归都可以采用 栈 的结构来实现…...
Redis复制
文章目录 1.Redis复制是什么2.Redis能干嘛3.权限细节4.基本操作命令5.常用三招5.1 一主二仆5.2 薪火相传5.3 反客为主 6.复制原理和工作流程7.复制的缺点 1.Redis复制是什么 就是主从复制,master以写为主,Slave以读为主。当master数据变化的时候&#x…...
C++入门学习(二十七)跳转语句—break语句
1、与switch语句联合使用 C入门学习(二十三)选择结构-switch语句-CSDN博客 #include <iostream> #include <string> using namespace std;int main() { int number;cout<<"请为《斗萝大路》打星(1~5※):" &…...
Spark安装(Yarn模式)
一、解压 链接:https://pan.baidu.com/s/1O8u1SEuLOQv2Yietea_Uxg 提取码:mb4h tar -zxvf /opt/software/spark-3.0.3-bin-hadoop3.2.tgz -C /opt/module/spark-yarn mv spark-3.0.3-bin-hadoop3.2/ spark-yarn 二、配置环境变量 vim /etc/profile…...
1.4 Binance_interface API U本位合约行情
Binance_interface API U本位合约行情 Github地址PyTed量化交易研究院 1. API U本位合约行情接口总览 方法解释Pathget_ping测试服务器连通性 PING/fapi/v1/pingget_time获取服务器时间/fapi/v1/timeget_exchangeInfo获取交易规则和交易对/fapi/v1/exchangeInfoget_depth深度…...
单片机学习笔记---AT24C02(I2C总线)
目录 有关储存器的介绍 存储器的简介 存储器简化模型 AT24C02介绍 AT24C02引脚及应用电路 I2C总线介绍 I2C电路规范 开漏输出模式和弱上拉模式 其中一个设备的内部结构 I2C通信是怎么实现的 I2C时序结构 起始条件和终止条件 发送一个字节 接收一个字节 发送应答…...
c++恶魔轮盘制造第1期输赢
小常识,恶魔叫DEALER。 赢了很简单 void sheng() { cout<<"你获胜了!";MessageBox(NULL,TEXT("你的钱~~~~~~给你"),TEXT("DEALER"),MB_OK);system("pause");system("cls"); } 输了我用了个选…...
60-JS-Ajax
ajax取数据的一种手段,局部刷新,例如弹幕 1.ajax的使用,创建ajax对象,发起对服务器请求 2.核心对象XMLHttpRequest对象(简称XHR) CSS:Cascading Style Sheets(层叠样式表) HTML:Hypertext Markup Language(超文本标记语言) 3.发起对服务器的请求 浏览器方式请求:打…...
C# Avalonia 折线图
线图开发在C# Avalonia框架中可以通过多种方式实现。由于Avalonia旨在成为跨平台的UI框架,您可以利用多种库和方法来绘制折线图。以下是一个简单的例子,展示了如何在Avalonia应用程序中创建一个基本的折线图。 首先,您需要在Avalonia项目中包…...
Vue3中Setup概述和使用(三)
一、引入Setup 1、Person.Vue 与Vue3编写简单的App组件(二) 中的区别是:取消data、methods等方法,而是将数据和方法定义全部放进setup中。 <template><div class"person"><h1>姓名:{{name}}</h1><h1>年龄:{{age}}</h…...
hexo 博客搭建以及踩雷总结
搭建时的坑 文章置顶 安装一下这个依赖 npm install hexo-generator-topindex --save然后再文章的上面设置 top: number,数字越大,权重越大,也就是越靠顶部 hexo 每次推送 nginx 都访问不到 宝塔自带的 nginx 的 config 里默认的角色是 …...
WordPress后台编辑个人资料页面直接修改用户名插件Change Username
前面跟大家介绍了『如何修改WordPress后台管理员用户名?推荐2种简单方法』一文,但是对于新站长或者有很多用户的站长来说,操作有点复杂,所以今天向大家推荐一款可以直接在WordPress后台编辑个人(用户)资料页…...
ssm+vue的医药垃圾分类管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。
演示视频: ssmvue的医药垃圾分类管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结…...
LLM大模型基本概念,及其相关问题汇总(1)
什么是涌现?为什么会出现涌现? "大模型的涌现能力"这个概念可能是指大型神经网络模型在某些任务上表现出的出乎意料的能力,超出了人们的预期。出现的原因从结论上来看,是模型不够好,导致的原因主要是&#…...
【已解决】pt文件转onnx后再转rknn时得到推理图片出现大量锚框变花屏
前言 环境介绍: 1.编译环境 Ubuntu 18.04.5 LTS 2.RKNN版本 py3.8-rknn2-1.4.0 3.单板 迅为itop-3568开发板 一、现象 采用yolov5训练并将pt转换为onnx,再将onnx采用py3.8-rknn2-1.4.0推理转换为rknn,rknn模型能正常转换,…...
DevOps文章之 操作手册用户使用说明书
前言 最近主导了几个项目操作手册的编写。有新开发的项目,要重新编写操作手册;有中途接手别的项目,后来功能迭代,需要更新原操作手册;有客户对操作手册有意见,需要调整;零零散散写了数万字的手…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...
