轉載OpenFlow Switch學習筆記(二)——OpenFlow Ports

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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章