对于SDN网络中的交换机而言,根据使用场景的需要,上述交换功能可以采用软件或者硬件实现。其中,软件实现的SDN交换机通常与虚拟化Hypervisor相整合,从而为云计算场景中的多租户灵活组网等业务提供支持。硬件实现的交换机则能够支持基于硬件设备的组网,还能够满足SDN网络与传统网络的混合组网需求。
无论是软件还是硬件,参考传统的网络转发设备,SDN交换机在具体的设计和实现中还需要对交换模式、背板设计、缓冲机制、数据转发等多方面的技术进行合理地选择。
1. 交换模式
SDN交换机的数据交换模式决定了其转发数据包的速度及交换过程导致的延迟(即交换机在一个端口接收到数据包的时间与在另一个端口发送该数据包的时间差)。在实际应用中,数据包的转发既希望具有尽可能低的转发延迟以提升数据传输性能,又希望能够在转发过程中对数据包进行检验,以保证信息传输的可靠性。
和传统的网络交换设备一样,SDN交换机的数据交换模式也可以有直通、零碎片、存储转发等多种选择,各种模式的介绍和分析如下。
直通(Cut-Through):交换机仅对数据帧(二层网络对数据包的特有称呼)的前6个字节的信息进行接收和分析,并将数据帧的其余部分直接剪切(即所谓的Cut)到出端口上。这是因为数据帧的前6个字节包含了该数据帧的目的MAC地址,这已经足以供交换机做出转发决策。直通模式具有最小的转发延迟,但是它并不检查数据的完整性,因此可能会把能够导致以太网冲突的"坏包"转发出去,从而产生网络可靠性问题。
零碎片(Fragment-Free):交换机首先对数据帧的前64个字节进行接收和解析,再进行转发。之所以选择64个字节的长度,是因为经验表明在以太网络中,绝大部分的"坏包"都能在这些字节的处理过程中被检测到。这种模式虽然有可能造成极少量的"坏包"漏检,但是它对网络的整体性能影响不大,因此在很多应用场景中又被称为"快速转发(Fast-Forwarding)"。
存储转发(Store-and-Forward):交换机需要对整个数据帧的内容进行接收和解析,并开展数据帧的完整性检验等操作,以有效地避免出现错误。虽然该模式增加了转发延迟,但是考虑到当前的处理器或者ASIC已经具有足够的性能,因此,在SDN交换机的设计与实现中,仍旧建议其采用这种模式用于数据交换。
2. 背板设计
SDN交换机中,从设备入端口接收到的数据包将通过背板被发送到设备出端口。交换机的背板是数据帧在交换机内部传输的通信通道,携带有转发决策信息及中继管理信息。参考传统的网络交换设备,SDN交换机可采用的背板设计主要包括共享总线机制和交叉开关矩阵机制两种方式,相应的介绍和分析如下。
共享总线(Shared Bus)机制:交换机中所有的入端口和出端口都共享同一数据通路,并由一个集中的仲裁器负责决定何时以何种方式将总线的访问权赋予哪个交换机端口。根据不同的交换机配置,仲裁器可以用多种多样的方法保证总线访问的公平性。在共享总线的数据帧传输流程中,交换机设备入端口在接收到数据帧后,将发起对总线的访问请求,并等待请求被仲裁器批准后将数据帧发送到数据总线上。该数据帧会被总线上挂接的所有端口接收到,同时交换机将决定哪个出端口应该继续传递该数据帧。在接收到交换机的决定后,负责转发的设备出端口将继续传递数据帧,而其他端口则将该数据帧丢弃。共享总线的交换机制使得除了交换机的设备入端口外,其他挂接在总线上的端口都可以自动获得数据帧的副本而无需额外的复制操作,从而比较容易实现组播和广播。但是,共享总线的速度将会对整个交换机的流量造成很大影响,这主要是因为总线是共享的,所以端口必须要等到轮到它们使用总线时才能进行通信。
交叉开关矩阵(Crossbar)机制,又可以被称作 "纵横式交换矩阵",其基本思路是支持在交换机端口之间提供多个可以同时使用的数据通路。它突破了共享总线机制中的带宽限制,在交换网络内部没有带宽瓶颈,不会因为带宽资源不够而产生阻塞。因此,在SDN交换机的设计与实现时,交叉开关矩阵可以被引入,以改进数据交换效率。
3. 缓冲机制
如果SDN交换机采用了基于共享总线的背板设计,那么数据帧必须要依次等待仲裁器裁决直至轮到它们对应的端口可以访问总线时才可以被发出;而即使是采用了基于交叉开关矩阵的背板设计,数据帧也有可能因为网络出现拥塞被延迟发出。因此,相关的数据帧就必须被SDN交换机所缓冲直至它被发出。如果SDN交换机没有设计合理的缓冲机制,那么在出现流量超标或者网络拥塞时,数据帧就有可能被随时丢弃。
SDN交换机的缓冲机制用于解决数据包不能够被设备出端口及时转发的问题,而发生该情况的原因主要包括交换机的设备入端口和设备出端口速率不匹配、多个设备入端口向同一设备出端口发送数据、设备出端口处于半双工工作状态等。为了避免发生上述情况导致数据包被丢弃,当前有两种常用的缓冲机制可供SDN交换机选择。
端口缓冲:为每个交换机上的以太网端口提供一定数量的高速内存用于缓冲数据帧的到来与转发。该方法存在的主要问题是当端口的缓冲被使用殆尽时,其后续接收到的数据帧将被丢弃,而支持缓冲规模的灵活调整将有助于缓解这一问题。
共享内存:为所有端口提供可以同时访问的共享内存空间用于端口缓冲。该方法将所有接收到的数据帧都保存在共享的内存池中,直到设备出端口准备将其转发到网络中。使用这种方法,交换机能够动态地分配共享内存,可以根据端口流量的大小设定相应的缓冲规模。
4. 数据转发
无论是硬件实现还是软件实现的SDN交换机,数据帧在交换机内部从设备入端口到设备出端口的传递过程都需要交换机做出转发决策。在传统的网络交换设备中,这一决策过程需要交换机中的转发表、路由器中的路由表等机制实现,它们通过对设备入端口接收到的数据包的目的地址信息进行匹配,就能够确定该数据包应该被发往哪个设备出端口。对SDN交换机而言,设备中同样需要这样的转发决策机制。以OpenFlow交换机为例,它提出了流表的概念对传统的二层转发表、三层路由表进行了抽象,从而使得数据包在转发过程中的决策更具灵活性。
传统网络设备的转发表和路由表的组成都有标准的定义,以及相对简单的格式,例如二层交换机转发表就是一个设备端口和MAC地址的映射关系,因此非常适合采用静态的专用集成电路高效实现,而SDN交换机中的转发决策中使用的转发表可能会具有非常复杂的组成结构。仍以OpenFlow为例,在OpenFlow v1.2版本后,其流表中各个表项的长度及其中包含的匹配域都是可自定义而非固定的格式,虽然这些设置在交换机的软件实现中能够提供极高的灵活性,但是对于相应的硬件OpenFlow交换机而言,它将不再适合采用预先定义好的硬件电路进行流表的实现。为了应对这一问题,硬件的SDN交换机可以考虑引入TCAM(Ternary Content Addressable Memory,三态内容寻址存储器)技术完成相关流表信息的存储和查询。
TCAM在传统的网络交换设备中也有应用,例如用于快速查找ACL等。和一般只能支持"0"和"1"两种状态的存储器件不同,TCAM存储器中的每个bit位都具有一个通过掩码实现的"don't care"状态。而正是这个第三种状态,使得TCAM既能够支持精确匹配查找,又能够支持模糊匹配查找,完全能够满足SDN交换机的转发决策表项的存储和查询需求。但需要注意的是,当前的TCAM存在成本高、功耗大等问题,这可能会成为影响SDN交换机推广的一个障碍。