【TCP/IP】16. 简单网络管理协议
16. 简单网络管理协议
- 16. 简单网络管理协议
- 16.1 简单网络管理模型
- 16.2 简单网络管理协议概述
- 16.3 报文格式
- 16.4 管理信息结构(SMI)
- 16.5 管理信息库(MIB)
- 16.6 MIB 组
- 本章要点
16. 简单网络管理协议
16.1 简单网络管理模型
简单网络管理协议(SNMP)是应用层协议,用于实现对 TCP/IP 网络的统一管理,核心是 “管理站 - 代理” 模型,通过标准化的结构和协议实现对网络设备的监控与控制。
- SNMP 的组成
基于 TCP/IP 的网络管理包含三个核心部分:- 管理信息库(MIB):存储代理进程中所有可查询和修改的参数,由被管对象及其属性组成,是管理进程与代理进程共享的信息集合。
- 管理信息结构(SMI):定义 MIB 的统一结构和表示方法,规范被管对象的命名、类型和编码规则。
- SNMP 协议:管理进程与代理进程之间的通信协议,定义了信息交互的格式和操作。
- 核心角色
- 管理站(网络管理系统,NMS):网络管理员的接口,能将管理员命令转换为对远程设备的监控 / 控制操作,从全网 MIB 中提取数据并进行分析(如故障诊断),需具备管理应用软件。
- 代理进程(Agent):驻留在被管理设备中的软件 / 硬件,负责:
- 翻译管理站的请求,验证操作可行性;
- 与设备功能实体通信,执行信息处理;
- 向管理站返回响应或主动发送异常通知(trap)。
- 网络管理三要素
- 被管理设备:含代理进程,记录设备状态;
- 网络管理设备:含管理站,具备网络通信能力;
- 管理协议(SNMP):代理与管理站之间交换信息的规则。
- 关键术语
- 网络元素(网元):网络中的具体通信设备(如路由器、交换机)或逻辑实体;
- 对象:具有信息特性的网络资源(如端口状态、流量统计);
- 被管理对象:可被 SNMP 协议管理和控制的网络资源。
16.2 简单网络管理协议概述
SNMP 通过 “轮询” 和 “中断” 两种方式实现管理站与代理的通信,历经三个版本的演进,功能不断完善(尤其是安全性和灵活性)。
- 通信方式
- 轮询(Polling):管理站按固定间隔向代理发送请求,代理返回当前状态或统计数据。
- 缺点:实时性差(故障通知延迟);间隔过短可能导致网络拥塞。
- 中断(Interrupt-based):被管理设备出现异常时,代理主动向管理站发送通知(trap)。
- 优点:实时性强;
- 问题:消耗系统资源,可能影响设备性能。
- 轮询(Polling):管理站按固定间隔向代理发送请求,代理返回当前状态或统计数据。
- SNMP 版本演进
- SNMPv1(RFC 1155、1157 等):基础版本,定义 5 种 PDU(操作),安全性弱(依赖明文 “共同体” 认证)。
- SNMPv2(RFC 2578 等):支持分布式管理,扩展 PDU 至 8 种,增强安全性和功能(如批量获取数据),新增
get-bulk-request
等操作。 - SNMPv3(RFC 3411 等):重点提升安全性,定义全新体系结构,支持认证、加密和访问控制,兼容 v2 的部分标准。
- SNMPv3 体系结构
- SNMP 实体:由 “SNMP 引擎” 和 “应用” 组成,每个网络节点配置一个实体。
- SNMP 引擎:含 4 个子系统:
- 分发器:接收 / 发送 PDU,按版本分派给相应处理模块;
- 报文处理子系统:解析和构造 SNMPv1/v2c/v3 报文;
- 安全子系统:提供认证(完整性和源鉴别)、加密服务,默认采用基于用户的安全模型(USM),认证协议为 HMAC-MD5-96/HMAC-SHA-96,加密协议为 CBC-DES;
- 访问控制子系统:控制对 MIB 对象的访问,默认采用基于视图的访问控制模型。
- SNMP 应用:含 5 类功能模块:
- 命令产生器:生成 SNMP 请求(如 get/set);
- 命令应答器:处理请求并返回响应;
- 通告产生器:生成异步通知(trap);
- 通告接收器:处理异步通知;
- 代理转发器:在 SNMP 实体间转发报文。
- SNMP 引擎:含 4 个子系统:
- SNMP 实体:由 “SNMP 引擎” 和 “应用” 组成,每个网络节点配置一个实体。
16.3 报文格式
SNMP 报文通过 UDP 传输,结构随版本略有差异,核心由 “首部”“操作相关字段”“变量绑定” 组成。
-
SNMPv1 报文结构
报文由三部分组成:-
公共 SNMP 首部:
- 版本:版本号减 1(v1 填 0);
- 共同体(community):管理站与代理间的明文口令(默认 “public”);
- PDU 类型:标识操作类型(0-4,对应 get-request、get-next-request、get-response、set-request、trap)。
-
get/set 首部或 trap 首部:
-
get/set 首部
(用于 get/set 类操作):
- 请求 ID:匹配请求与响应的唯一标识;
- 差错状态:代理返回的操作结果(0 = 成功,1 = 报文过大,2 = 对象不存在等);
- 差错索引:出错变量在变量列表中的偏移(仅差错时有效)。
-
trap 首部
(用于代理主动通知):
- 企业:产生 trap 的设备的对象标识符(位于
1.3.6.1.4.1
(enterprises)子树); - trap 类型(generic-trap):7 种预定义类型(0=coldStart,1=warmStart,2=linkDown,3=linkUp,4=authenticationFailure,5=egpNeighborLoss,6=enterpriseSpecific);
- 特定代码:trap 类型为 6 时,标识自定义事件(否则为 0);
- 时间戳:自代理初始化至事件发生的时间(单位 0.01 秒)。
- 企业:产生 trap 的设备的对象标识符(位于
-
-
变量绑定(Variable-bindings):由 “对象标识符 - 值” 对组成,标识要操作的被管对象及其值(get 请求中值可忽略)。
-
-
端口使用
- 代理进程用161 端口接收 get/set 报文;
- 管理进程用162 端口接收 trap 报文。
-
SNMPv3 报文扩展
- 定义 8 种 PDU(如 get-bulk-request、info-request 等),报文结构新增 “安全参数”(含引擎标识、用户名等),增强安全性。
16.4 管理信息结构(SMI)
SMI 规范了 MIB 中信息的组织、类型和编码,确保管理站与代理能正确解析和交互信息。
-
数据类型
-
通用类型
(基于 ASN.1):
- 简单类型:INTEGER(整数,含枚举)、OCTET STRING(字节串)、DISPLAY STRING(可显示字符串)、NULL(空值)、OBJECT IDENTIFIER(对象标识符);
- 构造类型:SEQUENCE(列表,含 0 个或多个元素)、SEQUENCE OF(向量,元素类型相同,用于表格)。
-
应用类型
(SNMP 专用):
- IpAddress:4 字节,表示 IP 地址;
- PhysAddress:物理地址(如以太网 6 字节);
- Counter32/Counter64:32 位 / 64 位计数器(递增至最大值后归 0);
- Gauge32:32 位计量器(递增至最大值后锁定);
- TimeTicks:时间计数器(单位 0.01 秒)。
-
-
对象命名
-
采用
对象标识符(OID)唯一标识被管对象,形式为点分十进制整数(如
1.3.6.1.2.1
),对应一棵全球命名树:- 顶级节点:iso(1)、ccitt(0)、joint-iso-ccitt(2);
- 因特网相关节点:iso.org.dod.internet(
1.3.6.1
),其下包含 mgmt(2,管理)、private(4,企业私有)等子树; - MIB-2 节点:
1.3.6.1.2.1
(internet.mgmt.mib-2),包含各类网络协议相关对象。
-
-
编码方式
-
采用
基本编码规则(BER),每个数据项编码为 “标记 - 长度 - 值”(TLV)结构:
- 标记:标识数据类型(如 0x02=INTEGER,0x40=IpAddress);
- 长度:值的字节数;
- 值:数据的二进制表示。
-
示例:IP 地址
130.10.20.1
的 BER 编码为40 04 82 0A 14 01
(标记 0x40,长度 4 字节,值为 130.10.20.1 的十六进制)。
-
16.5 管理信息库(MIB)
MIB 是被管对象的集合,定义了网络设备中可被管理的变量,每个变量包含对象名称、类型、访问权限和状态。
- MIB 的组成
每个 MIB 项包含:- 对象:被管对象的名称(如 sysDescr、ifInOctets);
- 语法:对象的数据类型(如 DisplayString、Counter32);
- 访问字段:定义访问权限(按级别从低到高):
- not-accessible(不可访问);
- accessible-for-notify(仅通告可访问);
- read-only(只读);
- read-write(读写);
- read-create(可读可创建);
- 状态字段:标识实现必要性:
- current(当前支持);
- deprecated(当前支持但未来可能取消);
- obsolete(已不支持)。
- MIB 的版本
- MIB-1(1988 年):含 114 项,分 2 组,被管理设备需支持所有适用项。
- MIB-2(1990 年):MIB-1 的扩展,含 171 项,分 10 组(新增如路由、传输层协议相关组),设备需支持所有适用项。
- 扩展 MIB:各企业可定义私有 MIB(位于
1.3.6.1.4.1
(enterprises)子树,如 IBM 为1.3.6.1.4.1.2
,Cisco 为1.3.6.1.4.1.9
)。
- 对象命名树结构
核心子树如下:1.3.6.1
(internet):包含 mgmt(2)、experimental(3)、private(4)等;1.3.6.1.2.1
(mib-2):MIB-2 的核心,包含 system、interface、ip、tcp 等组;1.3.6.1.4.1
(enterprises):企业私有 MIB 子树。
16.6 MIB 组
MIB-2 包含多个组,分别对应网络设备的不同层面(系统、接口、协议等),每组包含特定的被管对象。
-
system 组
提供设备的整体信息,含 7 个变量,用于配置管理和故障管理:变量名称 数据类型 含义 sysDescr DisplayString 系统文字描述(如设备型号、操作系统版本) sysObjectID ObjectID 设备厂商的对象标识符(位于 1.3.6.1.4.1
子树)sysUpTime TimeTicks 设备启动后运行的时间(单位 0.01 秒) sysContact DisplayString 联系人及联系方式(如管理员邮箱) sysName DisplayString 设备的完全合格域名(FQDN) sysLocation DisplayString 设备的物理位置(如 “机房 A-1 架”) sysServices INTEGER(0-127) 设备提供的服务级别(按层次累加,如网络层 = 4,传输层 = 8) -
interface 组
提供物理 / 虚拟接口的信息,含 2 个顶级对象:- ifNumber:INTEGER,设备的接口总数;
- ifTable:接口表,每个接口对应一条记录,包含以下核心变量:
变量名称 数据类型 含义 ifIndex INTEGER 接口索引(1 到 ifNumber) ifDescr DisplayString 接口描述(如 “Ethernet0/0”) ifType INTEGER 接口类型(如以太网 = 6,802.3 以太网 = 7) ifMtu INTEGER 最大传输单元(MTU) ifSpeed Gauge32 接口速率(bps) ifPhysAddress PhysAddress 物理地址(如以太网 MAC 地址) ifAdminStatus INTEGER(1-3) 期望状态(1 = 工作,2 = 不工作,3 = 测试) ifOperStatus INTEGER(1-3) 当前状态(1 = 工作,2 = 不工作,3 = 测试) ifInOctets Counter32 接收的字节总数 ifOutOctets Counter32 发送的字节总数 -
ip 组
提供 IP 协议相关信息,用于配置、故障和性能管理,核心变量包括:变量名称 数据类型 含义 ipForwarding INTEGER(1-2) 是否转发 IP 分组(1 = 是,2 = 否) ipDefaultTTL INTEGER 默认 TTL 值(如 64) ipInReceives Counter32 接收的 IP 数据报总数 ipInHdrErrors Counter32 因首部错误丢弃的数据报数 ipInAddrErrors Counter32 因目的地址错误丢弃的数据报数 ipForwDatagrams Counter32 转发的数据报数 ipInDelivers Counter32 交付给上层协议的数据报数 -
tcp 组
提供 TCP 协议相关信息,含系统对象和连接表,核心变量包括:变量名称 数据类型 含义 tcpRtoAlgorithm INTEGER 重传超时算法(如 1 = 指数退避) tcpActiveOpens Counter32 主动打开连接数(CLOSED→SYN_SENT) tcpPassiveOpens Counter32 被动打开连接数(LISTEN→SYN_RCVD) tcpCurrEstab Gauge32 当前建立的 TCP 连接数 tcpInSegs Counter32 接收的 TCP 段总数 tcpOutSegs Counter32 发送的 TCP 段总数 tcpRetransSegs Counter32 重传的 TCP 段总数 -
udp 组
提供 UDP 协议相关信息,含 4 个简单变量和 1 个表:变量名称 数据类型 含义 udpInDatagrams Counter32 接收的 UDP 数据报总数 udpNoPorts Counter32 因端口无效丢弃的 UDP 数据报数 udpInErrors Counter32 接收的错误 UDP 数据报数 udpOutDatagrams Counter32 发送的 UDP 数据报总数 udpTable SEQUENCE OF UDP 监听表,含本地 IP 地址和端口号 -
sctp 组
随 MIB-2 扩展加入,用于管理 SCTP(流控制传输协议),包含统计信息、参数和关联表等,结构较复杂(详见 P274)。
本章要点
- SNMP 是应用层协议,核心组成包括 MIB(被管对象集合)、SMI(信息结构规范)和 SNMP 协议(通信规则),通过 “管理站 - 代理” 模型实现网络管理。
- 通信方式分为轮询(管理站主动查询)和中断(代理主动通知),各版本中 SNMPv3 安全性最强(支持认证、加密和访问控制)。
- SMI 定义了数据类型(通用 / 应用类型)、对象命名(OID 树)和编码(BER),确保信息交互的一致性。
- MIB-2 是核心管理信息库,包含 system、interface、ip、tcp、udp 等组,每组通过具体变量反映设备状态和协议运行情况。
- 被管对象的访问权限(只读、读写等)和状态(当前、作废等)决定了管理操作的可行性,是配置和监控的基础。