1、第3章:SNMP通信模型,3.1 SNMP结构( SNMP Architecture),SNMP结构是管理系统和管理代理之间报文的规范。 由定义团体来进行安全机制的管理,只有相同团体成员之间才能进行通信。 一个管理站能够属于多个团体且可管理多个域。SNMP结构具有三个方面的功能: 通过管理代理实现的网络功能应该是最简单的; 允许有足够的可扩展性(增加新的操作和管理); SNMP结构应独立于具体主机和网关的结构及机制。,3. 2 管理模型 (The Administrative Model),支持SNMP应用实体的程序称为协议实体 SNMP管理者和SNMP代理这一对实体被称为SNMP团体。 SN
2、MP团体名为community,是一个字符串的形式。,SNMP Manager认证服务,SNMP Manager认证服务,SNMP Manager认证服务,认证,SNMP 团体,报文,图中是多个SNMP管理者与一个SNMP代理进行通信,还可以进行多对一和多对多的通信。 图中发送和接收过程都要进行认证检验,这可以视为是一种安全机制。 SNMPv1的安全机制很简单,只是验证团体名。属于同一团体的管理站和被管理站才能互相作用。 其基本思想是: 代理系统可以对不同的团体定义不同的访问控制策略,每个团体被赋予唯一的名字。 管理站只能以认可的团体名行使访问权。 管理站实体可以用不同的名字对不同的代理实施不
3、同的访问权限。,认证服务 认证服务的目的是要保证通信是被授权的。 对于一个SNMP报文,认证服务的功能是保证接收报文来自于这个消息所声称的源。 从管理站到代理的每个报文都包括一个团体名字。这个名字起到密码的作用,如果发送者知道这个密码,报文就被认为是可靠的。,团体名以明文的形式传输,容易被窃取。所以SNMP的安全机制是不安全的。 为此很多SNMP的实现只允许Get和Trap操作,而Set的操作被严格的限制。即只具有网络监视功能而限制控制网络设备。 为了加强SNMP的安全性,在后来的SNMP版本中改进了认证服务。,SNMP的访问策略,3.3 SNMP协议规范,SNMP PDU格式,SNMP 报文
4、封装,SNMP报文是在PDU加上团体名、版本号和应用层的头构成了应用层的PDU。 在其前加上UDP的头成为了传输层的PDU。以此类推,构成每一层的PDU。 SNMP协议实体在主机的161端口被接收。 trap是在162端口被接收。 SNMPv1协议的最大长度为484个字节。 SNMP有5种管理操作,但只有3种PDU格式:GetRequest PDU、GetNextRequest PDU与SetRequest PDU格式相同。GetResponse PDUTrap PDU变量绑定表:variable-bindings,SNMP 报文格式,SNMP报文,GetRequest PDU, GetNex
5、tRequest PDU 和 SetRequest PDU,GetResponse PDU,错误状态,请求标识,PDU type,错误索引,Variable-bindings,Trap PDU,name1,value1,name2,value2,namen,valuen,变量绑定表,报文的发送和接收,构造PDU(ASN.1对象),加入团体名及源和目的传输地址,构造SNMP报文,检验并通过认证,把ASN.1报文按BER编码,发送给对等实体,生成和发送SNMP报文,按BER解码,恢复ASN.1报文,语法分析ASN.1报文,验证版本号,认证检查,语法分析PDU,处理PDU,必要时产生应答,丢弃报文,
6、必要时产生陷入,出错,出错,接收和处理SNMP报文,3.4 SNMP操作(SNMP Operations),检索简单对象 检索简单的标量对象值可以用get操作; 如果变量绑定表中包含多个变量,一次还可以检索多个标量对象的值; 如果所有请求的对象值均可以得到,则给于应答;只要有一个对象的值得不到,则可返回错误。,检索表对象 GetRequest可用于有效地搜索表对象。,例:上图中,若发出下面的命令,检索ifNumber的值。 GetRequest(1.3.6.1.2.1.2.1.0) GetResponse(2) 我们知道有两个接口。如果我们进一步想要知道每个接口的数据速率,则可以用下面的命令检
7、索if表中的第五个元素:GetRequest(1.3.6.1.2.1.2.2.1.5.1) 最后的1是索引项的值。得到的响应是: GetResponse(10000000) 说明第一个接口的数据速率是10Mb/s。若要得到第二个接口的速率可用命令:GetNextRequest(1.3.6.1.2.1.2.2.1.5.1) 得到的可能是GetResponse(56000)说明第二个接口的数据速率为56kb/s。,例 4 若管理站希望能够检索整个表,但又不知其中的内容和表中的行数,则可连续使用GetNextRequest命令。,管理站可发送包含所有列对象名称的GetNextRequest: Get
8、NextRequest(ipRouteDest,ipRouteMetric1,ipRouteNextHop) 代理将表中的第一行取值返回: GetResponse(ipRouteDest.9.1.2.3=9.1.2.3,ipRouteMetric1.9.1.2.3=3,ipRouteNextHop.9.1.2.3=99.0.0.3) 根据第一行的值可检索下一行: GetNextRequest(ipRouteDest.9.1.2.3,ipRouteMetric1.9.1.2.3,ipRouteNextHop.9.1.2.3) GetResponse(ipRouteDest.10.0.0.51=1
9、0.0.0.51,ipRouteMetric1.10.0.0.51=5,ipRouteNextHop.10.0.0.51=89.1.1.42) 据此可继续检索第三行。,表的更新和删除 Set命令用于设置或更新变量的值。对于Set命令的应答也是GetResponse,并且要么更新列表中的所有变量,要么一个也不更新。其错误状态为tooBig,noSuchname和genError。 若有一个变量的名字和要设置的值在类型、长度或实际值方面不匹配,则返回错误条件badValue。 例:在表5-3中,若想改变列对象ipRouteMetric1的第一个值,则可发出命令: SetRequest(ipRout
10、eMetric1.9.1.2.3=7) 得到的应答是: GetResponse(ipRouteMetric1.9.1.2.3=7) 其效果是该对象的值由3变成了7。,例 对于表5-3若要增加一行,则可用命令: SetRequest(ipRouteDest.11.3.3.12=11.3.3.12, ipRouteMetric1.11.3.3.12=7, ipRouteNextHop.11.3.3.12=91.0.0.5) 例 7 如果要删除表中的一行,则可以把一个对象的值置为invalid: SetRequest(ipRouteType.9.1.2.3 =invalid) 得到的响应说明表行确已
11、删除: GetResponse(ipRouteType.9.1.2.3 =invalid),3.5 SNMPv2,SNMP具有一定的局限性 : 由于轮询的性能限制,SNMP不适合管理很大的网络。 SNMP不适合检索大量数据。 SNMP的陷入报文是没有应答的,可能会丢掉重要的管理信息。 SNMP只提供简单的团体名认证,安全措施很弱。 MIB-支持的管理对象是很有限的,不足以完成复杂的管理功能。 SNMP不支持管理站之间的通信,而这一点在分布式网络管理中是很需要的。,针对以上SNMPv1的缺陷,SNMPv2对SNMP进行了一定的改进。其增强的主要功能有: 管理信息结构的扩充; 管理站和管理站之间的
12、通信能力; 新的协议操作。,SNMPv2与SNMP系统结构的主要区别 SNMPv2有7种报文 管理者与管理者之间可以通信。 SNMPv2提供3种访问管理信息的方法:管理站和代理之间的请求/响应通信。代理系统到管理站的非确认通信。管理站和管理站之间的请求/响应通信,以支持分布式网络管理。,SNMPv2系统结构,管理应用程序,依赖于网络的协议,IP,UDP,SNMP,依赖于网络的协议,IP,UDP,SNMP,管理应用程序,依赖于网络的协议,IP,UDP,SNMP,管理应用程序,SNMPv2报文 版本号不同 SNMPv2 PDU SNMPv2协议数据单元有3种PDU格式 SNMPv2七种报文类型:G
13、etRequest、GetNextRequest、SetRequest、GetBulkRequest、SNMPv2-Trap、GetResponse、 InformRequest,SNMPv2报文PDU格式,GetRequest,GetNextRequest,SetRequest,InfornRequest和Trap PDU,GetResponse PDU,GetBulkRequest PDU,变量绑定表,(1) GetRequestPDU:SNMPv2对这种操作的响应方式与SNMPv1不同之处是允许部分响应,对变量绑定表中的各个变量进行处理。 (2)GetNextRequestPDU: 其区
14、别于SNMPv1是改变了响应的原子性。,(3) GetBulkRequestPDU:是SNMPv2对原标准的主要增强,用于从代理到管理站传送大量的数据而使所需要的协议交换数目最小,尤其是检索表数据的管理信息。 块检索操作,原理与GetNextRequest操作相同如果请求太大,代理则返回尽可能多的数据,而不是简单地发送一个tooBig错误消息。,(4) SetRequestPDU:SNMPv2 SetRequestPDU在格式和语义上都和SNMPv1完全相同,其操作的基本特性是要么更新所有的变量,要么一个都不更新。使用较多的错误代码是SNMPv2对SNMP的一大提高,使得管理站能了解详细的错误信息,以便采取纠正措施。,(5) SNMPv2-Trap PDU: SNMPv2的陷入采用与Get等操作相同的PDU格式,这与原标准不同。但其也是代理发给管理站的非确认性消息。 (6) InformRepuestPDU: 由管理站功能实体代表一个应用程序发往另一个执行管理站功能的SNMPv2实体,为得到后一个应用程序提供的管理信息。,