SNMP 报文格式

本文介绍了简单网络管理协议(SNMP)的基本概念,包括其使用的UDP协议、C/S模型及管理进程与代理进程的角色划分。详细解析了SNMP的五种协议数据单元(PDU),并深入探讨了每种PDU的操作流程及报文格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   SNMP采用的是UDP协议,也是采用C/S模型,不过在SNMP会话中,通常不称为客户端,服务器,而是叫管理进程,代理进程,可以认为管理进程是客户端,代理进程是服务器。

   SNMP 规定了 5 种协议数据单元 PDU (也就是 SNMP 报文),用来在管理进程和代理之间的交换。

  • get-request 操作:从代理进程处提取一个或多个参数值。
  • get-next-request 操作:从代理进程处提取紧跟当前参数值的下一个参数值。
  • set-request 操作:设置代理进程的一个或多个参数值。
  • get-response 操作:返回的一个或多个参数值。这个操作是由代理进程发出的,它是前面三种操作的响应操作。
  • trap 操作:代理进程主动发出的报文,通知管理进程有某些事情发生。

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

                                              

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

                        

 

(1)公共 SNMP 首部,共三个字段:

  •  版本

写入版本字段的是版本号减 1,对于 SNMP(即 SNMPV1)则应写入 0。

  • 共同体(community)

共同体就是一个字符串, 作为管理进程和代理进程之间的明文口令,常用的是 6 个字符“public” 。

  • PDU 类型

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

                                                     

(2)get/set 首部

  • 请求标识符(request ID)

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

  • 差错状态(error status)

由代理进程回答时填入 0~5 中的一个数字,见表 3 的描述。

                                                                            

  •  差错索引(error index)

当出现 noSuchName、badValue 或 readOnly 的差错时,由代理进程在回答时设置的一个整数,它指明有差错的变量在变量列表中的偏移。

  (3)trap 首部

  •  企业(enterprise)

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

  • trap 类型

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

                                                                         

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

  •  特定代码(specific-code)

指明代理自定义的时间(若 trap 类型为 6),否则为 0。

  •  时间戳(timestamp)

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

(4)变量绑定(variable-bindings)

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

 

SNMP并不采用简单的二进制格式,上面只说明了SNMP的报文格式,但并没有说明字段是如何进行编码的,实际上SNMP字段编码还是比较复杂的。不同的字段和值有类型区分,一些字段组合起来构成一种新的类型SEQUENCE,类似于C语言的结构体.采用的编码规范BER点击打开接,也是需要认真消化理解的。snmp具体如何编码请看下一篇博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值