• 1. SNMP协议原理及开发流程
  • 2. SNMP协议 SNMP基本原理
  • 3. SNMP定义SNMP(Simple Network Management Protocol) 简单网络管理协议, 前身是简单网关监控协议(SGMP),用来对通信线路进行管理。随后,人们对SGMP进行了很大的修改,特别是加入了符合Internet定义的SMI和MIB:体系结构,改进后的协议就是SNMP。 SNMP的目标是管理互联网Internet上众多厂家生产的软硬件平台,因此SNMP受Internet标准网络管理框架的影响也很大。现在SNMP已经出到第三个版本的协议,其功能较以前已经大大地加强和改进了。
  • 4. SNMP详细所有的网络管理系统所包含(包括SNMP): 被管理的节点. (被监视的设备,如:电脑、交换机、监控器等) 管理代理. (用来跟踪被管理设备状态的特殊软件或固件) 网络管理工作站. (与在不同的被管理节点中的代理通讯, 并显示代理的中心 设备) 网络管理协议. (被管理工作站和代理用来交换信息的协议) 管理信息数据库. (提供有关被管网络设备的信息)
  • 5. 管理信息数据库结构(MIB)MIB是一个概念上的数据库,由被管理对象组成。每个管理代理管理 MIB中属于自己的本地对象,这些对象的信息共同构成全网的 MIB。SNMP协议的核心是被管理的对象。 MIB的结构必须符合使用TCP/IP的 Internet的管理信息结构(SMI)。 SMI定义的属性 支持的对象类型 (如:接口、带宽、流量、IP 等) 语法 (识别对象时语法规定) 存取 (权限, 网元自身所拥有的权限) 状态 (状态信息) MIB以OID(object id)来标识当前所在节点位置的信息 如:OID = 1.3.6.1.2.1.7.1 (以点分隔开的树状路径)
  • 6. 管理信息数据库详细(MIB)MIB信息数据库是逻辑数据库 ,并非物理数据库。 树节点数字是由上向下读。
  • 7. 管理信息数据库详细(MIB)在Internet结点下面的第二个结点是mgmt(管理),标号是2。再下面是管理信息库,原先的结点名是mib。1991年定义了新的版本MIB-II,所以结点名现改为mib-2,其标识为{1.3.6.1.2.1},或{Internet(1) .2.1}。这种标识为对象标识符。 最初的结点MIB将其所管理的信息分为8个类别,现在的mib-2所包含的信息类别已超过40个。对象命名树的顶级对象有三个,在ISO的下面有3个结点: 其中的一个(3)是被标识的组织。 在其下面有一个美国国防部(Department of Defense)的子树(6)。 再下面就是Internet(1)。在只讨论Internet中的对象时,可只画出Internet以下的子树(图中带阴影的虚线方框),并在Internet结点旁边标注上{1.3.6.1}。
  • 8. 数据库节点信息(SNMP请求数据)IP首部UDP首部公共SNMP首部Get/Set首部变量绑定IP数据20字节UDP数据SNMP数据8字节版本共同体PDU类型(0~3)请求标示符差错状态差错索引名值……工作站与网元之间的密码信息等(共同的)getRequest getResponse ……除告警的4个前段相同PDU类型(4)企业代理IP地址Trap类型(0~6)特定代码时间名值…告警
  • 9. SNMP代理在SNMP中,一般采用 管理者-代理 的管理模型。 管理者可以是工作站、微机等,一般位于网络系统的主干或接近主干的位置,它负责发出管理操作的指令,并接收来自代理的信息。代理则位于被管理的设备内部,把来自管理者的命令或信息请求转换为本设备特有指令,完成管理者的指示,或返回它所在设备的信息。 管理者和代理之间的通信遵从SNMP及相关协议。管理者将管理要求通过管理操作指令送给位 于被管理系统中的代理,代理则直接管理被管理设备。代理可能因为某种原因拒绝管理者的指令。管理者和代理之间的信息交换可以分为2种: 从管理者到代理的管理操作。 从代理到管理者的事件通知,以把在自身系统中发生的事件主动通知给管理者。
  • 10. SNMP代理代理管理任务是驻留于网络被管理设备中的处理实体,作为一个智能前端处理器实现管理功能。每个代理拥有自己本地的MIB。 SNMP协议的是移交给代理来执行的。代理直接与相应的功能实体通信并执行信息处理任务,其主要任务是访问相关模块数据,发布控制消息。有2种消息由代理提供:Get—response和Trap。代理翻译来自管理者的请求、验证操作的可行性、执行命令并发出合适的响应。 网络管理工作站GetRequestGetNextRequestSetRequestGetResponseTrap(告警/报文)161端口162端口管理设备代理MIB
  • 11. SNMP代理的两种信息交互模式网管代理服务程序作为一个后台程序存在于系统当中,管理信息保存在程序内部;代理-设备接口模块作为设备的子模块,它要及时的将设备的被管信息通过SNMP操作送到代理服务程序,或根据需要从代理服务程序中读取管理信息供设备使用。 报告一个关于预先定义事件的异常信息 管理工作站 Managing entityReqest(请求)管理代理 AgentMIBResponse(返回)管理工作站 Managing entity管理代理 AgentMIBTrap msg (告警信息/故障管理)
  • 12. SNMP代理主程序模板初始化SNMP:创建类Snmpx的一个实例; 创建MIB:创建类MIB的一个实例,保存所有的MIB信息并分发SNMP请求; 注册RequestList:创建类RequestList的一个实例,并在(2)中生成的Mib中进行注册; 初始化RequestList:Request List 需要SNMP 消息处理部件来接收和发送SNMP消息,因此要把(1)中SNMP消息处理部件进行注册; 添加MIB对象:以组(Group)为单位,根据需要添加所有的MIB对象; 初始化MIB:从磁盘上加载MIB数据,并用这些数据初始化MIB对象; 初始化Trap配置:从配置信息库中读取信息,初始化Trap配置, 主线程:主线程负责处理进入的请求,监测被管设备,升级管理信息。 SNMP代理的任务: 对来自管理站的信息查询和动作执行的请求作出相应, 和主动向管理站提供一些重要的费请求信息(告警)。
  • 13. SNMP协议 二. SNMP各线程运行流程和图解
  • 14. SNMP重连流程 网元重连中心,负责对需要重连网元的重新连接,维护连接失败或异常的网元。 网元检测中心,线程任务中尝试对断连网元尝试进行连接。 向网元代理发送指令前,首先检测连接是否正常,如果不正常则添加到断连列表内。 检测中心会每隔一段时间来逐个检测已断连网元连接是否恢复正常,如果一网元连接失败,则会验证该网元曾经有没有成功连接过,发送至重连中心重连,如果是断连的则不断重连,直到该网元连接成功。 当网元重连成功后会在重连中心和检测中心注销掉这个网元。 注: 每个网元都有连接状态属性 (已连接,未连接) (向代理发送命令时会检测修改连接状态)
  • 15. SNMP重连流程图解将断连网元添加至断连列表判断曾经有过成功连接true进行重连重连失败false进行重连重连成功重连和检测中心注销掉本网元线程 检测断连列表遍历列表报告异常失败向网元代理发送指令前检测连接是否正常失败
  • 16. SNMP心跳流程对每一个已经注册到心跳检测中心的网元,心跳中心将网元的最近活跃时间和当前时间进行比较,若二者的时间差大于网元处于不通信状态的时间,心跳中心认为需要进行握手检测网元是否连接正常,于是创建一个握手任务,负责和网元进行一次"握手"。 启动心跳检测线程,遍历正常连接网元列表,每次遍历流程: 首先从心跳中心列表(正常连接的列表)中注销掉本网元。 然后向该网元发起握手信号。 接收网元的握手响应。 成功:若接收到的响应不为空(心跳检测正常),重新注册该网元到心跳检测中心。 失败或异常:若有异常,向网元异常池添加该异常(在重连中心注册该网元)。
  • 17. SNMP心跳流程图解所有可用网元列表遍历向该网元发起握手信号在重连中心注册本网元异常添加回列表 定时检测向网元发送握手信号等待接收网元代理接收到,并验证为握手信号向网元代理发送指令前检测连接是否正常成功失败成功
  • 18. SNMP Get-Request原理流程SNNP的get-Request是工作站和代理最基本常用的交互方式。 get-Request用161端口收发消息,当工作站需要获取网元信息,或工作站需要操作设置网元属性时需要用到此方式来交互。 当工作站向网元代理发送一个消息,网元代理监听到161端口发来的命令消息时,会针对消息的内容来做出反应,如:服务端发来GET消息时,需要网元代理提供该网元的某系统信息时,网元代理就会自行的通过本地MIB库获取到该信息,然后返回工作站,工作站可以通过getResponse来获取网元代理返回的信息,并进行业务处理。 注: get-Request 形式的交互是{ setRequest,getRequest,getNextRequest,getResponse } 的统称。
  • 19. SNMP Get-Request流程图解代理线程线程开启网元命令监听解析数据包处理消息向代理 发送命令业务需要网元系统信息向161端口发送网元设置操作封装发送SETGetResponse监听向161端口发送获取数据包getResponse解析PDU继续业务处理开启监听线程
  • 20. SNMP告警原理流程当网元触发一个异常,会自行通过代理向工作站发送一个告警。 工作站在启动的时候,会开启一个Trap监听器,通过监听本机162(告警默认端口)端口,来监听代理发送过来的告警。 当工作站监听到162端口有数据包存在(DPU不为空)时,就对DPU进行解析,获取网元发送的详细信息,然后就会执行告警处理。 注: 1. 162端口是SNMP的告警默认端口。 161端口是SNMP的get-request的默认端口。 PDU是协议数据单元,可以看做MIB的 节点[数据包属性信息]。
  • 21. SNMP告警流程图解网元触发告警网元发送告警信息开启告警监听监听等待(162端口)发送封装的数据包( PDU )获取到PDU处理消息继续监听线程添加到告警列表遍历网元代理工作站封装告警信息 (信息、共同体、工作站地址等)业务处理线程开启Trap监听器
  • 22. SNMP协议 三. Java开发SNMP协议
  • 23. Java开发SNMP明细首先安装SNMP服务。(控制面板添加与删除工具添加与删除组件管理和监视工具详细信息选择”简单网络管理协议”确定) 启动SNMP服务。 下载SNMP4J.jar 新建项目,加入snmp4j.jar,编写代码{ 枚举网元类型。(目前只有1种类型:摄像机类型) 封装网元的基本属性。(可操作属性、可返回属性等) 封装target 。(连接时网元的地址、端口、传输协议、共同体等) 封装PDU。(数据包) 封装网元过滤规则。(通过一些表达式来限定处理网元的范围。) 检测中心。(包含重连操作和检测线程) 心跳中心。(心跳检测线程) 封装Get-Request。(命令发送和监听Response返回的线程) 监听Trap报告。(监听162端口) 封装Trap报告。 主线程。(入口,负责启动各项所需线程) }
  • 24. Java开发SNMP运行流程程序入口在主线程,主线程启动后,加载一些配置和启动其他的一些明细线程。(心跳线程、检测中心线程、Trap监听等) Trap监听(同步的线程)运行后,会在工作站的162端口监听从网元发送来的告警信息,并将告警信息添加进告警列表内,同时在Trap监听接口里实现清除告警方法。 Get-Request接口里有向网元发送命令的方法和监听Response返回信息的线程。(发送命令关联Response监听) 心跳线程运行后,会不断的验证当前连接正常的网元列表。(Get-Request和Trap的时候,成功交互会向正常网元列表添加网元[无重复添加],异常则移除,并在重连列表添加该网元。) 重连检测中心线程运行起来后,会不断验证当前连接不正常的列表是否恢复连接。(Get-Request和Trap的时候,成功交互会修改网元属性的连接状态为成功连接),将依然断连的网元进行重连。