定义
SDN全称为Software Defined Network,软件定义网络。在云计算中,让网络实现多种功能,包括:软件编排、开放API、构建云平台租户组网、支持云原生。使整个计算网络垂直开放,能够有效解决网络资源规模扩展受限、组网灵活性差的问题。
应用场景
租户网络tenant network
不同租户间的资源相互隔离,每个租户独享私有网络,一个租户可以在自己的私有网络内创建多个子网。租户可以创建虚拟路由器vrouter,将虚拟网络virtual network和外部网络external network连接起来。
跨数据中心网络
在传统大二层网络中,采用SDN技术,可以将分布在不同数据中心的资源,跨中心整合在同一个网络内。多用于跨数据中心业务容灾,或用于跨数据中心灵活调配资源。
网络虚拟化
通过SDN的可编程方式,可以在很短的时间内,实现交换机、路由器、防火墙、QoS、负载均衡等网络设备的整合。
平面划分
把行驶路线作为对比:由于乘客只关心目的站点的到达,所以只需记住乘坐某某交通工具即可,不关心具体路线、交通状况等其他因素。
城市的公路、辅路、高架桥等基础设施为underlay网络;公交车的具体行驶路线为overlay网络。
underlay网络
物理网络,由交换机、路由器等设备组成,负责传递数据包,使用路由协议确定ip地址的连接。
overlay网络
虚拟网络,使用网络虚拟化技术,在物理基础设施之上构建的逻辑。
OpenFlow
在Open Networking Foundation SDN方案中,OpenFlow充当南北向接口,使控制平面control plane、数据平面data plane交互的协议。
流
Flow就是具有相同特征的数据包集合。例如,源mac地址1、目的mac地址2的所有数据包集合就可以视为一条流,可见流具有方向性。
流表
Flow Table由若干条流表项Flow Entry组成,用于指导OF交换机对收到的数据包进行转发,相当于统一了二层的mac地址表、三层的路由表。
流表项
匹配域Match Fields:定义以及匹配流表的依据,拥有多个可选字段,例如可以根据源ip地址、目的ip地址来定义一条流;
指令Instructions:处理流的动作,最普遍的动作集Action Set(添加、修改、清空);
优先级Priority:流表项的优先匹配程度;
计数器Counters:统计该条流的信息;
生存时间Timeouts:流表项的有效存活时间;
Cookie:控制器设置的、用来过滤被动作集Action Set影响的流表项;
过程对比
传统网络
二层:生成arp表,数据包成功匹配,则基于目的mac地址转发,失败则向除入端口外其他所有端口转发;
三层:分布式路由协议,数据包成功匹配相应的路由规则,则基于目的ip地址转发,失败则丢弃;
结论:采用基于数据包独立转发的模式,设备不知道具体路径,发送给大致知晓的其他设备。
SDN
控制层:SDN控制器构建流表;
数据层:OF交换机先向SDN控制器查询流表,再转发数据包,匹配成功则基于匹配域(比如源地址、目的地址)转发;匹配失败时,则问询SDN控制器;
结论:基于流进行转发的,对相同特征的数据包集合采用同样的处理,设备知晓最佳路径。
详细举例
1、OF交换机接收ip数据包;
2、OF交换机解析数据包头部并查询流表,由于流表为空,向控制器询问;
3、OF交换机向控制器发送Packet-In消息;
4、控制器计算主机1到主机2的路由;
5、控制器下发由FlowMod消息承载的流表信息,OF交换机加载流表;
6、控制器发送Packet-Out消息,指示OF交换机按照流表转发IP数据包;
7、OF交换机转发数据包;
EVPN
evpn运行在控制面,负责虚拟网络的管理和控制,通过BGP协议来学习跨数据中心的mac地址、路由表,支持多租户隔离、高效的数据转发等。
路由类型
Type-2路由:用于通告mac地址。每个 Type-2 路由包含一个mac地址、一个vtep的ip地址,用于指示该mac地址所在的vtep;
Type-3路由:用于租户隔离,直接通告二层vlan信息,并不直接携带隧道的相关信息,但配合Type-2路由,间接实现vxlan隧道的建立和维护;
Type-5 路由:用于通告三层ip前缀信息。每个Type-5路由包含一个ip前缀和下一跳ip地址,用于指示路由信息。
二层arp表
学习:EVPN通过BGP通告mac地址,使得不同数据中心的设备能够了解到对端的mac地址及其对应的VTEP;
分发:当一个数据中心内的设备发送一个arp请求或广播帧时,EVPN通过BGP协议将mac地址分发出去,从而实现跨数据中心的二层通信;
三层路由表
ip前缀学习:EVPN通过BGP学习不同数据中心之间的ip前缀信息;
路由分发:EVPN 可以将三层路由信息(ip前缀、下一跳)分发到其他数据中心,从而实现跨数据中心的三层通信;
vxlan
vxlan运行在数据面,负责数据包的封装和传输。使vm、pod可以在不同的物理数据中心之间迁移,而不需要改变其二层网络配置。
VTEP
隧道端点Tunnel Endpoints,运行vxlan的边缘设备,可以是网络设备、服务器、虚拟机、pod,是隧道的起点和终点,负责数据包的封装和解封装。
VNI
网络标识符Network Identifier,可以将一个VNI对应一个租户身份,容量空间总共有2^24=1600万个实例。
BD
桥域Bridge Domain,类似传统网络中采用vlan划分广播域。VNI与BD一一对应,一个BD就表示着一个桥域,同一个BD内的主机就可以进行二层互通。
BDIF
桥域接口Bridge Domain Interface,作为某BD的网关,提供三层转发接口。如果数据包从某二层广播域出去,必须经过BDIF。
NVE
网络虚拟化边缘节点Network Virtualization Edge,是实现网络虚拟化功能的物理设备。在三层网络建立的基础上,实现二层网络。
数据包结构
VTEP将运行在overlay的内层原始二层数据包(绿色),先添加vxlan包头(黄色),然后添加上外层UDP数据包头(蓝色),在underlay网络传输,到达目的VTEP,收到数据包后,依次剥离外层的ip包头、UDP包头,通过vxlan的VNI发送给对应的BD桥域,接收原始二层数据包。
抓包举例
可以看出:overlay的数据包通过VXLAN建立隧道后 ,从underlay网络的10.2.12.18传递到10.2.12.10,从而实现192.168.0.102、192.168.0.108的跨设备二层打通。