SNMP协议学习

来源:互联网 发布:微型打印机编程 编辑:程序博客网 时间:2024/05/16 01:29

SNMP协议学习

  简单网络管理协议(SNMPSimple Network Management Protocol)是由互联网工程任务组(IETFInternet Engineering Task Force )定义的一套网络管理协议。该协议基于简单网关监视协议(SGMPSimple Gateway Monitor Protocol)。利用SNMP,一个管理工作站可以远程管理所有支持这种协议的网络设备,包括监视网络状态、修改网络设备配置、接收网络事件警告等。虽然SNMP开始是面向基于IP的网络管理,但作为一个工业标准也被成功用于电话网络管理。

1. 网络管理

  基于T C P / I P的网络管理包含两个部分:网络管理站(也叫管理进程, m a n a g e r Station)和被管的网络单元(也叫被管设备 Network Element)。被管设备种类繁多,例如:路由器、X 终端、终端服务器和打印机等。这些被管设备的共同点就是都运行T C P / I P协议。被管设备端和管理相关的软件叫做代理程序( a g e n t )或代理进程。管理站一般都是带有彩色监视器的工作站,可以显示所有被管设备的状态(例如连接是否掉线、各种连接上的流量状况等)

管理进程和代理进程之间的通信可以有两种方式。一种是管理进程向代理进程发出请求,询问一个具体的参数值(例如:你产生了多少个不可达的I C M P端口?)。另外一种方式是代理进程主动向管理进程报告有某些重要的事件发生(例如:一个连接口掉线了)。当然,管理进程除了可以向代理进程询问某些参数值以外,它还可以按要求改变代理进程的参数值(例如:把默认的IP TTL值改为6 4)。

基于T C P / I P的网络管理包含3个组成部分:

1) 一个管理信息库M I BManagement Information Base)。管理信息库包含所有代理进程的所有可被查询和修改的参数。RFC 1213 [McCloghrie and Rose 1991]定义了第二版的M I B,叫做M I B - I I

2) 关于M I B的一套公用的结构和表示符号。叫做管理信息结构S M I Structure of

Management Information)。这个在RFC 1155 [Rose and McCloghrie 1990] 中定义。例如:S M I定义计数器是一个非负整数,它的计数范围是0~4 294 967 295,当达到最大值时,又从0开始计数。

3) 管理进程和代理进程之间的通信协议,叫做简单网络管理协议S N M PSimple Network Management Protocol)。在RFC 1157 [Case et al. 1990]中定义。S N M P包括数据报交换的格式等。尽管可以在运输层采用各种各样的协议,但是在S N M P中,用得最多的协议还是U D P

2SNMP体系

SNMP采用了Client/Server模型的特殊形式:代理/管理站模型。对网络的管理与维护是通过管理工作站SNMP代理间的交互工作完成的。每个SNMP从代理负责回答SNMP管理工作站(主代理)关于MIB定义信息的各种查询。下图是SNMP协议的实现模型。

3、NMP报文种类

SNMP代理和管理站通过SNMP协议中的标准消息进行通信,每个消息都是一个单独的数据报。SNMP使用UDP(用户数据报协议)作为第四层协议(传输协议),进行无连接操作。 SNMP规定了5种协议消息(也就是SNMP报文),用来在管理进程和代理之间的交换。

 

  • Get-Request Get-Next-RequestGet-Response

  SNMP管理站用Get-Request消息从拥有SNMP代理的网络设备中检索信息,而SNMP代理则用Get-Response消息响应。Get-Next-Request用于和Get-Request组合起来查询特定的表对象中的列元素。如:

首先通过下面的原语获得所要查询的设备的接口数:

{iso org(3) dod(6) internet(1) mgmt(2) mib(1) interfaces(2) ifNumber(2)}

然后再通过下面的原语,进行查询(其中第一次用Get-Request,其后用Get-Next-Request):

{iso org(3) dod(6) internet(1) mgmt(2) mib(1) interfaces(2) ifTable(2)}

  • Set-Request

  SNMP管理站用Set-Request 可以对网络设备进行远程配置(包括设备名设备属性删除设备或使某一个设备属性有效/无效等)。

  • Trap

SNMP代理使用TrapSNMP管理站发送非请求消息,一般用于描述某一事件的发生。

前面的Request操作是由管理进程向代理进程发出的,后面的ResponseTrap操作是代理进程发给管理进程的,为了简化起见,前面3个操作今后叫做getget-nextset操作。下图描述了SNMP的这5种报文操作。请注意,在代理进程端是用熟知端口161俩接收getset报文,而在管理进程端是用熟知端口162来接收trap报文。

SNMP5种报文操作

 

4SNMP报文格式

SNMP消息报文包含两个部分:SNMP报头和协议数据单元PDU。数据报结构如下图。

SNMP报文格式

  • 版本识别符(version identifier):确保SNMP代理使用相同的协议,每个SNMP代理都直接抛弃与自己协议版本不同的数据报。
  • 团体名(Community Name):用于SNMP从代理对SNMP管理站进行认证;如果网络配置成要求验证时,SNMP从代理将对团体名和管理站的IP地址进行认证,如果失败,SNMP从代理将向管理站发送一个认证失败的Trap消息(见后;
  • 协议数据单元(PDU):其中PDU指明了SNMP的消息类型及其相关参数。

下图是封装成UDP数据报的5种操作的SNMP报文格式。可见一个SNMP报文共有三个部分组成,即公共SNMP首部、get/set首部trap首部、变量绑定。

1)  公共SNMP首部

共三个字段:

版本l 写入版本字段的是版本号减1,对于SNMP(即SNMPV1)则应写入0共同体(community 共同体就是一个字符串,作为管理进程和代理进程之间的明文口令,常用的是6个字符“public”。

PDU类型  根据PDU的类型,填入04中的一个数字,其对应关系如表2所示意图。

2 PDU类型

PDU类型

名称

0

get-request

1

get-next-request

2

get-response

3

set-request

4

Trap

2)  get/set首部
l 请求标识符(request ID)  这是由管理进程设置的一个整数值。代理进程在发送get-response报文时也要返回此请求标识符。管理进程可同时向许多代理发出get报文,这些报文都使用UDP传送,先发送的有可能后到达。设置了请求标识符可使管理进程能够识别返回的响应报文对于哪一个请求报文

差错状态(error status 由代理进程回答时填入05中的一个数字,见表3的描述

3 差错状态描述

差错状态

名字

说明

0

noError

一切正常

1

tooBig

代理无法将回答装入到一个SNMP报文之中

2

noSuchName

操作指明了一个不存在的变量

3

badValue

一个set操作指明了一个无效值或无效语法

4

readOnly

管理进程试图修改一个只读变量

5

genErr

某些其他的差错

差错索引(errorl index) 当出现noSuchNamebadValuereadOnly的差错时,由代理进程在回答时设置的一个整数,它指明有差错的变量在变量列表中的偏移。
3
trap首部

企业(enterprise 填入trap报文的网络设备的对象标识符。此对象标识符肯定是在图3的对象命名树上的enterprise结点{1.3.6.1.4.1}下面的一棵子树上。

 trap类型 此字段正式的名称是generic-trap,共分为表4中的7种。

trap类型

名字

说明

0

coldStart

代理进行了初始化

1

warmStart

代理进行了重新初始化

2

linkDown

一个接口从工作状态变为故障状态

3

Linkup

一个接口从故障状态变为工作状态

4

authenticationFailure

SNMP管理进程接收到具有一个无效共同体的报文

5

egpNeighborLoss

一个EGP相邻路由器变为故障状态

6

enterpriseSpecific

代理自定义的事件,需要用后面的“特定代码”来指明

当使用上述类型235时,在报文后面变量部分的第一个变量应标识响应的接口。

特定代码(specific-code)   指明代理自定义的时间(若trap类型为6),否则为0

时间戳(timestamp)   指明自代理进程初始化到trap报告的事件发生所经历的时间,单位为10ms。例如时间戳为1908表明在代理初始化后1908ms发生了该时间。

4)变量绑定(variable-bindings)

指明一个或多个变量的名和对应的值。在getget-next报文中,变量的值应忽略。

5. 管理信息库MIB

管理信息库MIB,就是所有代理进程包含的,能够被管理进程进行查询和设置的信息的结构。IETF规定的管理信息库MIB(其中定义了可访问的网络设备及其属性,由对象标识符――OIDObject Identifier唯一指定)的一套公用的结构与表示符号称之为SMI

对象标识是一种数据类型,它指明一种“授权”命名的对象。“授权”的意思就是这些标识不是随便分配的,它是由一些权威机构进行管理和分配的。对象标识是一个整数序列,以点(“.”)分隔。这些整数构成一个树型结构,对象标识从树的顶部开始,顶部没有标识,以r o o t表示。下图显示了在S N M P中用到的这种树型结构。所有的M I B变量都从1 . 3 . 6 . 1 . 2 . 1这个标识开始。树上的每个结点同时还有一个文字名。例如标识1 . 3 . 6 . 1 . 2 . 1就和i s o . o r g . d o d .i n t e r n e t . m e m t . m i b对应。这主要是为了人们阅读方便。在实际应用中,也就是说在管理进程和代理进程进行数据报交互时,M I B变量名是以对象标识来标识的,当然都是以1 . 3 . 6 . 1 . 2 . 1开头的。

在图2 5 - 6中,我们除了给出了m i b对象标识外,还给出了i s o . o r g . d o d . i n t e r n e t .p r i v a t e . e n t e r p r i s e s1 . 3 . 6 . 1 . 4 . 1)这个标识。这是给厂家自定义而预留的。在A s s i g n e d Number RFC中列出了在该结点下大约4 0 0个标识。

MIB是一个树形结构,SNMP协议消息通过遍历MIB树形目录中的节点来访问网络中的设备。

  下图给出了NMS系统中SNMP可访问网络设备的对象识别树(OIDObject Identifier)结构。

12

  下图给出了对一个DS1线路状态进行查询的OID设置例子。

6、实例标识

   当对M I B变量进行操作,如查询和设置变量的值时,必须对M I B的每个变量进行标识。首先,只有叶子结点是可操作的。S N M P没法处理表格的一整行或一整列。

6.1 简单变量

对于简单变量的处理方法是通过在其对象标识后面添加“. 0”来处理的。例如前图中的计数器u d p I n D a t a g r a m s,它的对象标识是1 . 3 . 6 . 1 . 2 . 1 . 7 . 1,它的实例标识是1 . 3 . 6 . 1 . 2 . 1 . 7 . 1 . 0,相对应的文字名称是i s o . o r g . d o d . i n t e r n e t . m g m t . m i b . u d p . u d p I n D a t a g r a m s . 0。虽然这个变量处理后通常可以缩写为u d p I n D a t a g r a m s . 0,同样在S N M P报文中,该变量的名称是其对象的标识1 . 3 . 6 . 1 . 2 . 1 . 7 . 1 . 0

6.2 表格

表格的实例标识就要复杂得多。如图

6.3 字典式排序

M I B中按照对象标识进行排序时有一个隐含的排序规则―――“先列后行”,不用加“.0”。M I B表格是根据其对象标识按照字典的顺序进行排序的。

7Windows 2000上配置SNMP服务

7.1 在Windows2000下安装SNMP

1)  打开Windows 2000控制面板

2)  双击“添加与删除程序”图标

3)  选择添加与删除Windows组件,组件面板显现。

4)  勾上管理和监控工具箱

5)  单击“详细”

6)  勾上简单网管协议并单击确定

7)  单击下一步继续直到完成。

7.2配置Windows2000的SNMP服务

1)      打开Windows 2000控制面板

2)      双击管理工具图标

3)      双击服务图标

4)      选择SNMP Service

5)      编辑属性,选择代理标签

6)      确认Contactlocation被选中

7)      选择陷井标签

8)      敲入Community Namepublic

9)      单击加入到列表

10)   在陷井目的地,单击Add,并填入Ip address.

11)   单击确定

12)   选择安全标签

13)   高亮public并单击编辑,将Community Rightes改为Read Create

14)   单击确定

15)   停止SNMP 服务,并重起

16)   双击SNMP Trap Service,选择起动方式“自动”

17)   单击确定

18)   停止SNMP Trap Service并重启

8、未解问题

a)        SNMPv2未看,不知道其中区别有多大?

b)        对象标识树是分层,从左到右进行编码的吗?

c)        是不是所有要查的信息都在这个对象树上?别的地方有吗?

d)        如果返回来的是一个错误,怎么能确定是网络的问题还是自已命令的语法问题?

e)        以表格式形式存入的SNMP变量,表格的栏目一般固定,但是行数并不确定,因此查找时好像也不好确定是找哪一行?

f)         Trap时候,在MANAGER方是不是要发一个确认收到错误,还是不管?

g)        一般开始对某一个路由器设备进行管理时,比喻要发一个命名给它,基本的步骤是什么?

h)        实例标识每个设备在出厂就确定了吗?不能通过命名来增加,是吧?

i)          SNMPV1是否只能在TCP/IP协议网上使用?

j)          每一种设备里面的MIB格式都一样吗?

k)        使用get,getNext能不能一次性提取多个变量?

l)          为何操作时要用在对象标识前加.

原创粉丝点击