学习笔记
传统网络的转发行为,是受各种网络协议控制的,尽管它们也间接地反映了管理员的意志,但是:
第一,它们是逐设备单独控制的,是纯分布式控制。
第二,控制面跟转发面在同一个设备中,紧密耦合。
第三,管理员无法直接操控转发行为(管理员配置网络协议,网络协议通过自身的运行再去影响转发行为,管理员无法改变协议本身的行为)。
第四,网络协议对转发行为的影响是有固定模式的,比如路由协议只能靠目的IP地址来进行转发,MPLS协议只能靠MPLS Label来进行转发,且不同情况下的转发只能对报文进行固定模式的修改。比如路由转发的时候只能修改报文的MacDa、MacSa、VlanTag、TTL、DSCP,改不了其他东西,且修改的方式也是固定的,比如TTL通常只能减一。
而SDN呢?它要求集中式控制(也有分布式,但是那是先集中再分布),要求转发跟控制分离,要求管理员可以直接操控设备的转发行为,可以不用通过各种网络协议(但是SDN并没有拒绝使用动态协议,只不过这些协议是要运行在Controller上的,而不是运行在设备上的),而是直接通过应用程序来控制转发行为的,而且这种控制是直截了当的,不受任何协议影响的,比如管理员不希望仅通过“目的IP”来转发而是希望看“目的IP+源IP”,转发的时候直接修改报文的“目的IP”等。
总结一下就是,传统网络虽然也有大量软件参与,但是这些软件不是网络的使用者设计的(是设备提供商写死在设备中的),无法完全让管理员随心所欲地体现自己的意志,管理员不能清楚地知道发生了什么事情,自然就不能说这些软件(协议)定义了这个网络。而SDN中的软件可以完全是管理员所在的组织设计的,可以让管理员随心所欲地利用这些软件来规划自己网络中的任意转发行为,管理员完全通过这些软件定义了整个网络,也就是所谓的“Software Defined Network”。
传统网络中的软件,是指各种协议和网管,那么SDN中的软件到底是什么?其实就是各种应用程序(Application),比如一套视频监控的管理软件,这个软件通过图形界面操作来控制交换机,规定哪个摄像头的数据要发送到哪个服务器去,走哪条路径。又比如一个防火墙控制软件,这个软件通过图形化操作界面来控制交换机,规定符合什么条件的数据报文要被送到监控服务器去进行深度分析。这些软件都有一个共同特点,它们可以不依赖于任何路由交换协议,而且是网络的用户可以定制设计的,可以用来实现自动化控制的,完全服务于特定应用。
SDN并不是一个具体的技术(相比较而言OSPF、BGP、MPLS、Trill等都是一个具体的技术),它其实是一个框架,一种网络设计的理念。它的核心诉求是通过软件控制网络,实现业务的自动化部署。为方便控制网络,它希望控制面和转发面是分离的,转发面若能做到通用,将对这种控制大有裨益。当然,这并不是强制要求的。
除了上述的直接含义外,SDN还有一些其他的潜台词。最广为人知的就是对硬件转发面配置接口的标准化(网管术语中的南向接口),因为如果软件想随心所欲地控制转发行为,就应该尽量不依赖于特定的硬件,否则软件就无法通用。还有一个潜台词则是集中控制,因为是应用程序定义的网络,该网络中的设备都需要受相关应用程序的统一控制。
总结一下,目前一般比较认可的SDN特征属性包括以下几点:
1.控制面与转发面分离;
2.开放的可编程接口;
3.集中化的网络控制;
4.网络业务的自动化应用程序控制。
其中前两点是SDN的核心属性,只要符合这两点,无论它具体用了什么样的实现技术,都可以宽泛地认为是SDN架构。
应当注意的是,这里面并不包括硬件编程接口的标准化(但是必须要开放化),而硬件编程接口的标准化恰好是OpenFlow所刻意追求的方向(OpenFlow不仅要求编程接口要标准化,它更进一步,要求硬件内部转发行为也要标准化)。