当前位置: 首页 > news >正文

【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 网络的统一管理,核心是 “管理站 - 代理” 模型,通过标准化的结构和协议实现对网络设备的监控与控制。

  1. SNMP 的组成
    基于 TCP/IP 的网络管理包含三个核心部分:
    • 管理信息库(MIB):存储代理进程中所有可查询和修改的参数,由被管对象及其属性组成,是管理进程与代理进程共享的信息集合。
    • 管理信息结构(SMI):定义 MIB 的统一结构和表示方法,规范被管对象的命名、类型和编码规则。
    • SNMP 协议:管理进程与代理进程之间的通信协议,定义了信息交互的格式和操作。
  2. 核心角色
    • 管理站(网络管理系统,NMS):网络管理员的接口,能将管理员命令转换为对远程设备的监控 / 控制操作,从全网 MIB 中提取数据并进行分析(如故障诊断),需具备管理应用软件。
    • 代理进程(Agent):驻留在被管理设备中的软件 / 硬件,负责:
      • 翻译管理站的请求,验证操作可行性;
      • 与设备功能实体通信,执行信息处理;
      • 向管理站返回响应或主动发送异常通知(trap)。
  3. 网络管理三要素
    • 被管理设备:含代理进程,记录设备状态;
    • 网络管理设备:含管理站,具备网络通信能力;
    • 管理协议(SNMP):代理与管理站之间交换信息的规则。
  4. 关键术语
    • 网络元素(网元):网络中的具体通信设备(如路由器、交换机)或逻辑实体;
    • 对象:具有信息特性的网络资源(如端口状态、流量统计);
    • 被管理对象:可被 SNMP 协议管理和控制的网络资源。

16.2 简单网络管理协议概述

SNMP 通过 “轮询” 和 “中断” 两种方式实现管理站与代理的通信,历经三个版本的演进,功能不断完善(尤其是安全性和灵活性)。

  1. 通信方式
    • 轮询(Polling):管理站按固定间隔向代理发送请求,代理返回当前状态或统计数据。
      • 缺点:实时性差(故障通知延迟);间隔过短可能导致网络拥塞。
    • 中断(Interrupt-based):被管理设备出现异常时,代理主动向管理站发送通知(trap)。
      • 优点:实时性强;
      • 问题:消耗系统资源,可能影响设备性能。
  2. SNMP 版本演进
    • SNMPv1(RFC 1155、1157 等):基础版本,定义 5 种 PDU(操作),安全性弱(依赖明文 “共同体” 认证)。
    • SNMPv2(RFC 2578 等):支持分布式管理,扩展 PDU 至 8 种,增强安全性和功能(如批量获取数据),新增get-bulk-request等操作。
    • SNMPv3(RFC 3411 等):重点提升安全性,定义全新体系结构,支持认证、加密和访问控制,兼容 v2 的部分标准。
  3. 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 实体间转发报文。

16.3 报文格式

SNMP 报文通过 UDP 传输,结构随版本略有差异,核心由 “首部”“操作相关字段”“变量绑定” 组成。

  1. 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 秒)。
    • 变量绑定(Variable-bindings):由 “对象标识符 - 值” 对组成,标识要操作的被管对象及其值(get 请求中值可忽略)。

  2. 端口使用

    • 代理进程用161 端口接收 get/set 报文;
    • 管理进程用162 端口接收 trap 报文。
  3. SNMPv3 报文扩展

    • 定义 8 种 PDU(如 get-bulk-request、info-request 等),报文结构新增 “安全参数”(含引擎标识、用户名等),增强安全性。

16.4 管理信息结构(SMI)

SMI 规范了 MIB 中信息的组织、类型和编码,确保管理站与代理能正确解析和交互信息。

  1. 数据类型

    • 通用类型

      (基于 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 秒)。
  2. 对象命名

    • 采用

      对象标识符(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),包含各类网络协议相关对象。
  3. 编码方式

    • 采用

      基本编码规则(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 是被管对象的集合,定义了网络设备中可被管理的变量,每个变量包含对象名称、类型、访问权限和状态。

  1. MIB 的组成
    每个 MIB 项包含:
    • 对象:被管对象的名称(如 sysDescr、ifInOctets);
    • 语法:对象的数据类型(如 DisplayString、Counter32);
    • 访问字段:定义访问权限(按级别从低到高):
      • not-accessible(不可访问);
      • accessible-for-notify(仅通告可访问);
      • read-only(只读);
      • read-write(读写);
      • read-create(可读可创建);
    • 状态字段:标识实现必要性:
      • current(当前支持);
      • deprecated(当前支持但未来可能取消);
      • obsolete(已不支持)。
  2. 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)。
  3. 对象命名树结构
    核心子树如下:
    • 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 包含多个组,分别对应网络设备的不同层面(系统、接口、协议等),每组包含特定的被管对象。

  1. system 组
    提供设备的整体信息,含 7 个变量,用于配置管理和故障管理:

    变量名称数据类型含义
    sysDescrDisplayString系统文字描述(如设备型号、操作系统版本)
    sysObjectIDObjectID设备厂商的对象标识符(位于1.3.6.1.4.1子树)
    sysUpTimeTimeTicks设备启动后运行的时间(单位 0.01 秒)
    sysContactDisplayString联系人及联系方式(如管理员邮箱)
    sysNameDisplayString设备的完全合格域名(FQDN)
    sysLocationDisplayString设备的物理位置(如 “机房 A-1 架”)
    sysServicesINTEGER(0-127)设备提供的服务级别(按层次累加,如网络层 = 4,传输层 = 8)
  2. interface 组
    提供物理 / 虚拟接口的信息,含 2 个顶级对象:

    • ifNumber:INTEGER,设备的接口总数;
    • ifTable:接口表,每个接口对应一条记录,包含以下核心变量:
    变量名称数据类型含义
    ifIndexINTEGER接口索引(1 到 ifNumber)
    ifDescrDisplayString接口描述(如 “Ethernet0/0”)
    ifTypeINTEGER接口类型(如以太网 = 6,802.3 以太网 = 7)
    ifMtuINTEGER最大传输单元(MTU)
    ifSpeedGauge32接口速率(bps)
    ifPhysAddressPhysAddress物理地址(如以太网 MAC 地址)
    ifAdminStatusINTEGER(1-3)期望状态(1 = 工作,2 = 不工作,3 = 测试)
    ifOperStatusINTEGER(1-3)当前状态(1 = 工作,2 = 不工作,3 = 测试)
    ifInOctetsCounter32接收的字节总数
    ifOutOctetsCounter32发送的字节总数
  3. ip 组
    提供 IP 协议相关信息,用于配置、故障和性能管理,核心变量包括:

    变量名称数据类型含义
    ipForwardingINTEGER(1-2)是否转发 IP 分组(1 = 是,2 = 否)
    ipDefaultTTLINTEGER默认 TTL 值(如 64)
    ipInReceivesCounter32接收的 IP 数据报总数
    ipInHdrErrorsCounter32因首部错误丢弃的数据报数
    ipInAddrErrorsCounter32因目的地址错误丢弃的数据报数
    ipForwDatagramsCounter32转发的数据报数
    ipInDeliversCounter32交付给上层协议的数据报数
  4. tcp 组
    提供 TCP 协议相关信息,含系统对象和连接表,核心变量包括:

    变量名称数据类型含义
    tcpRtoAlgorithmINTEGER重传超时算法(如 1 = 指数退避)
    tcpActiveOpensCounter32主动打开连接数(CLOSED→SYN_SENT)
    tcpPassiveOpensCounter32被动打开连接数(LISTEN→SYN_RCVD)
    tcpCurrEstabGauge32当前建立的 TCP 连接数
    tcpInSegsCounter32接收的 TCP 段总数
    tcpOutSegsCounter32发送的 TCP 段总数
    tcpRetransSegsCounter32重传的 TCP 段总数
  5. udp 组
    提供 UDP 协议相关信息,含 4 个简单变量和 1 个表:

    变量名称数据类型含义
    udpInDatagramsCounter32接收的 UDP 数据报总数
    udpNoPortsCounter32因端口无效丢弃的 UDP 数据报数
    udpInErrorsCounter32接收的错误 UDP 数据报数
    udpOutDatagramsCounter32发送的 UDP 数据报总数
    udpTableSEQUENCE OFUDP 监听表,含本地 IP 地址和端口号
  6. sctp 组
    随 MIB-2 扩展加入,用于管理 SCTP(流控制传输协议),包含统计信息、参数和关联表等,结构较复杂(详见 P274)。

本章要点

  • SNMP 是应用层协议,核心组成包括 MIB(被管对象集合)、SMI(信息结构规范)和 SNMP 协议(通信规则),通过 “管理站 - 代理” 模型实现网络管理。
  • 通信方式分为轮询(管理站主动查询)和中断(代理主动通知),各版本中 SNMPv3 安全性最强(支持认证、加密和访问控制)。
  • SMI 定义了数据类型(通用 / 应用类型)、对象命名(OID 树)和编码(BER),确保信息交互的一致性。
  • MIB-2 是核心管理信息库,包含 system、interface、ip、tcp、udp 等组,每组通过具体变量反映设备状态和协议运行情况。
  • 被管对象的访问权限(只读、读写等)和状态(当前、作废等)决定了管理操作的可行性,是配置和监控的基础。
http://www.dtcms.com/a/275023.html

相关文章:

  • 天晟科技携手万表平台,共同推动RWA项目发展
  • 从「小公司人事」到「HRBP」:选对工具,比转岗更能解决成长焦虑
  • Java大厂面试故事:谢飞机的互联网音视频场景技术面试全纪录(Spring Boot、MyBatis、Kafka、Redis、AI等)
  • kubernetes单机部署踩坑笔记
  • DIDCTF-蓝帽杯
  • 谷歌云代理商:谷歌云TPU/GPU如何加速您的AI模型训练和推理
  • 【数据结构与算法】206.反转链表(LeetCode)
  • C++:非类型模板参数,模板特化以及模板的分离编译
  • 实现将文本数据(input_text)转换为input_embeddings的操作
  • 《从依赖纠缠到接口协作:ASP.NET Core注入式开发指南》
  • Vue 表单开发优化实践:如何优雅地合并 `data()` 与 `resetForm()` 中的重复对象
  • Sigma-Aldrich 细胞培养实验方案 | 通过Hoechst DNA染色检测细胞的支原体污染
  • 拔高原理篇
  • 奇哥面试记:SpringBoot整合RabbitMQ与高级特性,一不小心吊打面试官
  • java底层的native和沙箱安全机制
  • Lecture #19 : Multi-Version Concurrency Control
  • 深入理解JVM的垃圾收集(GC)机制
  • Next知识框架、SSR、SSG和ISR知识框架梳理
  • c++——运算符的重载
  • 鸿蒙开发之ArkTS常量与变量的命名规则
  • 面向对象编程
  • [面试] 手写题-选择排序
  • 持有对象-泛型和类型安全的容器
  • 深度学习中的归一化技术详解:BN、LN、IN、GN
  • Kubernetes 高级调度特性
  • C语言:位运算
  • Redis 哨兵机制
  • 多代理系统(multi-agent)框架深度解析:架构、特性与未来
  • 无代码自动化测试工具
  • STM32G473串口通信-USART/UART配置和清除串口寄存器状态的注意事项