OpenFlow Ports是OpenFlow Switch与剩余网络之间传递Packet的网络接口。OpenFlow Switches之间通过OpenFlow Ports彼此相互逻辑连接。一个OpenFlow Switch准备了若干个可用的OpenFlow Ports用于OpenFlow processing,不过这里所说的OpenFlow Ports与传统的硬件交换机的网络接口并不是一样的概念,有些传统硬件交换机的网络接口在OpenFlow Switch里并不适用,OpenFlow Switch也可以定义自己额外附加的OpenFlow Ports。
Packets通过 ingress port 被接收到OpenFlow Switch中,被Pipeline处理后,其或许会被转发到一个 output port 上。在Packet被Pipeline处理的整个流程中,这个 ingress port 会被作为Packet的一个属性存在,它表示了该Packet是从哪个OpenFlow Port进入到OpenFlow Switch里的,并可被用于后续的Flow Entry Matching过程。OpenFlow Pipeline可以通过使用 output action决定将该Packet转发到一个 output port上,进而将该Packet重新送回到网络中。
一个OpenFlow Switch必须支持三种类型的OpenFlow Ports:physical ports(物理端口)、logical ports(逻辑端口)和reserved ports(预留端口)。具体OpenFlow Ports 描述如下:
1、Standard Ports(标准端口):
OpenFlow Standard Ports通常被定义为是Physical ports、Logical ports和支持的LOCAL Reserved ports(不包括其他的Reserved ports)。它们可被用于 ingress port,也可被用于 output port,同样可以用于 Group 里,它们都有 port counters。
2、Physical Ports(物理端口):
OpenFlow Physical Ports是OpenFlow Switch定义的、对应于物理交换机的一个硬件接口的port。比如在一个以太网交换机上,Physical Port会唯一对应于一个以太网接口。但是在一些特殊的环境中,比如在基于物理机硬件交换机上虚拟出来的OpenFlow Switch,它的Physical Port可能仅仅只是对应于这个物理硬件交换机的硬件接口上的一个虚拟切片。
3、Logical Ports(逻辑端口):
OpenFlow Logical Ports是OpenFlow Switch定义的端口,它并不直接对应物理交换机的硬件接口。Logical Ports是Switch中用non-OpenFlow methods(比如link aggregation groups,tunnels,loopback interfaces)定义的更高级别的抽象,它可能包括了对Packet的封装,可能会被映射到多种Physical Ports上。它们对Packet的处理对于OpenFlow processing来说一定要是透明的,而且Logical Ports必须得像Physical Ports一样与OpenFlow processing交互。
Logical Ports与Physical Ports唯一的区别就是与Logical Ports关联的Packets可能会有一个额外的称之为Tunnel-ID的metadata域与之关联;当一个Packet被Logical Ports接收并被发送到Remote Controller时,与其关联的Logical Port以及其潜在的Physical Port也要上报给Remote Controller。
4、Reserved ports(预留端口):
OpenFlow Reserved ports是OpenFlow Switch规范定义的,它们指定了一些通用的转发动作,比如发送到Remote Controller,flooding,用non-OpenFlow methods转发(或者说是“正常的”交换机处理)。一个OpenFlow Switch并不需要实现所有的Reserved Ports,但是必须得实现下面加黑表示的Reserved Ports:
1)ALL:表示那些所有能被Switch用来发送特定Packets的ports,其仅仅只能被作为一个output port;在这种情况下,Packet的一个拷贝将会被发送到所有的Standard Ports,除了Packet的 ingress port以及那些配置为OFPPC_NO_FWD的ports。
2)CONTROLLER:表示与Remote Controller之间的OpenFlow Channel,可以被用作为一个 ingress port,也可以被用作为一个 output port。当被用作为一个 output port时,Packet将会被封装在 packet-in 消息体里,并被以OpenFlow Protocol的方式发送给Remote Controller;当被作为一个 ingress port时,则表明该Packet来源于Remote Controller。
3)TABLE:代表OpenFlow Pipeline的开始,该port仅仅只能在一个 packet-out 消息的action集合中的 action是 output 时才有效,它将Packet发给OpenFlow Pipeline的第一个Flow Table,以便开始进行常规 processing。
4)IN_PORT:代表Packet的 ingress port,仅仅被用作为一个 output port,将Packet通过它的 ingress port发送出去。
5)ANY:特殊的值,用在没有指定port(或者port是通配的)的特殊OpenFlow Commands情况下;它即不能作为一个 ingress port,也不能作为一个 output port。
6)LOCAL:表示Switch本地网络栈和管理栈,可以被用作是一个 ingress port 或者是 output port。Local Ports能够使远程实体通过OpenFlow网络与Switch及其它的网络服务交互,而不用通过一个独立的控制网络。通过合适的默认Flow Entries集合,它可以被用来实现一个 in-band controller连接。
7)NORMAL:表示Switch传统的non-OpenFlow Pipeline,仅仅只能用作一个output port,且仅仅只能使用Normal Pipeline来处理Packets。如果该Switch并不能将来自于OpenFlow Pipeline的Packets转发给Normal Pipeline,那么必须得表明其不支持该action。
8)FLOOD:表示使用Switch Normal Pipeline的flooding,仅仅只能被用作为一个output port,通常通过它可以将Packets发到所有的Standard Ports上,但除了接收这个Packet的 ingress port 以及那些状态为OFPPS_BLOCKED的ports;当然,Switch也可能会根据Packet的VLAN ID来选择往哪些port去flood。
OpenFlow-only Switches并不支持NORMAL和FLOOD端口,而OpenFlow-hybrid Switches可能会支持它们。将Packet转发到FLOOD port则依赖于Switch的实现和配置,而使用类型为all的组转发则能够使Remote Controller更加灵活地实现flooding。