← 返回 计算机网络原理

计算机网络原理

第五章 第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 计算转发表,只是逻辑集中计算的一个例子。

也就是说,传统路由协议是:

分布式路由器自己算\text{分布式路由器自己算}

SDN 是:但它们不一定完全替代关系。

未来可能是:传统协议和 SDN 并存、融合。

举例:SDN 做拥塞控制

以前 TCP 拥塞控制是端系统自己根据丢包、RTT、ACK 判断拥塞。

SDN 里控制器可以从交换机收集全网拥塞状态:

哪条链路队列变长;

哪些端口负载高;

哪些流占带宽大。

然后控制器可以直接下发策略:

限制某些流的速率,或者改变某些流的路径。

所以 SDN 可以做更全局的拥塞管理。

三、ICMP 是什么?

ICMP 全称:

InternetControlMessageProtocolInternetControlMessageProtocol

中文叫:互联网控制报文协议。

它属于网络层控制相关协议。

它不是用来传输普通用户数据的,而是用来传递:网络层的控制信息和错误报告。

1. ICMP 的作用

ICMP 常用于:

错误报告;

网络诊断;

ping;

traceroute;

TTL 超时通知;

目的不可达通知。

比如:

ping 一个主机,背后就用到了 ICMP。

第五章 第5节 配图 1

2. ICMP 在哪里?

ICMP 报文会封装在 IP 数据报中。

所以关系是:

ICMP报文IP数据报ICMP\text{报文}⊂IP\text{数据报}

虽然 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=TTL1TTL=TTL-1

如果 TTL 减到 0,路由器丢弃该分组,并返回 ICMP TTL exceeded 报文。

也就是:

Type=11,Code=0Type=11,Code=0

2. Traceroute 怎么工作?

源主机发送一系列 UDP 探测报文。

第一轮:

TTL=1TTL=1

这个包到第一个路由器时,TTL 变成 0。

第一个路由器丢弃它,并返回 ICMP TTL expired。

源主机就知道:第一跳路由器是谁。

第二轮:

TTL=2TTL=2

包经过第一个路由器后 TTL 变 1,到第二个路由器 TTL 变 0。

第二个路由器返回 ICMP TTL expired。

源主机就知道:第二跳路由器是谁。

一直这样:

TTL=1,2,3,TTL=1,2,3,⋯

就能逐跳发现路径。

3. 为什么每轮发 3 个 probes?

Traceroute 通常每个 TTL 发送 3 个探测包。

这样可以测量:

该跳 RTT;

是否有丢包;

路径是否稳定。

所以看到 traceroute 输出里一般一跳后面有三个时间。

4. Traceroute 怎么知道到终点了?

当 UDP 探测包最终到达目标主机时,目标主机发现:

这个 UDP 端口没有应用程序监听。

于是返回:

ICMPdestinationportunreachableICMPdestinationportunreachable

也就是:

Type=3,Code=3Type=3,Code=3

源主机收到这个报文后就知道:

已经到达目标主机,可以停止了。

五、网络管理是什么?

网络管理就是:

对网络中的硬件、软件和人员进行设置、协调和监控,以便监测、测试、配置、分析、评价和控制网络资源,使网络满足实时性、运行性和服务质量要求。

网络管理就是管设备、管配置、管状态、管故障、管性能。

网络管理的对象

被管理的东西可以是:

路由器;

交换机;

服务器;

防火墙;

无线 AP;

其他网络设备。

这些设备叫:被管设备 managed device。

六、网络管理的基本组成

1. 管理服务器 managing server

也叫管理站、控制器。

它负责:

查询设备状态;

修改设备配置;

接收告警;

统一管理网络。

2. 被管设备 managed device

就是被管理的网络设备。

比如路由器、交换机等。

3. Agent

每个被管设备上运行一个 agent。

agent 负责:

收集本设备状态;

保存设备数据;

响应管理服务器查询;

主动上报告警。

4. 数据 data

设备上的数据包括:

运行状态;

配置参数;

接口统计;

错误计数;

流量信息;

系统信息。

5. 网络管理协议

管理服务器和 agent 之间通信,需要协议。

典型有:

SNMP;

NETCONF。

七、网络管理员管理网络的方式

第五章 第5节 配图 2

1. CLI 命令行

管理员通过命令行直接登录设备。

比如:ssh router

然后输入配置命令。

这种方式直接,但不适合大规模自动化。

2. SNMP / MIB

SNMP 是传统网络管理协议。

管理员通过 SNMP 查询或设置设备的 MIB 信息。

适合:

监控;

查询状态;

获取统计信息;

接收告警。

3. NETCONF / YANG

NETCONF 是更现代的网络配置协议。

YANG 是数据建模语言。

组合起来用于:

自动化配置;

结构化管理;

批量修改设备配置;

配置校验。

八、SNMP 是什么?

SNMP 全称:

SimpleNetworkManagementProtocolSimpleNetworkManagementProtocol

简单网络管理协议。

它用于:管理服务器和被管设备 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 类报文:

Header+variablesHeader+variables

对于 Trap 报文:

Trapheader+TrapinfoTrapheader+Trapinfo

这块一般不会让你手写报文字段,重点是知道:

SNMP 报文通过变量名和值来查询或设置设备状态。

十一、MIB 是什么?

MIB 全称:

ManagementInformationBaseManagementInformationBase

中文叫:管理信息库。

它是设备可被管理的数据集合。

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 表示。

比如:

1.3.6.1.2.1.7.11.3.6.1.2.1.7.1

这个编号就像变量的地址。

管理服务器可以用 SNMP 问:

这个 OID 对应的值是多少?

agent 就返回对应数据。

十二、SMI 是什么?

SMI 全称:

StructureofManagementInformationStructureofManagementInformation

它是:

管理信息的数据定义规则。

也就是说:

MIB 是数据库;

SMI 是描述 MIB 数据格式的语言或规则;

SNMP 是访问 MIB 的协议。

这三个关系要分清:

SNMP=管理通信协议MIB=管理信息库SMI=定义MIB数据结构的规则SNMP=\text{管理通信协议}MIB=\text{管理信息库}SMI=\text{定义}MIB\text{数据结构的规则}

十三、NETCONF 是什么?

NETCONF 是一种网络配置协议。

它的目标是:主动管理和配置网络范围内的设备。

相比 SNMP,NETCONF 更偏向于:

配置管理和自动化。

SNMP 更偏向:

监控和简单设置。

NETCONF 能做什么?

NETCONF 可以在管理服务器和被管设备之间执行:

查询配置;

修改配置;

激活配置;

查询运行状态;

查询统计数据;

订阅设备通知。

十四、NETCONF 的工作方式

NETCONF 采用:

RPCRPC

远程过程调用方式。

也就是说,管理服务器发送一个 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 表示。

所以可以理解为:

YANG定义结构XML表示具体数据NETCONF负责传输和操作YANG\text{定义结构}XML\text{表示具体数据}NETCONF\text{负责传输和操作}

十七、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 链路状态

核心:

全网拓扑+Dijkstra\text{全网拓扑}+Dijkstra

典型协议:

OSPFOSPF

DV 距离向量

核心:

邻居交换距离向量+BellmanFord\text{邻居交换距离向量}+Bellman-Ford

典型协议:

RIPRIP

3. AS 内部和 AS 之间

AS 内部

协议:

RIP;

OSPF。

目标:

一个自治系统内部怎么走。

AS 之间

协议:

BGPBGP

目标:不同自治系统之间怎么通。

BGP 更重视策略,而不是单纯最短路径。

4. SDN

核心:控制平面和数据平面分离。

控制器负责:

收集状态;

计算路径;

下发流表;

统一管理。

交换机负责:

按流表转发。

OpenFlow 是典型南向协议。

5. ICMP

用于网络层控制和错误报告。

常见应用:

ping;

traceroute;

TTL expired;

destination unreachable。

6. 网络管理

主要协议和工具:

CLI;

SNMP/MIB;

NETCONF/YANG。

1. ICMP

ICMP 用于网络层错误报告和控制信息传递。

ping:

EchorequestEchoreplyEchorequest\to Echoreply

traceroute:

TTLexpiredTTLexpired

到达终点:

DestinationportunreachableDestinationportunreachable

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 定义数据模型。

第五章核心关系:

LSDijkstraOSPFDVBellmanFordRIPAS间路由BGPSDN控制/数据平面分离OpenFlow网络诊断ICMP网络管理SNMP/MIB,NETCONF/YANGLS\to Dijkstra\to OSPFDV\to Bellman-Ford\to RIPAS\text{间路由}\to BGPSDN\to \text{控制}/\text{数据平面分离}\to OpenFlow\text{网络诊断}\to ICMP\text{网络管理}\to SNMP/MIB,NETCONF/YANG