首页 > 编程知识 正文

snmp属于哪一层协议(snmp协议端口号)

时间:2023-05-05 05:17:28 阅读:76833 作者:2029

另一方面,SNMP协议概述简单网络管理协议(SNMP )是互联网工程任务组(IETF ):internetengineeringtagementprotocol 该协议基于simplegatewaymonitorprotocol、sgmp:simplegatewaymonitorprotocol。 使用SNMP,管理工作站可以远程管理支持此协议的所有网络设备,包括监视网络状态、更改网络设备配置和接收网络事件警告。 SNMP开始于基于IP的网络管理,但作为行业标准,也成功地进行了电话网络管理。

二、SNMP的工作原理SNMP采用特殊的客户/服务器模式,即代理/管理站模式。 网络的管理和维护是通过管理站和SNMP代理之间的交互进行的。 每个SNMP从代理都会回答有关SNMP管理工作站(主代理)的MIB定义信息的各种查询。 SNMP的应用场景如图所示:

#三. SNMP消息类型

SNMP定义了五种消息类型:获取请求、获取响应、获取下一请求、设置请求和捕获。 )1)监视获取请求、获取下一请求、获取响应)网络的状态

SNMP管理工作站通过Get-Request消息从具有SNMP代理的网络设备获取信息,SNMP代理通过Get-Response消息进行响应。 Get-Next- Request与Get-Request结合使用,用于查询特定表对象中的列元素。 (2)设置请求(网络设备配置更改) ) ) ) )。

SNMP管理工作站可以使用Set-Request远程配置网络设备,如设备名称、设备属性、删除设备或启用/禁用设备属性。 (3)捕获(接收网络事件警告) ) ) ) )。

SNMP代理使用Trap向SNMP管理工作站发送非请求消息。 通常用于说明接口UP/DOWN、IP地址变更等事件的发生。 在上述五条消息中,Get-Request、Get-Next-Request和Set-Request从管理工作站发送到代理端的161个端口。 以下两种类型的获取响应和捕获由代理进程发送到管理进程,其中捕获消息发送到管理进程的162个端口,所有数据都进行UDP封装: SNMP工作流程图

四. SNMP消息格式下图是封装在UDP数据报中的五种操作的SNMP消息格式。 一条SNMP消息包括公共SNMP报头、get/set报头、

1、公用SNMP标头

总共三个字段:

a版本

写入版本字段的是版本号减去1,对于SNMP (SNMP v1 ),必须写入0。 b公共(community ) ) ) ) ) ) ) )。

共同体是字符串,作为管理进程和代理进程之间的明文密码,常用的是6个字符的“公共”。 cPDU类型

2、获取/设置标头

a请求标识符(请求id ) )

这是管理进程设置的整数值。 代理进程在发送get-response消息时也会返回此请求标识符。 管理进程可以同时向许多代理发送get消息,所有这些消息都使用UDP发送,第一个发送的可能稍后到达。 已设置请求标识符,以使管理进程能够识别返回的响应消息处于哪个请求消息b -错误状态(error status )

代理进程回答时填写0到5之间的数字。 参考下图说明“错误索引”(error index )

如果发生noSuchName、badValue或readOnly错误,代理进程将在回答时设置的整数。 这表示发生错误的变量在变量列表中的偏移。 3、陷阱题头

a企业(企业) ) )。

要输入捕获消息的网络设备的对象标识符。 此对象标识符必须是图3中对象命名树的企业节点{1.3.6.1.4.1}下的子树。 b捕获类型

此字段的正式名称为generic-trap,分为表4七种类型,在使用上述类型2、3和5时,消息后面变量部分的第一个变量必须标识响应的接口。

(c特定代码(特定代码) () ) ) ) ) ) ) ) ) ) ) 652

指示代理自定义的时间。 如果捕获类型为6,否则为0。

d时间戳(timestamp ) )

显示从代理进程初始化到trap报告的事件发生之间经过的时间(以10ms表示)。 例如,如果时间戳为1908,则表示代理初始化后1908ms发生了此时间。

4、变量绑定(可变绑定)

指示一个或多个变量的名称和对应的值。 在get或get-next消息中,请忽略变量值。

管理变量的显示

管理变量表示在某个时间点管理对象类型的值(或该类型的实例),SNMP将管理变量作为操作对象。

管理变量的显示方法规定如下: x.y。 其中x是要管理的对象标识符。 y是一组数字,对于非表型变量为0,对于表型变量为该表的索引;例如,对于接口表,y是唯一确定对象类型值的数字

的接口号,或路由表中的目的网络地址等等 。如:在MIB文件里定义了ipAdEntNetMask这一管理对象,其object identifier为1.3.6.1.1.5.6.1.3它是个路由表中的一项,它的一个实例就是路由表中某一行的子网掩码,如果这行的索引、目的网络地址为129.102.1.0。则这个变量名是:1.3.6.1.1.5.6.1.3.129.102.1.0。在以后的说明中,为了方便,把唯一确定管理变量的一组数字,也就是x.y中的y称作实例。

五、SNMP的运行过程

驻留在被管设备上的AGENT从UDP端口161接受来自网管站的串行化报文,经解码、团体名验证、分析得到管理变量在MIB树中对应的节点,从相应的模块中得到管理变量的值,再形成响应报文,编码发送回网管站。网管站得到响应报文后,再经同样的处理,最终显示结果 下面根据RFC1157详细介绍Agent接受到报文后采取的动作:

首先解码生成用内部数据结构表示的报文,解码依据ASN.1的基本编码规则,如果在此过程中出现错误导致解码失败则丢弃该报文,不做进一步处理。

第二步:将报文中的版本号取出,如果与本Agent支持的SNMP版本不一致,则丢弃该报文,不做进一步处理。当前北研的数据通信产品只支持SNMP版本1。

第三步:将报文中的团体名取出,此团体名由发出请求的网管站填写。如与本设备认可的团体名不符,则丢弃该报文,不做进一步处理,同时产生一个陷阱报文。SNMPv1只提供了较弱的安全措施,在版本3中这一功能将大大加强。

第四步:从通过验证的ASN.1对象中提出协议数据单元PDU,如果失败,丢弃报文,不做进一不处理。否则处理PDU,结果将产生一个报文,该报文的发送目的地址应同收到报文的源地址一致。

根据不同的PDU,SNMP协议实体将做不同的处理:

1、GetRequest PDU

第一种情况:如果PDU中的变量名在本地维护的MIB树中不存在,则接受到这个PDU的协议实体将向发出者发送一个GetResponse报文,其中的PDU与源PDU只有一点不同:将ERROR-STATUS置为noSuchName,并在ERROR-INDEX中指出产生该变量在变量LIST中的位置。 第二种情况:如果本地协议实体将产生的响应报文的长度大于本地长度限制,将向该PDU的发出者发送一个GetResponse报文,该PDU除了ERROR-STATUS置为tooBig,ERROR-INDEX置为0以外,与源PDU相同。 第三种情况:如果本地协议实体因为其他原因不能产生正确的响应报文,将向该PDU的发出者发送一个GetResponse报文,该PDU除了ERROR-STATUS置为genErr,ERROR-INDEX置为出错变量在变量LIST中的位置,其余与源PDU相同。 第四种情况:如果上面的情况都没有发生,则本地协议实体向该PDU的发出者发送一个GetResponse报文,该PDU中将包含变量名和相应值的对偶表,ERROR-STATUS为noError,ERROR-INDEX为0,request-id域的值应与收到PDU的request-id相同。

2、GetNextRequest PDU

GetNextRequest PDU的最重要的功能是表的遍历,这种操作受到了前面所说的管理变量的表示方法的支持,从而可以访问一组相关的变量,就好象他们在一个表内。 下面通过一个例子解释表遍历的过程: 被管设备维护如下路由表:

Destination NextHop Metric
10.0.0.99 89.1.1.42 5
9.1.2.3 99.0.0.3 3
10.0.0.51 89.1.1.42 5

假设网管站欲取得这张路由表的信息,该表的索引是目的网络地址。网管站向被管设备发送一个GetNextRequest PDU,其中的受管对象的标识如下

GetNextRequest ( ipRouteDest, ipRouteNextHop, ipRouteMetric1 )

SNMP agent响应如下

GetResponse PDU:
GetResponse (( ipRouteDest.9.1.2.3 = “9.1.2.3” ),
( ipRouteNextHop.9.1.2.3 = “99.0.0.3” ),
( ipRouteMetric1.9.1.2.3 = 3 ))

网管站继续:

GetNextRequest ( ipRouteDest.9.1.2.3,
ipRouteNextHop.9.1.2.3,
ipRouteMetric1.9.1.2.3 )

agent响应:

GetResponse (( ipRouteDest.10.0.0.51 = “10.0.0.51” ),
( ipRouteNextHop.10.0.0.51 = “89.1.1.42” ),
( ipRouteMetric1.10.0.0.51 = 5 ))

值得注意的是agent必须能够确定下一个管理变量名,以保证所有变量能被取到且只被取到一次。

网管站继续:

GetNextRequest ( ipRouteDest.10.0.0.51,
ipRouteNextHop.10.0.0.51,
ipRouteMetric1.10.0.0.51 )

agent 响应:

GetResponse (( ipRouteDest.10.0.0.99 = “10.0.0.99” ),
( ipRouteNextHop.10.0.0.99 = “89.1.1.42” ),
( ipRouteMetric1.10.0.0.99 = 5 ))

网管站继续

GetNextRequest ( ipRouteDest.10.0.0.99,
ipRouteNextHop.10.0.0.99,
ipRouteMetric1.10.0.0.99 )

这时因为路由表中所有的行都被取遍,agent因返回路由表对象的下一字典后继即该管理对象在MIB树中的后序遍历的直接后继。这里应是nettoMediaIndex,管理对象的OBJECT IDENTIFIER。这个响应通知网管站对表的遍历已经完成。

3、GetResponse PDU

GetResponse PDU只有当受到getRequest GetNextRequest SetRequest才由协议实体产生,网管站收到这个PDU后,应显示其结果。

4、SetRequest PDU

SetRequest PDU除了PDU类型标识以外,和GetRequest相同,当需要对被管变量进行写操作时,网管站侧的协议实体将生成该PDU。 对SetRequest的响应将根据下面情况分别处理: 如果是关于一个只读变量的设置请求,则收到该PDU的协议实体产生一个GetReponse报文,并置error status为noSuchName, error index的值是错误变量在变量list中的位置。 如果被管设备上的协议实体收到的PDU中的变量对偶中的值,类型、长度不符和要求,则收到该PDU的协议实体产生一个GetReponse报文,并置error status为badValue, error index的值是错误变量在变量list中的位置。 如果需要产生的GetReponse报文长度超过了本地限制,则收到该PDU的协议实体产生一个GetReponse报文,并置error status为tooBig, error index的值是0。 如果是其他原因导致SET失败,则收到该PDU的协议实体产生一个GetReponse报文,并置error status为genErr, error index的值是错误变量在变量list中的位置。 如果不符合上面任何情况,则agent将把管理变量设置收到的PDU中的相应值,这往往可以改变被管设备的运行状态。同时产生一个GetResponse PDU,其中error status置为noError,error index的值为0。

5、Trap PDU

Trap PDU的有如下的形式


Trap是被管设备遇到紧急情况时主动向网管站发送的消息。网管站收到trap PDU后要将起变量对偶表中的内容显示出来。一些常用的trap类型有冷、热启动,链路状态发生变化等。

参考文章

https://tools.ietf.org/html/rfc1157

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。