《计算机网络-自顶向下方法》5.7 网络管理、SNMP和NETCONF/YANG 读书笔记

目录

  • 导语
  • [一、5.7.1 网络管理框架](#一、5.7.1 网络管理框架)
  • [二、5.7.2 简单网络管理协议和管理信息库](#二、5.7.2 简单网络管理协议和管理信息库)
  • [三、5.7.3 NETCONF和YANG](#三、5.7.3 NETCONF和YANG)
  • 本节核心总结(必看)
  • 结语

导语

  大家好呀~前面几节我们学习了路由选择协议(OSPF、BGP)、SDN控制平面和ICMP。这一节我们来学习一个运维向的话题------网络管理(Network Management)

  你可能会问:网络管理不就是"管网络"吗?有什么好学的?其实,网络管理是一门专门的学科------一个大型网络(比如ISP的骨干网、数据中心网络)可能有几万台设备,怎么监控它们的状态?怎么配置它们?怎么发现故障?怎么收集流量统计?这些都需要专门的协议和框架。

  这一节我们会学习网络管理的基本框架,然后深入两个最重要的协议:传统的SNMP(简单网络管理协议)和新一代的NETCONF/YANG。SNMP是过去30年网络管理的标准,而NETCONF/YANG代表了网络管理的未来------可编程、自动化、模型驱动。准备好了吗?让我们开始~


一、5.7.1 网络管理框架

1. 什么是网络管理?

  **网络管理(Network Management)**是指对网络设备进行监控、配置、故障诊断和性能优化的过程。ISO定义了网络管理的五大功能领域(FCAPS):

  • F(Fault Management,故障管理):检测、定位和修复网络故障
  • C(Configuration Management,配置管理):管理设备配置,跟踪配置变更
  • A(Accounting Management,计费管理):统计用户资源使用,用于计费
  • P(Performance Management,性能管理):监控和优化网络性能(带宽、延迟、丢包率)
  • S(Security Management,安全管理):管理用户认证、访问控制、安全策略

  通俗类比:网络管理就像城市的交通管理中心------监控每个路口的车流量(性能管理),发现交通事故后派交警处理(故障管理),调整红绿灯配时(配置管理),统计各路段的通行量用于收费(计费管理),设置交通管制和监控摄像头(安全管理)。

2. 网络管理的基本架构

  网络管理系统通常采用**管理者-代理(Manager-Agent)**架构:

  • 管理者(Manager):运行在管理服务器上的网络管理软件(如Zabbix、SolarWinds、Cacti),负责收集设备信息、下发配置、展示网络状态。
  • 代理(Agent):运行在被管理设备(路由器、交换机、服务器)上的软件,负责收集本地信息、响应管理者的请求、主动上报异常事件。
  • 管理协议:管理者和代理之间通信的协议,如SNMP、NETCONF。
  • 管理信息库(MIB):定义了设备上哪些信息可以被管理、信息的结构和含义。

  工作流程:管理者通过管理协议向代理发送请求(如"查询端口1的流量"),代理查询本地MIB,返回结果。代理也可以在发生异常时(如端口down、CPU过高)主动向管理者发送**陷阱(Trap)**消息。

3. 网络管理的演进

  网络管理经历了几代演进:

  • 第一代(1980s):简单网络监控,用ICMP ping检测设备存活,用SNMPv1收集基本信息。
  • 第二代(1990s-2000s):SNMPv2c/v3普及,MIB标准化,出现专业的NMS(网络管理系统)如HP OpenView、CiscoWorks。
  • 第三代(2010s):NETCONF/YANG兴起,网络配置自动化,SDN和网络编排出现,DevOps/NetDevOps理念普及。
  • 第四代(现在):意图驱动网络(IBN)、AI运维(AIOps)、网络自动化和遥测(Streaming Telemetry)。

二、5.7.2 简单网络管理协议和管理信息库

1. SNMP概述

  **SNMP(Simple Network Management Protocol,简单网络管理协议)**是最广泛使用的网络管理协议,定义在RFC 1157(v1)、RFC 1901-1908(v2c)、RFC 3411-3418(v3)中。

  SNMP使用UDP作为传输层协议:

  • 代理监听UDP 161端口,接收管理者的请求
  • 管理者监听UDP 162端口,接收代理的Trap通知

  SNMP有三个版本:

  • SNMPv1:最早版本,只支持明文的团体字(community string)认证,安全性差。只支持基本的操作。
  • SNMPv2c:增加了批量获取(GetBulk)、64位计数器等改进,但仍然用明文团体字认证,安全性没有本质提升。v2c是目前最广泛使用的版本。
  • SNMPv3:增加了安全机制------支持认证(MD5/SHA)和加密(DES/AES),支持基于用户的访问控制(USM)和基于视图的访问控制(VACM)。安全性最好,但配置复杂。

2. SNMP操作

  SNMP定义了几种基本操作:

  • Get:管理者请求代理获取一个或多个MIB变量的值。
  • GetNext:获取指定OID的下一个变量的值,用于遍历MIB树。
  • GetBulk(v2+):批量获取大量数据,比反复GetNext高效,常用于获取整个表(如路由表、ARP表)。
  • Set:管理者设置代理上的MIB变量的值(如修改配置、关闭端口)。
  • Trap:代理主动向管理者发送的异常通知(如端口up/down、CPU过高、认证失败)。不需要管理者请求。
  • Inform(v2+):和Trap类似,但需要管理者确认,更可靠。

3. MIB(管理信息库)

  MIB(Management Information Base,管理信息库)定义了设备上可以被管理的对象的集合。MIB不是一个物理数据库,而是一个虚拟的信息树,每个节点代表一个可管理的对象。

  MIB使用**OID(Object Identifier,对象标识符)**来唯一标识每个对象。OID是一个点分十进制的数字序列,从根开始逐级编号,比如:

  • 1.3.6.1.2.1.1.1 = sysDescr(系统描述)
  • 1.3.6.1.2.1.2.2.1.10 = ifInOctets(端口入方向字节数)
  • 1.3.6.1.2.1.4.20 = ipAddrTable(IP地址表)

  MIB树的结构:

复制代码
iso(1)
  org(3)
    dod(6)
      internet(1)
        mgmt(2)
          mib-2(1)
            system(1)
            interfaces(2)
            ip(4)
            tcp(6)
            udp(7)
            ...

  MIB分为标准MIB和私有MIB:

  • 标准MIB(MIB-II,RFC 1213):定义了所有设备都应该支持的通用对象(系统信息、接口、IP、TCP、UDP等)。
  • 私有MIB(Enterprise MIB) :各厂商定义的私有对象(如思科的CPU利用率、华为的光模块功率等),在1.3.6.1.4.1分支下。

  MIB用**ASN.1(抽象语法标记1)定义,用BER(基本编码规则)**编码。这是一种比较古老的建模和编码方式,可读性差,这也是后来YANG出现的原因之一。

4. SNMP的优缺点

  SNMP的优点:

  • 简单、轻量,几乎所有网络设备都支持
  • 标准化程度高,跨厂商兼容
  • 适合监控类操作(读取状态、流量统计)

  SNMP的缺点:

  • 不适合配置管理(Set操作功能弱,没有事务机制,配置错误难以回滚)
  • MIB用ASN.1定义,可读性差,扩展困难
  • v1/v2c安全性差(明文团体字),v3配置复杂
  • 基于请求-响应模式,不适合实时推送大量数据(被Streaming Telemetry取代)

三、5.7.3 NETCONF和YANG

1. 为什么需要NETCONF/YANG?

  SNMP在监控领域表现不错,但在配置管理方面力不从心。传统网络设备的配置主要靠CLI(命令行界面)------工程师手动敲命令,或者用Expect脚本自动化。但CLI是给人用的,不是给程序用的:

  • 不同厂商的CLI语法不同,难以统一
  • CLI输出是文本格式,程序解析困难
  • 没有事务机制,配置出错难以回滚
  • 没有标准的数据模型

  为了解决这些问题,IETF定义了NETCONF(RFC 6241) ------一种基于XML的网络配置协议,配合YANG(RFC 7950)------一种现代化的数据建模语言。NETCONF/YANG代表了网络管理的未来方向,也是SDN和网络自动化的基础。

2. NETCONF协议

  **NETCONF(Network Configuration Protocol)**是一种用于网络设备配置和管理的协议,特点:

  • 基于SSH传输:NETCONF over SSH(端口830),安全可靠。也支持TLS和SOAP。
  • 基于XML编码:所有消息和数据都用XML格式,结构化、可解析。
  • 分层架构
    • 内容层:配置数据和状态数据(用YANG建模)
    • 操作层:<get><get-config><edit-config><commit><copy-config>等操作
    • 消息层:<rpc><rpc-reply><notification>消息封装
    • 传输层:SSH/TLS

  NETCONF的核心操作:

  • <get>:获取配置数据和状态数据
  • <get-config>:只获取配置数据(从指定的配置数据库)
  • <edit-config>:修改配置数据(支持merge、replace、create、delete等操作)
  • <commit>:提交候选配置到运行配置(候选配置机制)
  • <copy-config>:复制配置(如从running复制到startup)
  • <delete-config>:删除配置数据库
  • <lock>/<unlock>:锁定配置数据库,防止多人同时修改
  • <kill-session>:终止另一个会话

  NETCONF的一个重要特性是候选配置(Candidate Configuration) :你可以先把修改写入候选配置数据库,验证无误后再<commit>提交到运行配置。如果出错,可以<discard-changes>放弃修改。这提供了事务性和回滚能力,是SNMP完全不具备的。

3. YANG数据建模语言

  **YANG(Yet Another Next Generation)**是一种用于建模网络配置和状态数据的语言。它替代了SNMP的ASN.1 MIB,具有以下特点:

  • 可读性强:YANG的语法类似C/Java,人可以直接阅读和编写。
  • 层次化结构:用容器(container)、列表(list)、叶子(leaf)等构建层次化的数据模型。
  • 丰富的数据类型:支持内置类型(int、string、boolean等)和派生类型(typedef)。
  • 约束和验证:支持must表达式、when条件、默认值、范围限制等,数据可以被验证。
  • 可扩展:支持augment(扩展现有模型)和deviation(偏离标准模型)。
  • 可翻译:YANG模型可以翻译成XML(NETCONF用)、JSON(RESTCONF用)、CBOR等格式。

  YANG模型示例(简化的接口配置):

yang 复制代码
container interfaces {
  list interface {
    key "name";
    leaf name { type string; }
    leaf type { type string; }
    leaf enabled { type boolean; default true; }
    container ipv4 {
      list address {
        key "ip";
        leaf ip { type inet:ipv4-address; }
        leaf prefix-length { type uint8; range "1..32"; }
      }
    }
  }
}

  YANG模型分为:

  • 标准模型:IETF定义的通用模型(如ietf-interfaces、ietf-routing、ietf-system)
  • 厂商模型:思科、华为等厂商定义的私有扩展模型
  • 开源模型:OpenConfig(由Google、微软等发起的开放配置模型项目)

4. NETCONF/YANG的生态

  NETCONF/YANG已经形成了完整的生态:

  • RESTCONF(RFC 8040):NETCONF的HTTP版本,用REST API + JSON,更适合Web应用和云原生环境。
  • gNMI(gRPC Network Management Interface):谷歌推出的基于gRPC的网络管理接口,支持流式遥测(Streaming Telemetry)。
  • Ansible/NETCONF模块:用Ansible自动化管理支持NETCONF的设备。
  • ncclient:Python的NETCONF客户端库。
  • pyang:YANG模型的编译器和验证工具。

  越来越多的网络设备(思科IOS-XR/NX-OS、华为VRP、Juniper Junos、Arista EOS)都支持NETCONF/YANG,网络自动化正在从"CLI脚本"向"模型驱动"转变。


本节核心总结(必看)

  这一节学习了网络管理,核心要点:

一、网络管理框架

  • FCAPS五大功能:故障、配置、计费、性能、安全管理
  • 管理者-代理架构:管理者(NMS)+ 代理(设备上)+ 管理协议 + MIB
  • 演进:SNMP → NETCONF/YANG → 意图驱动网络/AIOps

二、SNMP和MIB

  • SNMPv1/v2c(明文团体字,v2c最常用)/v3(认证+加密)
  • 操作:Get、GetNext、GetBulk、Set、Trap、Inform
  • UDP 161(代理)/162(管理者Trap)
  • MIB:用OID标识管理对象的虚拟信息树,ASN.1定义
  • MIB-II标准模型 + 厂商私有模型
  • 优点:简单通用;缺点:配置管理弱、安全性差、MIB可读性差

三、NETCONF和YANG

  • NETCONF:基于SSH+XML的配置协议,支持候选配置和事务提交
  • 操作:get、get-config、edit-config、commit、lock等
  • YANG:现代化数据建模语言,可读性强、层次化、可验证
  • RESTCONF:NETCONF的HTTP/JSON版本
  • gNMI:gRPC网络管理接口,支持流式遥测
  • 代表网络自动化和模型驱动的未来

关键概念清单

  • 网络管理(Network Management):监控、配置、管理网络设备
  • FCAPS:网络管理五大功能领域
  • 管理者-代理(Manager-Agent):网络管理的基本架构
  • SNMP(简单网络管理协议):传统网络管理协议
  • MIB(管理信息库):可管理对象的虚拟信息树
  • OID(对象标识符):MIB对象的唯一标识
  • Trap:代理主动上报的异常通知
  • NETCONF:基于XML的网络配置协议
  • YANG:网络数据建模语言
  • 候选配置(Candidate Config):NETCONF的事务性配置机制
  • RESTCONF:NETCONF的HTTP版本
  • Streaming Telemetry:流式遥测,实时推送设备数据

结语

  这一节我们学习了网络管理------从传统的SNMP/MIB到新一代的NETCONF/YANG。网络管理是保证网络稳定运行的关键,也是网络工程师和运维工程师的核心技能。随着SDN、网络自动化和云原生的发展,网络管理正在从"手动CLI"向"模型驱动、自动化、意图驱动"演进。

  到这里,第5章的所有技术内容(5.1-5.7)就全部学完了。下一节5.8我们会做全章总结,梳理知识图谱,做课后习题,还有Wireshark ICMP实验------用Wireshark实际抓包看看ICMP报文长什么样、ping和traceroute在网络中到底传输了什么。让我们用一节精彩的总结和实验来结束第5章吧!

  如果你觉得这篇笔记对你有帮助,欢迎点赞收藏~有问题也欢迎留言讨论,我们一起进步!

相关推荐
长友cy1 小时前
Qt官方示例D-BusListNames阅读
开发语言
萧瑟余晖1 小时前
Java深入解析篇六十一之编译器API(javax.tools)详解
java·开发语言
蜡台1 小时前
Kotlin 零基础完整版实战教程|从语法入门到Android工程实战
android·开发语言·kotlin
jimy12 小时前
C++ 的 “移动语义”——Move Semantics
开发语言·c++
码云数智-园园2 小时前
C++ STL 容器怎么选?vector、list、map、unordered_map 优缺点对比
java·开发语言
en.en..2 小时前
竖线 |:管道、按位或、掩码组合
java·开发语言
techdashen2 小时前
Go Map 详解:键值对实际上是如何存储的
开发语言·后端·golang
SomeBottle2 小时前
【小记】图片托管从又拍云迁移到腾讯云 EO + COS(兼容图片处理参数)
python·计算机网络·学习笔记·对象存储·cdn·折腾
程序猿乐锅2 小时前
【计算机组成原理 | 第六章】中央处理器 CPU
java·开发语言