# SDN

### SDN

#### SDN 定义

Software-defined networking (SDN) 技术是一种网络管理方法，它支持动态的、编程高效的网络配置，以改进网络性能和监控，使其相比传统网络管理，更像云计算。

SDN 旨在解决传统网络去中心化的复杂的静态体系结构。当前网络需要更多的灵活性，排查故障需要变得更加容易。SDN 试图通过将网络数据包的转发过程（转发平面 forwarding plane）与路由过程（控制平面 control plane）分离，将网络智能集中在一个网络组件中。

控制平面由一个或多个控制器组成，这些控制器被视为 SDN 网络的大脑，所有的网络智能都包含其中。

然而，网络智能集中在一个组件在安全性、可扩展性和弹性方面也有其自身的缺点。软件的多层次和处理过程会增加性能开销，会使得网络更加复杂。封包、解包需要大量的算力。物理网络也无法根据虚拟网络中的改变自动调整。

### SDN 分析与总结

理想的网络架构应该具备计算机的灵活性，可适用于任何网络硬件，换句话说，应该有一种通用网络操作系统，在此平台下，硬件只负责收发网络数据包，由软件负责思考。

当今的硬件网络的改造难度已经到了荒谬的地步。一旦要对网络做出调整，就得就硬件进行物理性地重新安排。

网络虚拟化，用软件实现网络调整，底层的硬件引擎无需改动。其实就是把交换机和路由器里面的智能部分取出移到软件上，这样交换机就不需要知道太多东西。

网络设备制造商不允许对硬件进行重新编程，代码都是直接写进交换机或着路由器的。当然，他们这么做也是由原因的，用户买一个东西回来当然希望插上电就能用，另外网络公司也不希望因为用户修改而导致网络瘫痪。但是这种限制会给网络的扩容改造带来大问题。而对于业务规模不断扩大的大型互联网公司来说，这样的情况是常有的事。

Google 从2005年开始甚至开始自己造网络硬件，部分原因就是由于它需要对硬件能够有更多的控制。服务器之间需要高带宽的连接，同时网络还需要能够伸缩自如。传统的网络设备供应商做不到这一点，成本过高，系统太封闭，以 Google 的这种网络规模是其无法管理的。

SDN 追求的目标是更好地控制网络，即把网络控制模块化，对网络控制平面进行适当的软件抽象，使之可演进。

SDN 的第一个突破就是 OpenFlow，这是一种远程控制交换机和路由器的标准方式。可以理解为一种通用语言或指令集，有了它就可以编写网络的控制程序而无需为每一台路由器重写代码。OpenFlow 的大旗一扯，众人即集结在其鞍前马后，其中不乏业界的大佬，如 Google、HP、NEC、爱立信等，众多媒体都把它称为是将网络带出野蛮的中世纪的救主。

不过有一点比较麻烦，如果硬件供应商不把 OpenFlow 加入自己的设备的协议支持清单，那么 OpenFlow 就无法在交换机和路由器上使用，就只能叫好不叫座。从结构和标准的角度来看，OpenFlow 无疑是重要的，但是从架构的角度而言却并非如此，因为更重要的组件关心的是协调交换机的活动，以便行为能够连贯协调。

OpenFlow 的终极目标不是更好地管理网络硬件，而是创建一种无需关心硬件即可组网的软件架构，也就是说实现组建虚拟网络的能力。

虚拟层可以屏蔽底层硬件的复杂性。将网络的控制从网络硬件中脱离出来，交给虚拟的网络层处理。这个虚拟网络层加载在物理网络之上，在一个虚拟的空间重建整个网络。有了网络虚拟化，物理网络被泛化为网络能力池，正如服务器虚拟化把服务器设备转化为计算能力池。网络虚拟化使得 IP 连接大为简化。

#### 参考

1. [网络虚拟化—互联网的下一波革命](https://www.36kr.com/p/1640063074305)
2. [Software-defined networking - Wikipedia](https://en.wikipedia.org/wiki/Software-defined_networking)
3. [浅谈SDN](https://zhuanlan.zhihu.com/p/144676870)
