传统网络靠供应商设备实现(交换机、路由器),所有的功能都受限于厂商。
配置设备时需要逐台配置(或者依赖配置协议,间接控制)。
状态更新较慢(信息需要在链路上传播,近邻比远邻先得到消息)。
这些厂商不会乐意开源和做兼容。用户无法自定义功能。

SDN的全称是软件定义网络。Software define network
SDN的最大优势就是灵活。地址、拓扑、路由、安全都可由用户控制(而不再是硬件供应商)。不同的设备可以协作。用户可以自定义功能。用户可以用高级语言和API来进行各种控制(粒度之细可以达到“如何处理某一数据包”)。用户可以用一条命令控制很多设备(可以指定操作的对象,直接控制)。

sdn架构主要2个接口 sdn架构优缺点_链路

SDN结构图如上所示。设备层的物理资源被虚拟化。因此不用关心设备的物理位置。资源的增加和减少也较为方便(可扩展性好)。用户在控制层可以纵观大局(global view)(传统网络只能逐设备查看)

SDN可以降低OpEx(运维成本),减少操作次数。启动时自动加载管理员所设配置。

不再需要专门的负载均衡设备,负载均衡相关配置会很方便(因此也更加即时)

用户可以自己安排防火墙的位置。

物理设备上不再安装network OS(原本每个路由器都有大脑,现在被移除了),而是安装最简的Switch OS,Switch OS仅用来提供southbound API(南向接口),network OS被放到上图中的控制层,从而实现控制层和转发层的分离。
(南向接口是跟下层的接口,北向是跟上层的接口。)

受限于成本,传统交换机上给规则表的空间非常有限。而用openflow实现的SDN中,flow table可以很大。

控制器可由imperative language(如c/c++、java、python)或者functional language(如nettle,ocaml等。)

安全问题在于,如果SDN网络中一部分节点(主机或交换机)被攻击者掌握,Topology Poisoning Attack。
(VM迁移常常发生,因此位置信息常常更新。)攻击者可以向控制器提供虚假的位置信息(伪造位置索引,一般的索引如MAC,IP,VLAN ID,Location)。而控制器没有发现这些索引是伪造的。(解决:检查迁移前原端口是否关闭,如果没有关闭,说明是假消息。)
攻击者也可以伪造链路。LLDP是一种链路发现协议。攻击者可以对LLDP包进行注入(LLDP完整性问题),或是通过LLDP relay(因为主机和交换机都能参与LLDP传输)来伪造链路。(完整性问题可以通过HMAC解决(LLDP包由控制器发出,因此控制器可以轻松验证完整性,只要考虑到了就不难解决)。后者需要检查是否为主机。)
攻击者可以发送错误的流量统计信息,使控制器做出错误决策。在负载均衡的场景中,攻击者谎称自己所在交换机节点负载很小。因此流量会向攻击者集中。攻击者可以进行丢包处理,或者分析这些流量。(解决的方向是容错,即使有一部分错误交换机也可正常运行)