📖 软件定义网络 SDN
🎯 课程摘要:SDN(软件定义网络)由斯坦福大学 Nick McKeown 教授于 2009 年提出,其核心思想是将网络的控制层面与数据层面分离,用软件集中控制数据层面的设备。本课介绍 SDN 的基本概念、OpenFlow 协议、流表与广义转发,以及 SDN 体系结构的四个关键特征。
📝 详细笔记
1. SDN 简介
- 起源:SDN(软件定义网络)的概念最早由斯坦福大学的 Nick McKeown 教授于 2009 年提出,最初只是学术界讨论的新型网络体系结构。
- 发展:近些年来 SDN 发展快速,被不少企业相继采用。最成功的案例是谷歌于 2010~2012 年间建立的数据中心网络 B4。
- 地位:SDN 是当前网络领域最热门和最具发展前途的技术之一,也是 408 考研计算机网络部分 2022 年新增知识点。
2. 传统路由器的两个层面
路由器的网络层可抽象划分为两个层面:
| 层面 | 功能 | 实现方式 | 速度 |
|---|---|---|---|
| 控制层面 | 路由选择:路由器间交互路由信息,利用路由算法得出路由表,再由路由表得出转发表 | 软件 | 秒数量级 |
| 数据层面(转发层面) | 转发服务:基于自己生成的转发表转发分组 | 硬件 | 纳秒数量级 |
- 传统方式:每个路由器无法独自创建路由表,必须和相邻路由器周期性交换路由信息后才能创建路由表。
3. SDN 的核心思想
- 在 SDN 体系结构中,路由器中的路由软件都不存在了,路由器之间不再相互交换路由信息。
- 控制层面:有一个在逻辑上集中的远程控制器(物理上可由不同地点的多个服务器组成),掌握各主机和整个网络的状态,为每一个分组计算最佳路由,并为每一个路由器生成正确的转发表。
- 数据层面:路由器工作变得非常单纯,只需对收到的分组进行查表转发。
- 核心思想:把网络的控制层面和数据层面分离,让控制层面利用软件来控制数据层面中的许多设备。
4. OpenFlow 协议
- 地位:OpenFlow 协议是一个得到高度认可的标准,讨论 SDN 时往往与 OpenFlow 一起讨论。
- 作用:OpenFlow 协议可被看成 SDN 体系结构中控制层面与数据层面之间的通信接口,使控制器可以对数据层面中的物理设备进行直接访问和控制。
- 标准化组织:技术规范由非盈利性产业联盟开放网络基金会 ONF 负责制定,致力于 SDN 的发展和标准化,但并未规定必须使用 OpenFlow(不过大部分 SDN 产品都采用了它)。
- 版本演进:从 2009 年底 1.0 版开始,历经 12 次更新,到 2015 年 3 月发布 1.5.1 版,目前较为成熟的是 1.3 版本。
5. 广义转发:匹配 + 动作
- 传统转发(两个步骤):
- 匹配:查找转发表中的网络前缀,进行最长前缀匹配。
- 动作:把分组从匹配结果指明的接口转发出去。
- SDN 广义转发(扩充后):
- 匹配:能够对网络体系结构中各层首部中的字段进行匹配(数据链路层、网络层、运输层)。
- 动作:不仅可以转发分组,还可以负载均衡、重写 IP 首部、人为阻挡或丢弃分组。
- 设备名称变化:完成广义转发的设备不局限在网络层工作,因此不再称为路由器,而称为 OpenFlow 交换机(或分组交换机、交换机)。
- 流表取代转发表:在 SDN 中取代传统路由器转发表的是流表。一个流就是通过网络的一种分组序列,其中每个分组都共享分组首部某些字段的值(例如具有相同源 IP 和目的 IP 的一连串分组)。
- 流表管理:OpenFlow 交换机中的流表由 SDN 远程控制器通过安全信道使用 OpenFlow 协议来管理。尽管网络设备可由不同厂商生产,但从 SDN 控制器看到的则是统一的逻辑交换功能。
6. OpenFlow 1.0 流表结构
每个 OpenFlow 交换机必须有一个或多个流表。OpenFlow 1.0 版本中,每个流表项包含三个字段:
| 字段 | 内容 | 说明 |
|---|---|---|
| 首部字段值(匹配字段) | 一组用来使入分组的对应首部与之匹配的字段,共 11 个项目,涉及数据链路层、网际层、运输层三个层次的首部 | 匹配不上的分组被丢弃或发送到 SDN 控制器处理 |
| 计数器字段 | 一组计数器 | 记录已匹配的分组数量、该流表项上次更新到现在经历的时间 |
| 动作字段 | 一组动作 | 转发到指明端口、丢弃分组、复制后从多端口转发、重写首部字段(数据链路层/网际层/运输层) |
- ⚠️ 重点/考点:OpenFlow 的匹配与计算机网络体系结构分层处理的原则完全不同——在 OpenFlow 交换机中既可以处理数据链路层的帧,也可以处理网际层的 IP 数据报,还可以处理运输层的 TCP 或 UDP 报文。
7. 基于流表的举例
网络中有 H1~H6 共 6 台主机,S1~S3 共 3 台 OpenFlow 交换机(每台 4 个端口),以及一台 SDN 远程控制器。
- 简单转发:H1 或 H2 发往 H3、H4 的分组,路径应为 S1→S3→S2。控制器给 S1 设置流表项:源 IP = 10.0.1.,目的 IP = 10.0.2.,动作 = 转发端口 3。
- 负载均衡:为均衡链路 S2-S3 与 S1-S3 的通信量,规定 H3 发往 H5、H6 走 S2→S3,H3 发往其他走 S2→S1→S3。基于目的 IP 的传统转发无法实现,但在 S2 流表项中设置合适匹配项即可。
- 防火墙:在 S2 中设置防火墙,仅接收来自与 S1 相连的主机所发送的分组,而不管这些分组从 S2 哪个端口进来。
上述例子省略了计数器字段,但已能体现 SDN 广义转发的多样性和灵活性。
8. SDN 体系结构的四个关键特征
| 特征 | 内容 |
|---|---|
| ① 基于流的转发 | 分组转发可基于数据链路层、网络层、运输层 PDU 首部字段的值进行(传统路由器仅根据目的 IP 转发)。各交换机的流表项都由 SDN 控制器计算、管理和安装。 |
| ② 数据层面与控制层面分离 | 传统路由器中二者在同一设备;SDN 中二者分离,数据层面是相对简单快速的分组交换机,控制层面是若干服务器和软件。 |
| ③ 控制层面由软件实现 | 控制软件可处于不同机器上,甚至远离数据层面设备。包含两个构件:SDN 控制器(网络操作系统,维护网络状态信息)和控制应用程序。 |
| ④ 可编程的网络 | SDN 控制器能确定端到端路径、进行接入控制(阻挡)、执行负载均衡,使整个 SDN 网络成为可编程的网络。 |
9. SDN 控制器的接口与层次
- 南向 API:SDN 控制器与其下方数据层面中受控设备的通信接口(即 OpenFlow 等协议)。
- 北向 API:SDN 控制器与控制层面应用程序的通信接口。
- SDN 控制器三个层次:
| 层次 | 任务 |
|---|---|
| 通信层(底层) | 通过南向 API 完成 SDN 控制器与数据层面受控网络设备之间的通信 |
| 网络范围的状态管理层(中间层) | 让控制器掌握全网的主机、链路、分组交换机等信息,对网络状态和流表进行读写操作 |
| 应用层(上层) | 运行各种控制应用程序,通过北向 API 获取网络状态并对设备进行控制 |
- ⚠️ 重点/考点:SDN 控制器是 SDN 体系结构中最复杂的部分。
- 开源控制器:最有代表性的是 OpenDaylight 和 ONOS。
💡 核心总结
- SDN 核心思想:控制层面与数据层面分离,软件集中控制。
- OpenFlow 是控制层面与数据层面的通信接口(南向接口),成熟版本为 1.3。
- SDN 广义转发 = 匹配 + 动作,匹配可跨多层首部,动作多样(转发/负载均衡/重写/丢弃)。
- 流表三字段:首部字段值(匹配)、计数器、动作。
- 四大特征:基于流的转发、数据/控制层面分离、控制层面软件实现、可编程网络。
❓ 课后思考 / 经典考题
- 简述 SDN 的核心思想,并说明与传统路由器体系结构的区别。
- OpenFlow 协议在 SDN 体系结构中起什么作用?它属于哪种接口?
- SDN 的"广义转发"与传统转发的"匹配 + 动作"有何不同?
- OpenFlow 1.0 流表项包含哪三个字段?各有什么作用?
- 简述 SDN 体系结构的四个关键特征。
- SDN 控制器可分为哪几个层次?南向 API 和北向 API 分别连接什么?