Day 1 学习笔记

如果你学过计算机网络,那你一定听过 SDN(Software-Defined Networking,软件定义网络) 这个词。SDN 到底是什么?它解决了什么问题?它和传统网络有什么不同?

这是一个 SDN 新手入门笔记,我将从初学者的角度,尽量用通俗的方式把这些问题讲清楚。


一、为什么需要 SDN

要理解 SDN,首先要理解传统网络遇到了什么问题。

1.1 传统网络:控制与转发紧耦合

在传统网络中,每台网络设备(路由器、交换机)都是一个独立的黑盒,同时负责两件事:

  • 控制平面:运行路由协议(如 OSPF、BGP),计算转发路径,维护路由表
  • 数据平面:根据路由表,实际转发数据包

这两个平面紧密耦合在一台设备内部。每台设备各自为政,各自运行路由协议,各自做转发决策。

1.2 这种设计带来了什么问题

问题 具体表现
配置复杂 每台设备要逐台手动配置 CLI 命令,无法批量管理
扩展困难 新增功能需要更换硬件,无法快速迭代
缺乏全局视角 每台设备只看到局部拓扑,无法做全局最优路由
厂商锁定 不同厂商的设备命令不通用,迁移成本极高
响应缓慢 网络策略变更需要逐个设备修改,耗时数周甚至数月

一句话总结:传统网络就像一个没有指挥的乐队,每个乐手各吹各的调。

1.3 业务需求在倒逼变革

随着云计算、大数据、移动互联网的爆发,网络面临前所未有的压力:

  • 数据中心需要动态调整流量路径
  • 租户需要按需获取网络资源
  • 安全策略需要快速部署和更新

传统网络的僵化架构已经无法满足这些需求。正是在这样的背景下,SDN 应运而生


二、SDN 的核心思想

SDN 的核心思想就一句话:

把网络设备的控制权抽出来,集中到一个地方统一管理,数据设备只负责埋头转发。

打个比方:

  • 传统网络 = 每个路口都有一个独立的交警,各自指挥交通
  • SDN = 一个中央交通指挥中心 + 遍布路口的信号灯

中央指挥中心掌握全局路况,可以动态调整信号灯,实现全局最优的流量调度。


三、SDN 的三层架构

SDN 采用了清晰的三层架构,这是理解 SDN 最关键的知识点:

┌─────────────────────────────────────────────────┐
│              应用层 (Application Layer)          │
│  ┌─────────┐ ┌─────────┐ ┌─────────┐           │
│  │ 流量工程 │ │ 安全防护 │ │ 负载均衡 │  ...     │
│  └────┬────┘ └────┬────┘ └────┬────┘           │
│       └───────────┬┼───────────┘                 │
│                    ││ 北向接口 (Northbound API)  │
├────────────────────┼────────────────────────────┤
│              控制层 (Control Layer)              │
│  ┌──────────────────────────────────────┐      │
│  │        SDN 控制器 (Controller)       │      │
│  │   (如 OpenDaylight, ONOS, Ryu...)   │      │
│  └────────────────┬─────────────────────┘      │
│                   │ 南向接口 (Southbound API)   │
├───────────────────┼────────────────────────────┤
│              数据层 (Data Layer)                │
│  ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐         │
│  │ 交换机│ │ 路由器│ │ 防火墙│ │ 中间盒│  ...   │
│  └──────┘ └──────┘ └──────┘ └──────┘         │
└─────────────────────────────────────────────────┘

3.1 数据层

也叫基础设施层,由各种网络设备组成。这些设备不再需要运行复杂的路由协议,只需根据控制器下发的**流表(Flow Table)**来转发数据包。可以说是"无脑转发",但效率极高。

3.2 控制层

这是 SDN 的大脑。SDN 控制器是整个网络的核心,它:

  • 拥有网络的全局视图(全网拓扑、链路状态、流量情况)
  • 负责计算转发路径、下发流表到数据层设备
  • 通过南向接口与数据层通信
  • 通过北向接口向上层应用开放能力

常见的 SDN 控制器有:OpenDaylight、ONOS、Ryu、Floodlight 等。

3.3 应用层

各种网络应用运行在这一层,通过北向接口调用控制器的能力,实现:

  • 流量工程:动态调整流量路径,避免拥塞
  • 网络安全:快速部署访问控制策略,检测异常流量
  • 负载均衡:根据实时流量分发请求
  • 网络虚拟化:为多租户创建隔离的虚拟网络

应用层让网络变得像软件一样可编程——想加什么功能,写个应用就行了。

3.4 两个关键接口

接口 方向 作用 代表协议
南向接口 控制层 → 数据层 控制器向交换机下发流表 OpenFlow(最主流)
北向接口 应用层 → 控制层 应用调用控制器能力 REST API(常见)
东西向接口 控制器之间 多控制器协同 自定义协议

四、SDN 的三个核心特征

控制与转发分离

这是 SDN 最根本的特征。控制逻辑从设备中抽离出来,集中到控制器中执行,设备只做简单的转发。

集中控制

控制器拥有全网视角,可以做出全局最优的决策。相比于传统网络每台设备各自为政,集中控制可以:

  • 避免路由环路
  • 实现全局负载均衡
  • 快速响应网络变化

可编程性

网络行为可以通过软件编程来定义和修改。想调整路由策略?写一行代码就行,不用再逐台登录设备敲命令。


五、SDN 的发展脉络

时代 特点
传统网络 控制与转发紧耦合,每台设备独立决策,手动配置
SDN (OpenFlow) 控制与转发分离,集中控制,OpenFlow 南向协议
P4 可编程数据面 不仅控制面可编程,数据面也可编程,协议无关

SDN 是从传统网络到可编程网络的关键一步。而下一代技术 P4 则更进一步,让数据平面本身也变得可编程(这将是第二周学习的内容)。


六、用三句话概括 SDN

  1. 传统网络:每个路口各有一个交警各自指挥,互不通气,容易堵车。
  2. SDN:撤掉所有路口的交警,换成一个中央交通指挥中心 + 信号灯。指挥中心看到全局路况,统一调度。
  3. 好处:堵车时能快速调整信号灯配时,想改交通规则不用换信号灯硬件,写个软件就行。

七、今日学习总结

项目 内容
阅读 《深度解析SDN》第1~2章
精读综述 A Survey of SDN: Past, Present, and Future(Abstract + Section 1-2)
快读综述 A Survey on Software-Defined Networking(Abstract + Conclusion)
核心收获 理解 SDN 诞生的背景、三层架构、控制与转发分离的思想
待深入 明天继续学习 SDN 各层职责的细节和南向/北向接口

参考资料

  1. 《深度解析SDN:利益、战略、技术、实践》—— 第1~2章
  2. Kreutz, D. et al. “A Survey of Software-Defined Networking: Past, Present, and Future of Programmable Networks.” IEEE Communications Surveys & Tutorials, 2015.
  3. Akyildiz, I. F. et al. “A Survey on Software-Defined Networking.” IEEE Network, 2014.
  4. SDNLAB SDN 指南

本文是「SDN 入门学习计划」Day 1 的学习笔记。

学习路线:Day 1 SDN 是什么 → Day 2 SDN 架构深入 → Day 3 OpenFlow 协议详解 → Day 4 Mininet 实验 → …