snmp 获取设备类型_SNMP开发系列(一)SNMP协议体系及技术要点

最近在完善物联网边缘设备的总线汇聚层的工作,我把其中常用的几类协议开发的技术做一个总结,会陆续的写几篇系列文章。:)


SNMP在IT运营、网络设备管理、通信网元管理、物联网上应用广泛。以下章节将分析Linux/pSos等嵌入式环境下SNMP Agent流程特点及使用嵌入式设计SNMP Agent的技术细节(其中涉及到信息模型设计、C/C++语言等内容请各位看官提前学习哈)。本章也可以作为嵌入式下SNMP Agent的软件开发开发指导书。

(一)SNMP协议体系及技术要点

(二)SNMP Agent的设计

(三)SNMP Agent的实现

2fbeab62259a7e8b94f9e932a795ee42.png

前言

SNMP Agent的开发,为了便于大家从基本原理上理解SNMP开发要素,我们从SNMP体系、MIB的组织以及MIB生成等基本技术点来讲解。当然你也可以直接使用现成的商用控件库和工具链来简化你的设计和实现。

1 SNMP协议体系及技术要点

1.1 SNMP管理模型:

SNMP定义的管理模型是C/S结构,client (称为 network manager)与远端网络设备上执行的server(称为SNMP agent)建立虚连接,获取设备状态。设备状态数据库由SNMP agent控制,被称为SNMP Management Information Base (MIB),它是一些统计和控制变量的标准集。

Network manager向SNMP agent发起管理请求,请求包含SNMP变量(称为MIB对象ID或MIB变量)及操作动作(取MIB变量值或为MIB变量设置一个新值)。

1.1.1 SNMP协议栈中的位置和它的协议框架图:

872e6e87d213bd0f93ecbe3cc26f05f4.png
eda7a5aa795e1f7c10c349d2f5aefc25.png

1.1.2 SNMP的管理模型:

0d5b0222149ff8e3925e004070d4c97d.png
a676816e65e4430fcec331404e579cad.png

1.2 理解ASN.1和BER:

正式的SNMP规范中都使用ASN.1(Abstract Syntax Notion 1)的语法进行描述,使用BER(Basic Encode Rule)进行编码。ASN.1的详细描述在RFC1902。

1.2.1 ASN.1抽象记法描述语言

ASN.1用于描述抽象记法的语言,它可以用于任何协议层,在这种记法的基础上通过一定的编码规则,就可以确定数据的8比特组值。

ASN.1记法可以分为以下三主要标记方法:

· Branch Object Identifiers

描述MIB对象的包含关系,用OBJECT IDENTIFIER定义,搭建MIB的树型结构。

Example:

myBranch OBJECT IDENTIFIER ::= { parentBranch 100 }

根据ASN.1文件可回溯parentBranch,直到根internet。parentBranch下可定义多个分支对象,对应唯一的名称和标识数。

· Scalar Object Definitions

dd67eb99f9955f15f5528a7c33a1f2a6.png

· Table Type Definitions

2209d78462bcdd6a149740aecac59706.png

1.2.2 BER编码规则

ASN.1的描述可以通过各种方法转换为比特流,SNMP中使用BER进行编码。

BER的基本规则就是:用“类型”、“长度”、“值”来标记一个流化对象。

例如:一个简单整数,在BER中需要用3个字节进行描述:第一个描述类型,第二个描述长度,第三个描述值。

1.3 SNMP SMI(Struct of Management Imformation)

SMI是MIB中的对象定义和编码(以便通过协议来传输)的基础,常被比作数据库中的模式。它描述如何用ASN.1的子集定义MIB。例如MIB中的资源如何命名和表示,包括一个MIB对象的数据类型,索引方式,访问权限,缺省值,MIB涵义,宏定义,以及该MIB在MIB树中的位置(父子节点关系等)。SNMPv2-SMI由三部分组成(RFC1902):

  • 模块定义
  • 对象定义
  • Trap定义

模块定义--标识宏语法

MODULE-IDENTITY MACRO ::=BEGIN TYPE NOTATION ::= "LAST-UPDATED" value(Update UTCTime) "ORGANIZATION" Text "CONTACT-INFO" Text "DESCRIPTION" Text RevisionPart VALUE NOTATION ::= value(VALUE OBJECT IDENTIFIER)  RevisionPart ::= Revisions | empty Revisions ::= Revision | Revisions Revision Revision ::= "REVISION" value(Update UTCTime) "DESCRIPTION" Text  -- uses the NVT ASCII character set Text ::= """" string """"END

模块定义—example

ASB-MIB DEFINITIONS ::= BEGINIMPORTS MODULE-IDENTITY, enterprises FROM SNMPv2-SMI;asbRoot MODULE-IDENTITY LAST-UPDATED "9406072245Z" --"20020322" ORGANIZATION  "ASB, Inc." CONTACT-INFO  "ASB in ChenDu. Created by Yangyutong  email: yangyt@sbell.com.cn phone: 028-11111111"DESCRIPTION  "This MIB is the root MIB for ASB, Inc. enterprise."::= { enterprises 5555 } asbTndTeam OBJECT IDENTIFIER ::= { asbRoot 1 }asbExtend OBJECT IDENTIFIER ::= { asbRoot 2 } END

对象定义--标识宏语法

OBJECT-IDENTITY MACRO ::=BEGIN TYPE NOTATION ::= "STATUS" Status "DESCRIPTION" Text ReferPart VALUE NOTATION ::= value(VALUE OBJECT IDENTIFIER) Status ::= "current" | "deprecated" | "obsolete" ReferPart ::= "REFERENCE" Text | empty  Text ::= """" string """"END

对象定义--OBJECT-IDENTITY example

dwdmProduction OBJECT IDENTIFIER ::= { asbTndTeam 1 }-- ochPort OBJECT IDENTIFIER ::= { dwdmProduction 1 }-- omsPort OBJECT IDENTIFIER ::= { dwdmProduction 2 }--

对象定义--类型语法

OBJECT-TYPE MACRO ::=BEGIN TYPE NOTATION ::= "SYNTAX" Syntax UnitsPart "MAX-ACCESS" Access "STATUS" Status "DESCRIPTION" Text ReferPart IndexPart DefValPart  VALUE NOTATION ::= value(VALUE ObjectName)  Syntax ::= type(ObjectSyntax) | "BITS" "{" Kibbles "}" Kibbles ::= Kibble | Kibbles 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值