《软件定义网络:基于OpenFlow的SDN》一一1.3 SDN的基本构件

简介:

本节书摘来自华章计算机《软件定义网络:基于OpenFlow的SDN》一书中的第1章,第1.3节,作者:Siamak Azodolmolky,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.3 SDN的基本构件

部署SDN需要的基本构件包括:SDN交换机(如OpenFlow交换机)、SDN控制器、控制器中用于和转发设备通信的接口、通常的南向接口(OpenFlow)和网络应用接口(北向接口)。在SDN中,由于控制逻辑和算法被卸载到了控制器中,交换机一般被表示为能够通过开放接口访问的基础转发硬件。OpenFlow交换机分为两类:纯粹的OpenFlow交换机(只支持OpenFlow操作)和混合的OpenFlow交换机(可启用OpenFlow操作)。
纯粹的OpenFlow交换机不具有传统交换机的板级控制特性,完全依赖于控制器作转发决策。混合的OpenFlow交换机除了支持传统的操作和协议之外,还支持OpenFlow操作。目前大多数商用交换机都是混合型的。OpenFlow交换机包括一个流表,流表负责执行数据包的查表和转发,交换机的每个流表保存一组流的纪录,流记录中包括:

  1. 首部字段或匹配字段、数据包首部中提取的信息、输入端口以及元数据信息,这些信息用于匹配输入的包。
  2. 计数器,用于对特定的流进行统计,如统计所接收数据包的个数、字节数以及流的持续时间等。
  3. 一组应用于所匹配的数据包的指令或具体操作,决定如何处理符合匹配条件的数据包。例如,将数据包从指定的端口转发出去。
    SDN(以及OpenFlow)中分离的系统可以和计算机平台上的应用程序与操作系统类比,在SDN中,控制器(即网络操作系统)提供了网络的可编程接口,通过编写应用程序,可以完成控制和管理任务,实现新的功能。图1-1给出了该模型的分层视图,在该视图中,控制是集中式的,编写应用程序时,可以把网络视为一个单一的系统,这样虽然简化了策略的执行与管理任务,但控制器和网络转发单元之间的绑定关系必须随时保持着。如图1-1所示,担任网络操作系统角色的控制器必须至少实现两个接口:一个南向接口,支持控制器和交换机之间的通信;一个北向接口,为控制器和高层的策略应用及服务提供可编程的API。首部字段(匹配字段)显示在图1-1中,流表中的每条记录包含特定的值或ANY(图1-1中用*即通配符表示),后者表示能够匹配任何值。

如果交换机处理IP源地址和目的地址字段时支持子网掩码,则能够更精确地定义匹配。端口字段用数字表示交换机的端口(或输入端口),编号从1开始,该字段的长度取决于具体的实现。输入端口字段适用于所有的数据包。交换机有效端口的源和目的MAC(以太网)地址字段也适用于所有数据包,其长度为48比特。以太网类型字段长度为16比特,适用于所有有效端口上的数据包,OpenFlow交换机必须既能够匹配标准的以太网数据包,也能够匹配带有子网访问协议(Subnetwork Access Protocol,SNAP)首部和0x000000值的机构唯一识别符(Organizationally Unique Identifier,OUI)的IEEE 802.2数据包。特定值0x05FF用于匹配所有不带有SNAP首部的802.3数据包。VLAN ID适用于所有类型为0x8100的以太网数据包。该字段的长度为12比特(即4096个VLAN),VLAN优先级字段长度为3比特,可用于所有类型为0x8100的以太网数据包。IP源和目的地址字段长度为32比特,适用于所有IP和ARP数据包,这些字段可以与子网掩码进行掩码操作。IP报文的协议字段适用于所有IP数据包、以太网帧封装的数据包和ARP数据包。该字段的长度是8比特,如果是ARP数据包,则只使用ARP报文操作码的低8位,IP报文的ToS (Type of Service)字段长度为6比特,适用于所有IP数据包。这个字段的值是8比特,ToS取其中的高6位。源端口和目的传输端口地址(以及ICMP的类型和代码字段)长度为16比特,适用于所有的TCP、UDP和ICMP数据包。若只考虑ICMP的类型和代码,则只需考虑低8位值的匹配。
image

图1-1 OpenFlow交换机、流表、OpenFlow控制器和网络应用
每个表、每个流、每个端口和每个队列都维持一个计数器。计数器循环计数,因此不设进位溢出位,图1-2给出了所需的计数器集合,图中以及本书中提到的字节都是指8比特的组合,持续时间表示某个流在交换机的流表中存在的时间。接收错误字段包括所有显式定义的错误:帧错误、超限、CRC错误以及其他错误。
image

图1-2 用于信息统计的计数器列表
每个流记录都跟0个或者多个具体操作相关联,这些操作指示OpenFlow交换机如何处理与流记录匹配的数据包。如果没有具体的转发操作,该数据包就被丢弃。具体操作列表必须按照一定的顺序执行,然而,这并不确保一个端口上数据包的输出顺序。例如,两个经操作列表处理后所产生的到达同一个输出端口的数据包,很可能会以任意的顺序输出。纯粹的OpenFlow交换机只支持规定的(required)操作,而混合的OpenFlow交换机则可以同时支持常规(NORMAL)操作。两种交换机都能支持FLOOD操作。规定操作是:
转发:OpenFlow交换机必须能够将数据包转发到物理端口,同时支持向下列虚拟端口的转发:
ALL:将数据包发送到除了其输入端口以外的所有接口。
CONTROLLER:封装数据包并将其发送到控制器。
LOCAL:将数据包发送到交换机的本地网络栈。
TABLE(仅用于输出数据包的消息):执行流表中的操作。
IN_PORT:从输入端口输出数据包。
丢弃:表明丢弃所有相匹配的数据包。若流记录中没有定义具体操作,则作丢弃处理。
可选的操作包括:
转发:交换机在进行转发操作时,可以选择支持以下的虚拟端口:
NORMAL:采用交换机所支持的常规转发途径转发数据包(即常规的第2层、VLAN,或者第3层处理)。
FLOOD:沿最小支撑树以洪泛的方式向除输入接口以外的端口转发数据包。
进入队列(Enqueue):通过端口的队列转发数据包,转发行为由所配置的队列策略决定,通常被用来提供基本的QoS支持。
修改字段(Modify field):可选的字段修改操作有:
设置VLAN ID:若没有定义VLAN,则增加一个新的首部,在其中定义VLAN ID(12比特的数据),并把优先级设为0;若原来已存在VLAN首部,则用新的定义值取代原来的VLAN ID。
设置VLAN优先级:若没有定义VLAN,则增加一个新的首部,在其中定义优先级(3比特的取值),并把VLAN ID设为0;若原来已存在VLAN首部,则用新的定义值取代原来的优先级字段值。
剥离VLAN首部:若存在VLAN首部,则将其剥离。
修改源或目的以太网MAC地址:用新的取值(48比特)替换原来的源或目的以太网MAC地址。
修改源或目的IPv4地址:用新的取值(32比特的数据)替换原来的源或目的IPv4地址,并更新IP报文的校验和(同样适用于TCP/UDP的校验和)。该操作只针对IPv4数据包。
修改IP报文的服务类型(ToS)字段值:用新的取值(6比特的数据)替换原来的ToS字段值,该操作只针对IPv4数据包。
修改传输层的源或目的端口号:用新的取值(16比特的数据)替换原来的源或目的端口号,并更新TCP或UDP的校验和。该操作只针对TCP或UDP数据包。
每当有一个数据包到达OpenFlow交换机时,数据包的首部便被提取出来,跟流记录中的匹配字段进行比对,查找匹配从流表的第一个记录开始,依次往下进行,当发现一个相匹配的记录,交换机将使用该流记录所关联的一系列操作对数据包进行处理。每当发现一个和流记录匹配的数据包,就会更新这个流记录所对应的计数器值。如果查表结果没有发现匹配记录,交换机将根据流表的失配(table-missing)记录中的指令决定采取相应操作。流表中必须包含一个失配记录,以便应对找不到匹配的情况,在这个特殊的记录中定义一组操作,用于处理找不到匹配的输入数据包,这些操作包括:丢弃该数据包、向所有的接口发送该数据包,或者通过安全的OpenFlow信道向控制器转发该数据包。查表时使用的首部字段取决于数据包的类型,具体描述如下:
将流的有关输入端口的规定与接收数据包的物理端口进行比对。
所有数据包的以太网帧首部(如图1-1中所定义的源MAC地址、目的MAC地址、以太网的类型字段等)都用于查表匹配。
如果是一个VLAN数据包(以太网类型字段值为0x8100),其VLAN ID和VLAN优先级(PCP)字段用于查表匹配。
如果是IP数据包(以太网类型字段值为0x0800),IP首部包含的字段(源IP地址、目的IP地址、协议字段、ToS等)均用于查表匹配。
如果IP数据包封装的是TCP或UDP(IP报文首部的协议字段值为6或17),则查表比对的信息包括传输层端口号(TCP/UDP源或目的端口)。
如果IP数据包封装的是ICMP报文(IP报文首部的协议字段值为1),则查表时会包括ICMP的类型和代码字段。
如果数据包的IP报文分片的偏移量字段是非零值,或者不是最后一个分片(more fragment 标志位为1),查表时把传输层端口号设为0。
对于ARP数据包(以太网类型字段值等于0x0806),可以根据情况,选择把其中的源IP和目的IP地址字段值包括到查表的字段中。
数据包跟流表记录的匹配按照优先级进行,精确定义了匹配规则(即没有使用通配符)的流记录总是具有最高的优先级,全部采用通配符的流记录具有与其相关联的优先级,具有高优先级的流记录总是先于具有低优先级的流记录进行匹配。如果多个流记录具有相同的优先级,则交换机可以选取任意的匹配顺序。编号越大,优先级越高。图1-3表示OpenFlow交换机中的数据包处理流程。需要注意的很重要的一点是:如果一个流表的字段值是ANY(*,通配符),则它就能够匹配首部中的任何可能取值。
以太网的帧有各种类型(如Ethernet II、带有或者不带有SNAP的802.3帧等),如果数据包是Ethernet II格式的帧,则以太帧的类型字段按照预期的方法处理;如果数据包是802.3格式的帧,带有SNAP首部,OUI的值等于0x000000,则用SNAP协议ID来比对流的以太网帧类型字段。如果一个流记录中规定以太帧类型为0x05FF,那它就能够匹配所有不带SNAP首部的802.2以太网帧,以及虽然带有SNAP首部,但是OUI取值不等于0x000000的以太网帧。
image

图1-3 OpenFlow交换机中的数据包处理流程

相关文章
|
2月前
|
SDN 数据中心 网络架构
【计算巢】软件定义网络(SDN):网络管理的未来趋势
【5月更文挑战第31天】SDN(Software Defined Networking)是新兴的网络架构模式,通过分离控制平面和数据平面实现集中化管理,提高网络可见性和可控性。它以软件定义为核心,打破传统硬件限制,促进网络创新。SDN 提供快速部署、降低成本并增强灵活性。示例代码展示了使用 Python 实现的简单 SDN 控制器。随着技术发展,SDN 在数据中心和电信网络等领域广泛应用,引领网络技术的未来。
|
2月前
|
网络安全 SDN 网络虚拟化
《计算机网络简易速速上手小册》第8章:软件定义网络(SDN)与网络功能虚拟化(NFV)(2024 最新版)
《计算机网络简易速速上手小册》第8章:软件定义网络(SDN)与网络功能虚拟化(NFV)(2024 最新版)
66 2
|
2月前
|
存储 运维 安全
SDN 网络编排与服务
【2月更文挑战第30天】网络编排是基于业务需求,对逻辑网络服务进行有序组织和安排,通过控制器构建满足需求的网络服务。
|
2月前
|
网络协议 网络性能优化 SDN
【网络层】流量控制VS拥塞控制、路由器功能、SDN控制平面
【网络层】流量控制VS拥塞控制、路由器功能、SDN控制平面
66 0
|
存储 智能网卡 API
智能网卡在分布式 SDN 网络的应用与实践 | 龙蜥技术
智能网卡加速原理和以及在浪潮分布式 SDN 网络加速的应用。
|
SDN 网络虚拟化 人工智能
带你读《智慧光网络:关键技术、应用实践和未来演进》——2.9.6 光接入网SDN/NFV
带你读《智慧光网络:关键技术、应用实践和未来演进》——2.9.6 光接入网SDN/NFV
|
监控 安全 测试技术
CLAS:用于软件定义网络SDN的协作分层架构
网络软件化的进步正在促进在电信运营商的服务和基础设施中引入可编程性。这通常是通过在网络中引入软件定义网络 (SDN) [RFC7149] [RFC7426] 功能来实现的,包括控制器和协调器。
380 0
CLAS:用于软件定义网络SDN的协作分层架构
|
XML 监控 网络协议
软件定义网络 (SDN):分层和架构术语
“软件定义网络 (Software-Defined Networking,SDN)”是可编程网络范式 [PNSurvey99] [OF08] 的一个术语。简而言之,SDN 是指软件应用程序能够动态地对单个网络设备进行编程,从而控制整个网络的行为 [NV09]。Boucadair 和 Jacquenet [RFC7149] 指出,SDN 是一组技术,用于以确定性、动态和可扩展的方式促进网络服务的设计、交付和操作。
983 0
软件定义网络 (SDN):分层和架构术语
|
存储 运维 安全
软件定义网络:从服务提供商视角看SDN
它并不是要无休止地讨论 SDN 的真正含义,而是建议对可以在 SDN 保护伞下使用的技术进行功能分类,并详细说明这些技术的联合激活不可避免地引起的各种悬而未决的问题。因此,仅出于澄清目的而提及SDN的定义。
214 0
软件定义网络:从服务提供商视角看SDN
|
运维 负载均衡 网络协议
SDN 系统方法 | 7. 叶棘网络
SDN 系统方法 | 7. 叶棘网络
327 0
SDN 系统方法 | 7. 叶棘网络