计算机网络原理
第五章 第5节
一、SDN 的挑战和未来
前面讲 SDN 的优点是:
控制平面和数据平面分离,控制器逻辑集中,网络可编程。
但是 SDN 真正部署时也有挑战。
1. 控制平面要足够可靠
SDN 控制器像网络的大脑。
如果控制器出问题,网络可能大面积受影响。
所以实际 SDN 控制器不能只是单台服务器,而通常需要:
分布式控制器集群。
要求:
可靠;
可扩展;
安全;
能处理故障;
性能足够高。
也就是虽然逻辑上是“集中控制”,但物理上往往是:分布式部署。
2. 需要满足特殊网络任务
有些网络对性能要求特别高,比如:
实时性;
超高可靠性;
超高安全性。
比如工业网络、数据中心网络、5G 核心网等。
SDN 要支持这些场景,就需要控制器、交换机、协议都更加稳定。
3. 互联网范围部署比较难
SDN 很适合在一个数据中心、企业网、校园网内部部署。
但是整个互联网跨越很多 AS,每个 AS 属于不同组织。
所以全互联网范围内直接统一 SDN 控制比较困难。
原因还是:管理自治性。
不同 AS 不一定愿意交给同一个控制器管理。
4. SDN 在 5G 中很关键
5G 网络里有大量虚拟化、切片、边缘计算、动态资源调度。
这些都需要灵活控制网络。
所以 SDN 在 5G 中比较重要。
可以理解成:
5G 需要网络像软件一样灵活调度,SDN 正好提供这种能力。
二、SDN 和传统协议的未来关系
SDN 计算转发表,只是逻辑集中计算的一个例子。
也就是说,传统路由协议是:
SDN 是:但它们不一定完全替代关系。
未来可能是:传统协议和 SDN 并存、融合。
举例:SDN 做拥塞控制
以前 TCP 拥塞控制是端系统自己根据丢包、RTT、ACK 判断拥塞。
SDN 里控制器可以从交换机收集全网拥塞状态:
哪条链路队列变长;
哪些端口负载高;
哪些流占带宽大。
然后控制器可以直接下发策略:
限制某些流的速率,或者改变某些流的路径。
所以 SDN 可以做更全局的拥塞管理。
三、ICMP 是什么?
ICMP 全称:
中文叫:互联网控制报文协议。
它属于网络层控制相关协议。
它不是用来传输普通用户数据的,而是用来传递:网络层的控制信息和错误报告。
1. ICMP 的作用
ICMP 常用于:
错误报告;
网络诊断;
ping;
traceroute;
TTL 超时通知;
目的不可达通知。
比如:
ping 一个主机,背后就用到了 ICMP。

2. ICMP 在哪里?
ICMP 报文会封装在 IP 数据报中。
所以关系是:
虽然 ICMP 是网络层控制协议,但它的报文需要借助 IP 传输。
3. 常见 ICMP 类型
Type | Code | 含义 0 | 0 | echo reply,ping 回复 8 | 0 | echo request,ping 请求 3 | 0 | 目的网络不可达 3 | 1 | 目的主机不可达 3 | 2 | 目的协议不可达 3 | 3 | 目的端口不可达 11 | 0 | TTL expired,TTL 超时 12 | 0 | IP 首部错误
常见的是:
ping:Type 8 请求,Type 0 回复;
traceroute:利用 TTL expired;
UDP 到达目标端口不可达:Type 3 Code 3。
四、Traceroute 和 ICMP
Traceroute 是用来测量:从源主机到目标主机,中间经过哪些路由器。
它的核心技巧是:故意设置不同的 TTL。
1. TTL 回顾
IP 数据报里有 TTL 字段。
每经过一个路由器:
如果 TTL 减到 0,路由器丢弃该分组,并返回 ICMP TTL exceeded 报文。
也就是:
2. Traceroute 怎么工作?
源主机发送一系列 UDP 探测报文。
第一轮:
这个包到第一个路由器时,TTL 变成 0。
第一个路由器丢弃它,并返回 ICMP TTL expired。
源主机就知道:第一跳路由器是谁。
第二轮:
包经过第一个路由器后 TTL 变 1,到第二个路由器 TTL 变 0。
第二个路由器返回 ICMP TTL expired。
源主机就知道:第二跳路由器是谁。
一直这样:
就能逐跳发现路径。
3. 为什么每轮发 3 个 probes?
Traceroute 通常每个 TTL 发送 3 个探测包。
这样可以测量:
该跳 RTT;
是否有丢包;
路径是否稳定。
所以看到 traceroute 输出里一般一跳后面有三个时间。
4. Traceroute 怎么知道到终点了?
当 UDP 探测包最终到达目标主机时,目标主机发现:
这个 UDP 端口没有应用程序监听。
于是返回:
也就是:
源主机收到这个报文后就知道:
已经到达目标主机,可以停止了。
五、网络管理是什么?
网络管理就是:
对网络中的硬件、软件和人员进行设置、协调和监控,以便监测、测试、配置、分析、评价和控制网络资源,使网络满足实时性、运行性和服务质量要求。
网络管理就是管设备、管配置、管状态、管故障、管性能。
网络管理的对象
被管理的东西可以是:
路由器;
交换机;
服务器;
防火墙;
无线 AP;
其他网络设备。
这些设备叫:被管设备 managed device。
六、网络管理的基本组成
1. 管理服务器 managing server
也叫管理站、控制器。
它负责:
查询设备状态;
修改设备配置;
接收告警;
统一管理网络。
2. 被管设备 managed device
就是被管理的网络设备。
比如路由器、交换机等。
3. Agent
每个被管设备上运行一个 agent。
agent 负责:
收集本设备状态;
保存设备数据;
响应管理服务器查询;
主动上报告警。
4. 数据 data
设备上的数据包括:
运行状态;
配置参数;
接口统计;
错误计数;
流量信息;
系统信息。
5. 网络管理协议
管理服务器和 agent 之间通信,需要协议。
典型有:
SNMP;
NETCONF。
七、网络管理员管理网络的方式

1. CLI 命令行
管理员通过命令行直接登录设备。
比如:ssh router
然后输入配置命令。
这种方式直接,但不适合大规模自动化。
2. SNMP / MIB
SNMP 是传统网络管理协议。
管理员通过 SNMP 查询或设置设备的 MIB 信息。
适合:
监控;
查询状态;
获取统计信息;
接收告警。
3. NETCONF / YANG
NETCONF 是更现代的网络配置协议。
YANG 是数据建模语言。
组合起来用于:
自动化配置;
结构化管理;
批量修改设备配置;
配置校验。
八、SNMP 是什么?
SNMP 全称:
简单网络管理协议。
它用于:管理服务器和被管设备 agent 之间交换管理信息。
SNMP 的两种基本模式
1. Request / Response 模式
管理服务器主动问:
你这个接口收到多少包? 你 CPU 使用率是多少? 你某个端口状态是什么?
agent 回复数据。
2. Trap 模式
设备主动上报异常。
比如:
接口 down;
CPU 过高;
链路故障;
设备重启。
这种报文叫 trap。
区别是:
request/response 是管理服务器主动查询;trap 是设备主动告警。
九、SNMP 报文类型
报文类型 | 作用 GetRequest | 管理服务器向 agent 请求某个变量 GetNextRequest | 请求 MIB 中下一个变量 GetBulkRequest | 一次请求一批数据 SetRequest | 设置 MIB 中某个变量值 Response | agent 回复请求结果 Trap | agent 主动通知异常事件
最常见理解
Get:查;
Set:改;
Response:回复;
Trap:告警。
十、SNMP 报文格式
SNMP PDU 里一般有:
PDU type;
Request ID;
Error Status;
Error Index;
变量名 Name;
变量值 Value。
对于 Get/Set 类报文:
对于 Trap 报文:
这块一般不会让你手写报文字段,重点是知道:
SNMP 报文通过变量名和值来查询或设置设备状态。
十一、MIB 是什么?
MIB 全称:
中文叫:管理信息库。
它是设备可被管理的数据集合。
MIB 里有什么?
比如一个路由器的 MIB 里可以有:
接口收到多少包;
接口发出多少包;
UDP 收到多少数据报;
UDP 错误数;
路由表信息;
系统运行时间。
Object ID | Name | Type | 含义 1.3.6.1.2.1.7.1 | UDPInDatagrams | 32-bit counter | 收到的 UDP 数据报数 1.3.6.1.2.1.7.2 | UDPNoPorts | 32-bit counter | 无应用监听端口的数据报数 1.3.6.1.2.1.7.3 | UDPInErrors | 32-bit counter | UDP 错误数 1.3.6.1.2.1.7.4 | UDPOutDatagrams | 32-bit counter | 发送的 UDP 数据报数
OID 是什么?
MIB 变量用 Object ID 表示。
比如:
这个编号就像变量的地址。
管理服务器可以用 SNMP 问:
这个 OID 对应的值是多少?
agent 就返回对应数据。
十二、SMI 是什么?
SMI 全称:
它是:
管理信息的数据定义规则。
也就是说:
MIB 是数据库;
SMI 是描述 MIB 数据格式的语言或规则;
SNMP 是访问 MIB 的协议。
这三个关系要分清:
十三、NETCONF 是什么?
NETCONF 是一种网络配置协议。
它的目标是:主动管理和配置网络范围内的设备。
相比 SNMP,NETCONF 更偏向于:
配置管理和自动化。
SNMP 更偏向:
监控和简单设置。
NETCONF 能做什么?
NETCONF 可以在管理服务器和被管设备之间执行:
查询配置;
修改配置;
激活配置;
查询运行状态;
查询统计数据;
订阅设备通知。
十四、NETCONF 的工作方式
NETCONF 采用:
远程过程调用方式。
也就是说,管理服务器发送一个 RPC 请求,设备返回 RPC reply。
常见流程:
建立会话;
交换 hello,说明能力;
管理端发送 rpc;
设备返回 rpc-reply;
可以发送 notification;
最后 close-session 关闭会话。
NETCONF 报文格式
NETCONF 报文通常使用 XML 编码。
例如配置接口 MTU:
<edit-config> <target> <running/> </target> <config> <interfaces> <interface> <name>Ethernet0/0</name> <mtu>1500</mtu> </interface> </interfaces> </config> </edit-config>
这表示:
修改运行配置,把 Ethernet0/0 的 MTU 设置成 1500。
十五、常见 NETCONF 操作
操作 | 含义 get-config | 获取配置数据 get | 获取配置和运行状态数据 edit-config | 修改配置 lock | 锁定配置数据存储 unlock | 解锁配置数据存储 create-subscription | 创建通知订阅 notification | 设备发送事件通知
get 和 get-config 区别
get-config
只查配置。
比如:当前接口配置是什么?
get
可以查:
配置;
运行状态;
统计数据。
比如:
当前接口实际状态是否 up?收到多少包?
edit-config
用于修改配置。
比如:
改接口 IP;
改 MTU;
开关接口;
修改路由策略。
lock / unlock
用于防止多个管理者同时修改配置。
比如管理员 A 正在修改设备配置,就可以先 lock,避免管理员 B 同时改导致冲突。
十六、YANG 是什么?
YANG 是一种数据建模语言。
它用于:
描述 NETCONF 管理数据的结构、语法和语义。
可以把 YANG 理解成:
给网络配置数据写“模板”和“规则”。
YANG 的作用
YANG 可以定义:
配置项有哪些;
每个配置项是什么类型;
层次结构是什么;
哪些字段是必须的;
取值范围是什么;
约束条件是什么。
比如定义接口配置:
interface;
name;
mtu;
ip address;
enabled。
YANG 和 XML 的关系
YANG 定义数据模型。
NETCONF RPC 中传输的数据常用 XML 表示。
所以可以理解为:
十七、SNMP、NETCONF、YANG 对比
项目 | SNMP | NETCONF | YANG 本质 | 管理协议 | 配置管理协议 | 数据建模语言 主要用途 | 监控、查询、告警 | 自动化配置、查询状态 | 定义配置/状态数据结构 数据对象 | MIB | 配置数据、状态数据 | 数据模型 通信方式 | Get/Set/Trap | RPC / rpc-reply | 不通信 数据表示 | MIB 变量/OID | XML 等 | 类似模式定义 典型场景 | 查接口流量、设备告警 | 改接口配置、批量配置设备 | 规范接口配置模型
一句话:
SNMP 偏监控,NETCONF 偏配置,YANG 负责定义配置数据长什么样。
十八、ICMP、SNMP、NETCONF 的位置区别
这几个容易混,区分一下。
协议 | 作用 | 典型用途 ICMP | 网络层控制信息和错误报告 | ping、traceroute、目的不可达、TTL 超时 SNMP | 网络管理协议 | 查询设备状态、接收告警 NETCONF | 网络配置协议 | 自动化配置设备 YANG | 数据建模语言 | 定义 NETCONF 数据结构
十九、第五章总结
第 5 章讲的是:网络层控制平面。
它回答的问题是:
转发表怎么来?路由怎么计算?网络怎么管理?
整体分成几大块。
1. 控制平面方法
两种方式:传统方式
每台路由器自己运行控制协议。
比如:
RIP;
OSPF;
BGP。
SDN 方式
控制器逻辑集中控制。
比如:
OpenFlow;
ODL;
ONOS。
2. 路由算法
LS 链路状态
核心:
典型协议:
DV 距离向量
核心:
典型协议:
3. AS 内部和 AS 之间
AS 内部
协议:
RIP;
OSPF。
目标:
一个自治系统内部怎么走。
AS 之间
协议:
目标:不同自治系统之间怎么通。
BGP 更重视策略,而不是单纯最短路径。
4. SDN
核心:控制平面和数据平面分离。
控制器负责:
收集状态;
计算路径;
下发流表;
统一管理。
交换机负责:
按流表转发。
OpenFlow 是典型南向协议。
5. ICMP
用于网络层控制和错误报告。
常见应用:
ping;
traceroute;
TTL expired;
destination unreachable。
6. 网络管理
主要协议和工具:
CLI;
SNMP/MIB;
NETCONF/YANG。
1. ICMP
ICMP 用于网络层错误报告和控制信息传递。
ping:
traceroute:
到达终点:
2. Traceroute 原理
依次发送 TTL 为 1、2、3……的探测报文。
第 $n$ 个路由器让 TTL 减到 0 后返回 ICMP TTL expired。
源主机记录返回者地址和 RTT。
最终目标主机返回 ICMP port unreachable,探测结束。
3. SNMP
SNMP 用于网络管理。
两种模式:
request/response;
trap。
常见报文:
GetRequest;
SetRequest;
Response;
Trap。
4. MIB
MIB 是管理信息库,保存设备可被管理的状态和配置变量。
变量通过 OID 标识。
5. NETCONF
NETCONF 用于主动配置和管理网络设备。
采用 RPC 方式,常用 XML 编码。
常见操作:
get-config;
get;
edit-config;
lock;
unlock;
notification。
6. YANG
YANG 是数据建模语言,用于定义 NETCONF 管理数据结构和约束。
SDN 让控制平面逻辑集中,但实际需要可靠、可扩展、安全的分布式控制器。ICMP 用来传递网络层错误和控制信息,ping 和 traceroute 都依赖 ICMP。网络管理则负责监控、配置和控制网络设备,传统方式有 SNMP/MIB,现代自动化配置常用 NETCONF/YANG。SNMP 偏监控,NETCONF 偏配置,YANG 定义数据模型。
