当前位置: 首页 > ops >正文

《从零理解SNMP协议:网络监控系统的设计与实现》

  1. 什么是SNMP?
    1. SNMP是广泛应用于TCP/IP网络的网络管理标准协议,该协议能够支持网络管理系统,用以检测连接到网络上的设备是否有任何引起管理上关注的情况。
    2. SNMP采用轮询的机制,提供最基本的功能及,适合小型、快速、低价格的环境使用,而且SNMP以UDP报文为承载,因而受到绝大多数设备的支持,同时保证管理信息在任意两点传送,便于管理员在网络上的任何节点检索信息,进行故障排查
  2. 为什么使用SNMP?
    1. 网络设备数量成几何级数增加,网络管理员对设备的管理变得困难,晚会罗 作为一个复杂的分布式系统,覆盖地域大,对设备的实时监控和故障排查变的困难
    2. 网络设备多种多样,不同厂商提供的管理接口各不相同
    3. SNMP应运而生,利用网络管理网络的方式
      1. 网络管理员利用snmp平台在网络上的任意节点完成信息查询、信息修改和故障排查等工作
      2. 屏蔽了设备间的物理差异,SNMP仅提供最基本的功能集,使得管理任务与被管理任务的物理特性、网络类型相互独立,因而实现对不同设备的统一管理,管理成本低
      3. 设计简单、运行代价低,SNMP采用尽可能简单的设计思想,其在设备上添加硬件、软件、报文的种类和报文的格式都力求简单,因此运行SNMP给设备造成的影响和代价都被最小化
  3. SNMP的基本组件
    1. NMS(Network Management System)
      1. 管理者的角色,是一个采用SNMP协议对网络设备进行管理/见识的系统,运行在NMS服务器上
        1. NMS可以向设备上的Agent发出请求,查询或修改一个或多个具体的参数值
        2. NMS可以接受设备上的Agent主动发送的Trap信息,以获知被管理设备当前的状态
    2. 代理进程(Agent)
      1. 被管理设备中的衣蛾代理进程,用于维护和管理设备的信息数据并相应来自NMS的请求,把管理数据汇报给发送请求的NMS
        1. Agent收到NMS的请求信息后,通过MIB表完成相应指令后,并把操作结果响应给NMS
        2. 当设备发生故障或其他事件时,设备会通过Agent主动发送信息给NMS,向NMS报告设备当前的状态变化
    3. 被管对象(Managed Object)
      1. 每一个设备可能包含多个被管理对象,被管理对象可以是设备中的某个硬件,也可以是在硬件、软件上配置的参数集合
    4. 管理信息库MIB(Management Information Base)
      1. MIB是一个数据库,指明了被管理设备所维护的变量,是能够被Agent查询和设置的信息。MIB在数据库中定义了被管理设备的一系列属性:对象的名称、对象的状态、对象的访问权限和对象的数据类型等。
        1. Agent通过查询MIB,可以获知设备当前的状态信息
        2. Agent通过修改MIB,可以设置设备的状态参数
  4. SNMP端口
    1. SNMP端口是SNMP的通信端电脑,SNMP消息传输通过UDP进行,通常使用UDP端口号161/162,有时候也使用TLS和DTLS
  5. SNMP如何工作?
    1. 一旦网络中启动SNMP协议,NMS作为整个网络的网管中心,会对设备进行管理。每个被管理设备都包含驻留在设备上的Agent,多个被管对象和MIB。NMS通过与在被管理设备上的Agent交互,由Agent通过对设备端的MIB的曹组,完成NMS指令。
    2. 操作类型
  6. 工作原理:基于代理和管理器之间的通信。
    1. 管理器是网络管理系统的一部分,负责监视和控制网络中的设备和应用程序。
    2. 代理是安装在被管理设备上的软件模块,负责收集设备的信息并响应来自管理器的SNMP的请求
  7. 具体步骤
    1. 管理器发送请求:管理器向代理发送SNMP请求,请求获取特定的信息
    2. 代理处理请求:代理接收到请求后,根据请求类型执行相应的操作,如获取设备状态、配置信息等
    3. 代理发送响应:代理将请求的结果打包成SNMP相应,并发送回管理器
    4. 管理器处理响应:管理器接收到响应后,解析先攻数据并响应的进行处理,如显示状态信息、生成警报等。
  8. 使用SNMP的实例
  9. from pysnmp.hlapi import *# 定义SNMP请求
    snmp_object = ObjectIdentity('IF-MIB', 'ifInOctets', 1)
    snmp_target = SnmpEngine()
    snmp_community = CommunityData('public', mpModel=0)
    snmp_context = ContextData()# 发送SNMP请求
    snmp_data = getCmd(snmp_target, snmp_community, snmp_object, snmp_context)# 处理SNMP响应
    error_indication, error_status, error_index, var_binds = next(snmp_data)
    if error_indication:
    print('SNMP请求错误:', error_indication)
    else:
    if error_status:
    print('SNMP错误:', error_status.prettyPrint())
    else:
    for var_bind in var_binds:
    oid = var_bind[0]
    value = var_bind[1]
    print('OID:', oid)
    print('值:', value)

  10. 参考文章
    什么是SNMP?为什么需要SNMP? - 华为
    详细介绍SNMP协议的原理、功能和应用_如何在软件中应用snmp-CSDN博客
    网络工程师必知:SNMP是什么?如何配置? - 知乎
http://www.xdnf.cn/news/7770.html

相关文章:

  • JAVA项目中常见的注解总结
  • COMPUTEX 2025 | 广和通5G AI MiFi解决方案助力移动宽带终端迈向AI新未来
  • 电商系统搭建的关键细节与技术实践
  • 工作安排小K
  • springboot使用xdoc-report包导出word
  • 四、【API 开发篇 (上)】:使用 Django REST Framework 构建项目与模块 CRUD API
  • EtherNet/IP机柜内解决方案在医疗控制中心智能化的应用潜能和方向分析
  • aws平台s3存储桶夸域问题处理
  • c#中添加visionpro控件(联合编程)
  • 使用脚本备份和还原Windows环境变量
  • 【STM32】自定义打印函数
  • 浪潮服务器配置RAID和JBOD
  • centos系统redis-dump安装
  • Kotlin 极简小炒 P9 - 数组(数组的创建、数组元素的访问与修改、数组遍历、数组操作、多维数组、数组与可变参数)
  • 【JAVA】中文我该怎么排序?
  • Linux系统下nslookup命令的基本使用
  • Python爬虫(32)Python爬虫高阶:动态页面处理与Scrapy+Selenium+BeautifulSoup分布式架构深度解析实战
  • Python包管理工具uv 国内源配置
  • 网感驱动下开源AI大模型AI智能名片S2B2C商城小程序源码的实践路径研究
  • 【数据结构 · 初阶】- 快速排序
  • 基于双通道频谱分析的振动信号故障诊断3
  • Microbiome医口经典思路:退烧药物代谢过程如何进行多组学分析?
  • wps编辑技巧
  • 算子窗口操作
  • 如何使用redis做限流(golang实现小样)
  • 软考 系统架构设计师系列知识点之杂项集萃(66)
  • 信息学奥赛一本通 1853:【08NOIP提高组】传纸条 | 洛谷 P1006 [NOIP 2008 提高组] 传纸条
  • 软件测试知识详解
  • 微服务中API网关作用(统一入口、路由转发、协议转换、认证授权、请求聚合、负载均衡、熔断限流、监控日志)
  • AI护航化工:《山西省危化品视频智能分析指南》下的视频分析重构安全体系