什么是数据平面和控制平面
SDN
有两个基本特征:
Control Plane: 控制平面在逻辑上控制转发行为。比如路由协议, 网络中间设备(middlebox: NAT, 负载均衡,firewall, IDS, etc.)
Data Plane: 数据平面负责根据控制平面的逻辑转发流量。比如IP层转发,2层交换
1. 网络可以独立于硬件发展
传统路由交换设备的控制器、软硬件是捆绑销售,购买路由器的同时也购买了捆绑的软件包。这种做法有个明显的问题:功能更新缓慢,至少以年为周期。SDN可以快速的更新网络服务。
所谓网络服务,是指网络设备提供的功能特性。传统路由交换设备可以理解成拥有多端口的计算机,它也需要一个操作系统。以Cisco设备为例,运行着Cisco IOS (Cisco Internetwork Operating System)
。
Cisco IOS
提供多种特性,版本12.3之后各种特性的组合被打包成了特性集。从C2900到C6500,不同特性集会被提供给不同型号的产品,以交换机为例,默认都会加载Layer 2 Base Package
, 多层交换机会加载IP Base Package
, 核心层设备会加载Advanced Enterprise Services Package
。
路由设备上默认加载IP Base Package
, 此外还可加载加密、认证、防火墙、QoS等一系列网络服务。Cisco设备拥有产品号和IOS型号,不同型号代表着不同的软件包版本,比如同为IP Base Package
,7200、7300系列路由器拥有SSH支持,但是800到3800系列就没有。7200的Advanced IP Services
还服从政府对路由数据进行侦听的要求,因此7200的软件包比3800会贵上很多。
传统路由器与SDN的关系类似于车载导航仪和手机导航,二者在产品迭代和功能更新上至少有10倍的速度差距。软件层独立于硬件发展,这意味着购买路由器、交换机、middlebox等不再受功能集的约束,不再需要采购特定型号的设备。
谷歌的网络设备提供商主要为:Cisco, Juniper, Arista 三家 (GCP官方博客证实)。
Google自B4开始使用自研设备,使用廉价设备负责转发,用中心控制器负责路由,以此代替高价的特制设备, 摆脱了厂商的控制。
2.使用高层软件程序控制网络行为
利用更高阶的程序整个网络控制行为,更容易推断网络的行为,而且更容易调试和检查。在大型网络中更容易管理。
Internet由多个AS(自治系统)组成,每个AS内路由器通过Intra-domain routing protocol(域内路由协议)
彼此交换路由信息(距离向量协议:RIP,EIGRP;链路状态协议:OSPF、IS-IS
)。自治系统边界路由器通过Interdomain routing protocol(域间路由协议)
交换路由信息(BGP
)
目前的域间路由是靠配置加策略来实现的。路由选择要按照选路原则一一匹配,操作员需要用有限的匹配条件来控制进出边界的流量,而且BGP还很难和别的协议合作。BGP选路原则应该是所有CCIE内心最大的恐惧,Cisco提供了13条不同优先级的选路原则。而Juniper的算法提供了15条。现在广泛使用的BGP v4还是2008年IEEE上发表的。相比之下,SDN就可以直接用route controller(路由控制器)
更新状态。
案例1: 边界机房维护
假设运营商想维护边界出口的机房1,在现有配置下CCIE可能需要手动调整所有邻接的OSPF权重,等待OSPF收敛(靠LSA/LSU泛洪,通告到域内所有路由器),然后在维护完成后再改回原有的权重。
SDN的做法会非常简单直观,以RCP(Routing Control Platform)
为例。RCP可以直接通知入口的路由设备使用机房2作为出口。所有流量就会直接避开机房1。
案例2: 动态控制流量
现有的路由协议全是基于规则和策略(路由表/转发表 + 标签/QoS),无法做到动态控制流量。比如,如果用户希望某一部分流量只通过数据中心1,另一部分只通过数据中心2。这时候就需要建立专属通道(VPN/VLAN)。或者在类似双十一的活动时,网络流量激增,希望启动备用的机房。这时候就需要提前配置负载均衡设备。而SDN可以直接在接收流量时对路由进行控制,分配到指定的数据中心。
2层网络只需要少量配置,但是扩展性很差。交换机仅靠MAC寻址实现通信,用在大型网络中会形成广播风暴。3层网络可以使用路由协议,但是需要的配置数量也相对增加了。
传统数据中心使用核心层、汇聚层、接入层
三层结构,接入层使用二层交换机,汇聚层使用三层交互机跨网段通讯,核心层使用专业路由器与公网互联。在二层使用生成树协议构建无环拓扑,使用VLAN连接每个Pod。
然而生成树协议会产生阻塞端口。2010年,Cisco推出vPC虚拟端口通道(virtual-port-channel)
,消除了阻塞端口,充分利用带宽。vPC在相对小型的数据中心表现优异,同时生成树协议作为fail-safe故障安全机制仍被使用。
然而随着虚拟化技术的发展,原本分隔在每个Pod中的资源被集中到了中心化的资源池中。vPC开始应用到汇聚层和核心层之间。
而由于更多分布式应用程序的需求,东西向(横向,这是上北下南那一套)的流量开始增加。而vPC只能提供两个上行链接,三层架构存在带宽瓶颈。因此开发了Spine-and-Leaf Architecture(脊叶架构)
。这种架构中,每个叶层交换机都和脊层交换机全互联。
SDN利用已有的2层网络进行寻址(分离数据平面与控制平面之后,所有的控制由软件完成,交换机只需要转发流量)。SDN会给予每个主机一个PMAC(Pseudo MAC,伪MAC)地址,PMAC与主机在拓扑中的位置有关。当host向别的IP发送信息时,host首先发出ARP请求,询问谁(哪个MAC地址)拥有某个特定的IP。ARP请求并不会被广播出去,而会被交换机拦截,再转发给Fabric Manager 结构管理器
或者Central Controller 中央控制器
。Controller或Fabric Manager
会回复伪MAC
,以此来改写packet的源MAC和目标MAC (数据包在2层传输时,MAC地址会被不断改写)。