01-OpenFlow配置
本章節下載: 01-OpenFlow配置 (451.74 KB)
OpenFlow是SDN(Software Defined Network,軟件定義網絡)架構中定義的一個控製器與轉發層之間的通信接口標準。OpenFlow允許控製器直接訪問和操作網絡設備的轉發平麵,這些網絡設備可能是物理上的,也可能是虛擬的。
OpenFlow的思想是分離控製平麵和數據平麵,二者之間使用標準的協議通信;數據平麵采用基於流的方式進行轉發。
OpenFlow網絡由OpenFlow設備(Switch)和控製器(Controller)通過安全通道(OpenFlow channel)組成,如圖1-1所示。Switch與Controller通過TLS或者TCP建立安全通道,進行OpenFlow消息交互,實現表項下發、查詢以及狀態上報等功能。下文如果沒有特殊說明,交換機指的就是OpenFlow設備。
圖1-1 OpenFlow網絡組成
OpenFlow Switch有下麵兩種:
· OpenFlow-Only Switch:僅支持OpenFlow轉發。
· OpenFlow-Hybrid Switch:既支持OpenFlow轉發,也支持正常轉發。
OpenFlow接口有如下類型:
· 物理接口:比如以太網接口。可以作為入接口和出接口。
· 邏輯接口:比如聚合接口、Tunnel接口等。可以作為入接口和出接口。
· 保留接口:由轉發動作定義的接口,實現OpenFlow轉發功能。除Any接口外,其他接口都可以作為出接口,僅Controller和Local可以作為入接口。具體類型請參見表1-1。
類型 |
說明 |
ALL |
報文從所有接口發送 |
Controller |
報文上送控製器 |
Table |
報文重新進入流表進行匹配 |
In Port |
報文從入接口轉發 |
Any |
接口通配描述,不能作為入接口以及出接口 |
Local |
報文上送本地CPU |
Normal |
報文正常轉發 |
Flood |
報文廣播發送 |
OpenFlow支持多實例。每個OpenFlow實例可以單獨連接控製器,相當於一台獨立的交換機,根據控製器下發的流表項指導流量轉發。
下文如果沒有特殊說明,交換機指的就是一個OpenFlow實例。
OpenFlow實例有以下類型:
· 全局類型:對設備上所有流量都根據OpenFlow流表項轉發。將OpenFlow實例配置為該類型後,設備所有業務接口都屬於該OpenFlow實例。
· VLAN類型:配置VLAN內的流量根據OpenFlow流表項轉發,其他VLAN內的流量進行正常轉發。配置VLAN類型的OpenFlow實例時,需要同時指定OpenFlow實例對應的VLAN,VLAN內所有接口都屬於該OpenFlow實例。
· 接口類型:配置接口的流量根據OpenFlow流表項轉發,其他接口的流量進行正常轉發。將OpenFlow實例配置為該類型後,需要手工配置OpenFlow實例對應的接口。
OpenFlow需要將設備的支持能力、當前的接口信息等設備信息上報給控製器後,控製器才能夠下發流表項指導轉發。
在配置更改的情況下,需要重新激活實例使配置生效。激活配置後,OpenFlow實例會與所有控製器斷開連接,然後重新進行連接。
OpenFlow協議規定需要將接口信息上報給控製器,這些接口包括物理接口、邏輯接口以及保留接口中的Local。
對於通過VLAN劃分作用範圍的OpenFlow實例,當且僅當接口所屬VLAN完全包含了OpenFlow配置的映射VLAN後,該接口才是此OpenFlow實例的接口,可以被上報到控製器。如果配置了loosen模式,隻要接口所在VLAN與實例配置VLAN存在交集,接口就屬於OpenFlow實例。
OpenFlow通過流表(Flow Table)來匹配和處理報文,在同一個流表中按流表項的優先級進行先後匹配。一台交換機上可以包含一個或者多個流表。
流表類型如下:
· MAC-IP流表:通過MAC地址表和FIB表實現。隻能匹配目的MAC地址、VLAN以及目的IP地址,動作也僅支持修改目的MAC地址、源MAC地址、VLAN、TUNNEL ID以及指定出接口。具體請參見1.10 附錄 B MAC-IP流表。
· Extensibility流表:擴展流表,使用ACL實現。
流表項如圖1-2所示:
· Match Fields:匹配規則。可以匹配入接口、報文頭等字段。
· Priority:優先級。定義流表項之間的匹配順序,優先級高的先匹配。
· Counters:統計計數。統計有多少個報文和字節匹配到該流表項。
· Instructions:動作指令集。定義匹配到該流表項的報文需要進行的處理。流表項動作指令集是對動作進行操作,流表項的動作有兩種執行類型:
¡ 動作集(Action Set):一係列動作的組合,不會立刻修改報文內容,直到報文不再需要進入下一級流表,動作集裏每種動作僅能存在一個,並且按照表1-2從上到下的順序執行。
¡ 動作序列(Action List):需要立即執行的一係列動作,其動作內容與動作集相同,但是會立即修改報文的內容,其效果是累加的,並且執行順序是按照下發的順序執行的。
Instruction |
處理 |
Meter |
對匹配到流表項的報文進行限速 |
Apply-Actions |
立即執行動作序列中的動作 |
Clear-Actions |
清除動作集中的所有動作 |
Write-Actions |
更改動作集中的所有動作 |
Write-Metadata |
更改流表間數據,在支持多級流表時使用 |
Goto-Table |
進入下一級流表 |
具體動作類型如表1-3所示。
表1-3 動作類型(1.3.1版本)
動作名稱 |
可選/必選 |
描述 |
Output |
必選 |
轉發報文到特定的OpenFlow端口,例如物理端口、邏輯端口以及OpenFlow保留端口 |
Drop |
必選 |
沒有直接的動作來代表Drop,當動作集中不含有Output指令時,報文被丟棄。通常空指令集、空動作集或執行清空動作集後,報文被丟棄 |
Group |
必選 |
將報文轉交給Group處理,該動作的含義由Group的類型定義 |
Set-Queue |
可選 |
為報文指定隊列ID。當報文被轉發到特定端口時,隊列ID通常被用於基本QoS |
Push-Tag Pop-Tag |
可選 |
適用於VLAN頭、MPLS頭、PBB頭(802.1AH) |
Set-Field |
可選 |
識別報文字段的類型,並且可以修改該字段的值。通常隻適用於最外層的字段(例如當內外層均有VLAN tag時,該動作隻修改最外層的VLAN Tag) |
Change-TTL |
可選 |
改變報文中IPv4的TTL、IPv6的Hop Limit、或MPLS的TTL。隻適用於最外層的字段 該動作可以設置TTL(TTL必須已經存在)、減少TTL、TTL值拷貝(inwards/outwards) |
· Timeouts:超時時間。包括了idle time和hard time。
¡ idle time:在idle time時間內,如果沒有報文匹配到該流表項,則此流表項被刪除。
¡ hard time:在hard time時間超時後,無論是否有報文匹配到該流表項,此流表項都會被刪除。
· Cookie:控製器選用的自定義數據,不用於處理報文。可能被控製器用於匹配流表項。
· Flags:改變流表項管理方式的標識,例如OFPFF_SEND_FLOW_REM標識用於觸發交換機向控製器發送該流表項的Flow-Removed消息。
如圖1-3所示,當報文進入交換機後,必須從流表ID最小的流表開始依次匹配;流表可以按次序從小到大越級跳轉,但不能從某一流表向前跳轉至流表ID更小的流表。一旦在某個流表匹配到後,會更新此報文的動作集(允許被下一級流表覆蓋),到了最後一個流表後,所有的動作會被執行,此時報文的內容會被修改,指定出接口進行轉發。如果在某個流表處理時,處理指令包含Action List,則報文的一份拷貝立即執行Action List而不需要在最後一個流表處理結束後再執行。
圖1-3 OpenFlow轉發示意圖
每個流表都包含一個Table Miss流表項,該表項用於定義在流表中沒有匹配的報文的處理方式,該表項的匹配域為通配,即匹配任何報文,優先級為0,動作指令與正常表項相同。
Meter Table由Meter表項組成,Meter表項被流表項所引用,為所有引用Meter表項的流表項提供報文限速的功能。
圖1-4 Meter表項結構
· Meter Identifier:Meter ID,用於識別meter,32bits。
· Meter Bands:一個Meter表項可以包含一個或者多個Meter Bands,每個Meter Band定義了速率以及動作。當報文的速率超過了某些Meter Band,根據這些Meter Band中速率最大的那個定義的動作進行處理。
· Counters:當報文被Meter處理時,更新計數器。
圖1-5 Meter Bands結構
· Band Type:Band類型,定義報文如何處理。為可選,可使用丟棄(drop),即報文高於該速率會被丟棄;以及重新標記DSCP(dscp remark)。
· Rate:Meter用於選擇Band的最低速率,即報文速率高於該速率並最接近該速率,該Band將被應用。
· Counters:當Band處理報文時,更新計數器。
· Type Specific arguments:某些Band含有的特定參數。
交換機與控製器通過TLS或者TCP建立Channel,進行OpenFlow消息交互,實現表項下發、查詢以及狀態上報等功能。
OpenFlow協議中定義了三種消息類型:Controller to Switch消息、異步消息和同步消息,每種報文類型都有很多子類型。
Controller to Switch消息是指由控製器產生並發送到交換機,用來查詢交換機的消息,可以不需要交換機響應。這些消息主要由控製器用來對交換機進行狀態查詢和修改配置等操作。
表1-4 Controller to Switch消息
子類型 |
描述 |
Features |
用於控製器發送請求來了解交換機的能力,交換機必須回應該報文 |
Configuration |
用於控製器設置,查詢交換機的配置,交換機隻有在控製器查詢時回應 |
Modify-State |
用於管理交換機的狀態,如流表項和端口狀態。該命令主要用於增加、刪除、修改、交換機內的流表表項,組表表項以及交換機端口的屬性 |
Multipart |
用於控製器收集交換機各方麵的信息,例如當前配置,統計信息等 |
Packet-Out |
用於通過交換機特定端口發送報文,這些報文可以通過Packet-In消息觸發,也可以通過控製器直接發送。通常Packet-Out消息包含整個之前接收到的Packet-In消息所攜帶的報文或者buffer ID(用於指示存儲在交換機內的特定報文)。這個消息需要包含一個動作列表,當交換機收到該動作列表後會對Packet-Out消息所攜帶的報文執行該動作列表。如果動作列表為空,Packet-Out消息所攜帶的報文將被交換機丟棄 |
Barrier |
用於確認之前下發動作是否成功。控製器發送Barrier請求消息,當交換機確認之前下發的流表等操作都已經成功時會回複Barrier應答消息 |
Role-Request |
用於設定或查詢OpenFlow channel的角色。通常用於交換機和多個控製器相連的情況 |
Asynchronous-Configuration |
控製器使用該報文設定異步消息過濾器來接收其隻希望接收到的異步消息報文,或者向交換機查詢該過濾器。通常用於交換機和多個控製器相連的情況 |
異步(Asynchronous)消息是由交換機發送給控製器,用來通知交換機上發生的某些異步事件的消息。例如,當某一條規則因為超時而被刪除時,交換機將自動發送一條Flow-Removed消息通知控製器,以方便控製器作出相應的操作,如重新設置相關規則等。
表1-5 異步消息
子類型 |
描述 |
Packet-In |
轉移報文的控製權到控製器。對於所有通過匹配流表項或者Table Miss後轉發到保留端口Controller端口的報文均要通過Packet-in消息送到控製器。也有部分其他流程,如TTL檢查等,也需要通過該消息和控製器交互。Packet-In既可以攜帶報文,也可以通過在交換機內部設置報文的Buffer來僅攜帶報文頭以及其Buffer ID傳輸給控製器。控製器在接收到Packet-In消息後會對其接收到的報文或者報文頭和Buffer ID進行處理,並發回Packet-out消息通知交換機如何處理該報文 |
Flow-Removed |
通知控製器將某個流表項從流表中移除。通常該消息在控製器發送刪除流表項的消息或者流表項的兩個定時器其中之一超時時產生 |
Port-Status |
通知控製器端口狀態或設置的改變 |
Error |
通知控製器交換機出現的問題或錯誤 |
對稱(Symmetric)消息,就是雙向對稱的消息,主要用來建立連接和檢測對方是否在線等。
表1-6 對稱消息
子類型 |
描述 |
Hello |
當連接啟動時交換機和控製器會發送Hello交互 |
Echo |
用於驗證控製器與交換機之間連接的存活,控製器和交換機都會發送Echo request/reply消息,而且對於接收到的Echo request消息必須能返回Echo reply消息。 該消息也可用於測量控製器與交換機之間鏈路的延遲和帶寬 |
Experimenter |
為將來新加入的特性預留的消息 |
OpenFlow中包含連接檢測定時器和重連定時器,作用如下:
· 連接檢測定時器:定義發送Echo request報文時間間隔,設備發送三次Echo request報文,仍然沒有收到Echo reply報文,則交換機斷開與控製器的連接。
· 重連定時器:定義交換機與控製器斷開連接後,下次開始重新連接的時間間隔。
一個OpenFlow交換機可以與多個控製器建立連接,初始連接時,多個控製器的角色相同,權限相同,控製器可以通過OpenFlow消息設置本控製器的角色,各種角色的權限如表1-7所示。
角色 |
權限 |
Master |
處於該角色的控製器擁有全部權限,可以下發流表項,查詢統計信息,接收設備上報的狀態信息,在多個控製器中僅能有一個控製器是Master角色 |
Equal |
處於該角色的控製器同樣擁有全部權限,相對於Master角色,唯一不同的是可以有多個控製器處於Equal角色 |
Slave |
處於該角色的控製器僅擁有部分權限,Controller to switch消息中不能下發流表項,Group表項以及Meter表項,不允許修改接口配置和設備配置,不允許執行Packet Out操作。異步消息中,缺省情況下設備不會上送Flow Remove消息和Packet In消息,僅能上送接口狀態變化消息,但是異步消息的上送能力可以通過控製器的設置異步消息進行修改 |
交換機與多個控製器建立連接時,連接分為Single模式和Multiple模式:
· Multiple模式:同一時刻可以與多個控製器建立連接。交換機會同時連接實例內所有的控製器,在與某個控製器連接失敗或者斷開連接時,在重連定時器超時後重新進行連接,直到連接成功。
· Single模式:同一時刻僅與一個控製器建立連接,其他控製器作為備份。當且僅當當前的連接斷開後,交換機會連接下一個控製器,直到連接成功。
交換機與每個控製器建立的連接中,可包含一個主連接和多個輔助連接:
· 主連接:一般用於控製消息的處理(下發流表項、獲取數據、信息上報等),使用TCP/SSL保持可靠的連接。
· 輔助連接:用於提高控製器和OpenFlow交換機的通信能力。輔助連接的目的地址和端口號可以和主連接不一致。
如果交換機與所有控製器斷開連接,則交換機進入連接中斷模式,連接中斷模式分為兩種:
· Secure模式:連接斷開後,交換機根據流表項轉發。不主動刪除控製器下發的表項,而是等待表項超時後進行刪除,一旦連接建立成功,未超時的表項依然存在。匹配的流表項中執行output controller動作轉發的流量被丟棄。創建OpenFlow實例時,缺省為Secure模式。
· Standalone模式:連接斷開後,交換機正常轉發。
如果交換機與控製器重新連接成功,則繼續作為OpenFlow設備根據流表項進行轉發。
· OpenFlow Switch Specification Version 1.3.3
OpenFlow配置任務如下:
(1) 配置OpenFlow實例
a. 創建OpenFlow實例
c. (可選)配置帶內管理VLAN
d. (可選)配置控製器連接模式
e. (可選)配置禁止上送控製器的端口類型
f. 激活OpenFlow實例
g. (可選)配置OpenFlow實例的屬性
(2) 配置連接控製器
(3) (可選)配置OpenFlow實例作為SSL服務器監聽控製器
(4) (可選)開啟OpenFlow告警功能
(1) 進入係統視圖。
system-view
(2) 創建OpenFlow實例,並進入OpenFlow實例視圖。
openflow instance instance-id
(3) (可選)配置OpenFlow實例的Datapath ID。
datapath-id id
缺省情況下,OpenFlow實例的Datapath ID由實例ID與設備橋MAC組成,其中前16個比特為實例ID,後48個比特為設備橋MAC。
Datapath ID用來在唯一標識OpenFlow實例,不同OpenFlow實例的Datapath ID不能相同。
僅接口類型的OpenFlow實例支持配置OpenFlow實例與接口綁定。
對於VLAN類型的OpenFlow實例,需要注意的是:
· 一個VLAN僅能屬於一個OpenFlow實例,否則會導致流量無法正確處理。
· 如果配置的對應VLAN不存在,在激活實例時,設備將會自動創建該VLAN。
· 同一個接口所屬VLAN必須屬於同一OpenFlow實例,否則,控製器下發的不同實例的接口狀態消息會相互覆蓋。
· VLAN對應的VLAN接口不能配置BFD MAD檢測功能,該功能的相關內容請參見“虛擬化技術配置指導”中的“IRF”。
(1) 進入係統視圖。
system-view
(2) 進入OpenFlow實例視圖。
openflow instance instance-id
(3) 配置OpenFlow實例的類型。
classification global
缺省情況下,未配置OpenFlow實例的類型。
帶內管理VLAN內的流量進行正常轉發,用於OpenFlow設備與控製器建立安全通道。
僅在帶內管理VLAN的接口不屬於OpenFlow接口。
對於全局類型的OpenFlow實例,通過管理以太網接口之外的接口連接控製器時,需要將該接口所屬VLAN配置為帶內管理VLAN。
(1) 進入係統視圖。
system-view
(2) 進入OpenFlow實例視圖。
openflow instance instance-id
(3) 配置帶內管理VLAN。
in-band management vlan { vlan-id [ to vlan-id ] } &<1-10>
缺省情況下,未配置帶內管理VLAN。
(1) 進入係統視圖。
system-view
(2) 進入OpenFlow實例視圖。
openflow instance instance-id
(3) 配置控製器連接模式。
controller mode { multiple | single }
缺省情況下,控製器連接模式為Multiple模式。
配置該功能後,交換機不再向控製器上送對應VLAN接口或VXLAN中的VSI(Virtual Switch Instance,虛擬交換實例)虛接口的信息。
(1) 進入係統視圖。
system-view
(2) 進入OpenFlow實例視圖。
openflow instance instance-id
(3) 配置禁止上送控製器的端口類型。
forbidden port { vlan-interface | vsi-interface } *
缺省情況下,未配置禁止上送控製器的端口類型,即所有接口類型都上送控製器。
新配置或修改OpenFlow實例後,需要激活實例使配置生效。重新激活實例時,交換機會斷開與所有控製器的連接,清除已下發的流表,更新能力集,重新與控製器建立連接。
(1) 進入係統視圖。
system-view
(2) 進入OpenFlow實例視圖。
openflow instance instance-id
(3) 激活OpenFlow實例。
active instance
缺省情況下,OpenFlow實例處於未激活狀態。
配置OpenFlow實例屬性時,無需激活OpenFlow實例即可生效。
(1) 進入係統視圖。
system-view
(2) 進入OpenFlow實例視圖。
openflow instance instance-id
(3) 配置OpenFlow實例的描述信息。
description text
缺省情況下,未配置OpenFlow實例的描述信息。
(4) 配置OpenFlow定時器相關參數。
¡ 配置連接檢測定時器。
controller echo-request interval interval
缺省情況下,連接檢測定時器的值為5。
¡ 配置重連定時器。
controller connect interval interval
缺省情況下,重連定時器的值為60。
(5) 配置MAC地址相關功能。
¡ 配置OpenFlow實例對應的VLAN禁止MAC地址學習。
mac-learning forbidden
缺省情況下,OpenFlow實例對應的VLAN允許MAC地址學習。
帶內管理VLAN中配置的VLAN不受該功能限製。
輔助連接配置和主連接配置不做配置衝突檢查,如果輔助連接與主連接配置衝突,則無法建立輔助連接。
(1) 進入係統視圖。
system-view
(2) 進入OpenFlow實例視圖。
openflow instance instance-id
(3) 配置主連接。
controller controller-id address { ip ipv4-address | ipv6 ipv6-address } [ port port-number ] [ local address { ip local-ipv4-address | ipv6 local-ipv6-address } [ port local-port- number ] ] [ ssl ssl-policy-name [ access-control-policy acp-policy-name ] ] [ vrf vrf-name ]
源IP地址必須為OpenFlow實例中端口的IP地址,否則交換機和控製器之間無法建立連接。
(4) (可選)配置輔助連接。
controller controller-id auxiliary auxiliary-id transport { tcp | udp | ssl ssl-policy-name } [ address { ip ipv4-address | ipv6 ipv6-address } ] [ port port-number ]
輔助連接中未配置IP地址或接口號時,則IP地址或接口號與主連接一致。
fail-open mode { secure | standalone }
缺省情況下,連接中斷模式為Secure。
未開啟SSL服務器時,設備作為TCP/SSL客戶端主動連接控製器(SSL服務器);啟動SSL服務器之後,設備作為SSL服務器端被動等待控製器(SSL客戶端)連接。關於SSL的詳細介紹,請參見“安全配置指導”中的“SSL”。
配置該功能後,無需激活OpenFlow實例即可生效。
不能通過重複執行本命令修改OpenFlow實例啟動的SSL服務器。如需修改,請先通過undo listening port命令刪除OpenFlow實例啟動的SSL服務器,再執行listening port命令重新啟動SSL服務器。
(1) 進入係統視圖。
system-view
(2) 進入OpenFlow實例視圖。
openflow instance instance-id
(3) 配置OpenFlow實例作為SSL服務器監聽控製器。
listening port port-number ssl ssl-policy-name
缺省情況下,未配置OpenFlow實例作為SSL服務器監聽控製器。
開啟OpenFlow模塊的告警功能後,該模塊會生成告警信息,用於報告該模塊的重要事件。生成的告警信息將發送到設備的SNMP模塊,通過設置SNMP中告警信息的發送參數,來決定告警信息輸出的相關屬性。
有關告警信息的詳細介紹,請參見“網絡管理和監控配置指導”中的“SNMP”。
(1) 進入係統視圖。
system-view
(2) 開啟OpenFlow模塊的告警功能。
snmp-agent trap enable openflow [ connect-state ]
缺省情況下,OpenFlow的告警功能處於開啟狀態。
在完成上述配置後,在任意視圖下執行display命令可以顯示配置後OpenFlow的運行情況。
表1-8 OpenFlow顯示和維護
操作 |
命令 |
顯示OpenFlow實例的詳細信息 |
display openflow instance [ instance-id ] display openflow instance oap-instance |
顯示OpenFlow實例的控製器信息 |
display openflow instance instance-id { controller [ controller-id ] | listened } display openflow instance oap-instance listened |
顯示OpenFlow實例的輔助連接信息 |
display openflow instance instance-id auxiliary [ controller-id [ auxiliary auxiliary-id ] ] |
顯示OpenFlow實例的流表信息 |
display openflow instance instance-id flow-table [ table-id ] display openflow instance oap-instance flow-table [ table-id ] |
顯示OpenFlow實例的Group表信息 |
display openflow instance instance-id group [ group-id ] display openflow instance oap-instance group [ group-id ] |
顯示OpenFlow實例的Meter表信息 |
display openflow instance instance-id meter [ meter-id ] display openflow instance oap-instance meter [ meter-id ] |
顯示OAP的Context信息 |
display openflow oap-context [ oap-interface oap-interface-type oap-interface-number | in-interface in-interface-type in-interface-number | out-interface out-interface-type out-interface-number ] |
顯示OpenFlow實例的概要信息 |
display openflow summary |
清除控製器發送和接收報文的統計計數 |
reset openflow instance instance-id { controller [ controller-id ] | listened } statistics |
· 創建OpenFlow實例1,使設備所有業務接口都屬於OpenFlow實例1,並激活實例。
· 配置OpenFlow實例1連接的控製器,用來控製Device上的流量轉發。
圖1-6 OpenFlow配置組網圖
# 創建實例1並配置該實例的類型為全局類型。
[Device] openflow instance 1
[Device-of-inst-1] classification global
# 配置控製器1的IP地址為192.168.49.49,並激活實例。
[Device-of-inst-1] controller 1 address ip 192.168.49.49
[Device-of-inst-1] active instance
# 顯示實例詳細信息。
[Device-of-inst-1] display openflow instance 1
Instance 1 information:
Configuration information:
Description : --
Active status : Active
Inactive configuration:
None
Active configuration:
Classification: Global(Standard)
...
Port information:
Route-Aggregation1
Active channel information:
Controller 1 IP address: 192.168.49.49 port: 6633
(1) VLAN匹配
在使用VLAN劃分OpenFlow實例的情況下,對VLAN的匹配存在一定的限製。
表1-9 VLAN匹配項列表
VLAN |
MASK |
匹配的報文 |
- |
- |
匹配在OpenFlow實例VLAN內的所有報文 |
0 |
- |
匹配無VLAN tag的報文,但是入接口的PVID必須在OpenFlow實例內 |
0 |
有值 |
不支持 |
有效VLAN |
-/有值 |
不支持 |
0x1000 |
-/非0x1000的值 |
不支持 |
0x1000 |
0x1000 |
匹配有VLAN tag的報文,但是該VLAN tag必須在OpenFlow實例內 |
有效VLAN | 0x1000 |
-/有值 |
根據VLAN+MASK進行匹配,前提是VLAN+MASK必須在OpenFlow實例內 |
其他 |
其他 |
不支持 |
(2) 協議報文的匹配
對於協議報文,一旦相關的協議配置使能後,協議報文不會進入OpenFlow轉發處理,仍然由相關協議進行處理,但是對於LLDP報文比較特殊,對於LLDP報文的使用限製請參見1.9.5 。
(3) MetaData的匹配
MetaData用於流表間的匹配信息傳遞,在非第一級流表支持下發MetaData的匹配,如果控製器在第一級流表下發了MetaData的匹配項,Switch返回不支持。
(1) Clear actions的限製
¡ 單級流表的情況下,支持Clear actions。
¡ 多級流表的情況下,僅第一級流表支持Clear actions與其他instruction的動作配合,後續流表僅支持單獨下發Clear Actions。
(2) Apply actions的限製
不支持Action List中包含多個Output的情況,僅支持一個Output時,請參見1.9.2 。
(3) Write MetaData/MetaMask
在且僅在非最後一級流表的情況下,Switch支持Write MetaData/MetaMask的操作,否則Switch返回不支持。
(4) Go To Table
在且僅在非最後一級流表的情況下,Switch支持Go To Table的操作,否則Switch返回不支持。
OpenFlow Switch設備整合Action Set和Action List為Action Set,其整合原則如下。
Action List和Action Set中的Action(除Output和Group外)如果不存在衝突,則全部保留為Action Set;如果存在衝突,則以Action Set的動作替換Action List中的動作(其原因是Action List要執行在Action Set之前)。
· 當Action List和Action Set中都存在一個Output的Action時,Action List中的Output發送的報文不會對報文進行任何修改,其執行順序最優,Action Set中的Ouput會執行Action List和Action Set中的所有修改。
· 當Action List和Action Set中僅存在一個Output的Action時,該Output為報文出接口,執行順序按照Action Set的順序。
· 當Action List中存在一個Output的Action,Action Set中存在一個Group的Action(Output的Action存在與否都可以)時,Action List中的Output發送的報文不會對報文進行任何修改,Group在Action Set中。
· 其他情況不支持。
在Packet out消息中Output為Normal、Local、In port或To Controller時,入接口隻能是設備上的物理接口或者邏輯接口,不能是OpenFlow保留口。
在Packet Out消息中如果同時存在Buffer ID和報文,OpenFlow Switch隻會獲取Buffer ID對應的緩存報文進行處理,忽略消息中攜帶的報文。
如果Packet Out消息中的報文沒有VLAN tag,則OpenFlow Switch將入接口的PVID作為報文所在的VLAN進行轉發處理。
· 如果入接口不是設備上的接口,且Output是設備上的接口,則使用出接口的PVID發送。
· 如果入接口不是設備上的接口,且Output是保留口Flood和All,請參見“4. 出接口限製”的處理。
Packet Out中指定的Output為保留口的Flood和All時的處理機製。
(1) 出接口為Flood的情況
¡ Packet Out的報文攜帶VLAN tag,則報文在該VLAN內廣播。
¡ Packet Out的報文沒有攜帶VLAN tag,但是入接口是OpenFlow Swtich上的接口,則報文在入接口的PVID內廣播。
¡ Packet Out的報文沒有攜帶VLAN tag,並且入接口是Controller,則報文在所有OpenFlow接口發送一份。
(2) 出接口為All的情況
¡ Packet Out的報文攜帶VLAN tag,則報文在該VLAN內廣播。
¡ Packet Out的報文沒有攜帶VLAN tag,無論入接口是什麼接口,報文都在所有OpenFlow接口發送一份。
對於Packet in消息中的報文:
· 上送時如果其VLAN tag與該報文入接口的PVID相同,那麼該報文的VLAN tag會被刪除。
· 上送時如果其VLAN tag與該報文入接口的PVID不同,那麼該報文的VLAN tag不會被刪除。
· 對於上送原因是No Match的報文支持緩存,緩存大小是1K個報文。
· 對於其他上送原因的報文不支持緩存,整個報文都會被上送,並且Cookie是全F。
OpenFlow網絡可以通過LLDP發現拓撲,對於匹配LLDP報文存在如下限製:
· 設備上必須全局使能LLDP。
· LLDP報文匹配後上送控製器不受實例限製,隻要收到報文的接口在OpenFlow實例內,並且實例內有匹配LLDP報文並上送控製器的表項,則LLDP報文就會在該實例上送控製器。
· Switch在激活後缺省會生成Table Miss表項,其動作是Drop,此表項不能被控製器通過Modify的動作修改,不能被控製器通過Mulipart消息查詢到,僅能由控製器通過Add進行添加Table Miss的動作進行修改。
· Table Miss表項僅能通過嚴格匹配進行修改和刪除,在非嚴格匹配的情況下,即使匹配項是通配也不能夠操作Table Miss表項。
· Table Miss表項被刪除後,會生成缺省的Table Miss表項,其動作是Drop。
在非嚴格匹配的情況下,不支持通過match域為通配修改所有普通流表項。
OpenFlow Switch支持兩種類型的Flow Table,MAC-IP類型和Extensibility類型。允許通過命令行指定Table ID,Flow Table會根據Table ID進行排序。Flow Table需要重新激活後才能生效。
MAC-IP流表是使用MAC地址表項和路由表項實現Flow Table;Extensibility流表使用ACL實現Flow Table。
必選的能力是控製器下發時必須攜帶的匹配或者動作項,可選能力是下發時可攜帶可不攜帶,如果不攜帶的話由Switch添加缺省的匹配或者動作項。
二層表項使用MAC地址表實現,其支持能力如表1-10所示。
表1-10 MAC-IP流表二層表項支持能力
支持項 |
能力 |
必選匹配項 |
· VLAN · 單播目的MAC地址 |
可選匹配項 |
無 |
必選動作項 |
指定出接口 |
可選動作項 |
· Go to table(在多級流表存在的情況下,即使控製器不下發,Swtich上缺省下發該動作) · Write Meta(在多級流表存在的情況下,即使控製器不下發,Switch上缺省下發目的MAC匹配的MetaData) |
三層表項使用路由表實現,其支持能力如表1-11所示。
表1-11 MAC-IP流表三層表項支持能力
支持項 |
能力 |
必選匹配項 |
· VLAN · 以太網類型eth_type · 單播目的IP地址 · 單播目的MAC地址(必須是匹配VLAN對應的VLAN接口的MAC地址) |
可選匹配項 |
無 |
必選動作項 |
· 指定出接口 · 修改VLAN · 修改目的MAC地址 |
可選動作項 |
· 修改源MAC地址(源MAC地址會修改為目的出接口所在VLAN對應的VLAN接口的MAC地址) · TTL減1 · Go to table(在多級流表存在的情況下,即使控製器不下發,Swtich上缺省下發該動作) · Write Meta(在多級流表存在的情況下,即使控製器不下發,Switch上缺省下發目的IP地址匹配的MetaData) |
VXLAN二層表項使用MAC地址表實現,其支持能力如表1-12所示。
表1-12 MAC-IP流表VXLAN二層表項支持能力
支持項 |
能力 |
必選匹配項 |
單播目的MAC地址 |
可選匹配項 |
無 |
必選動作項 |
· 指定TUNNEL出接口 · 指定TUNNEL ID |
可選動作項 |
· Go to table(在多級流表存在的情況下,即使控製器不下發,Swtich上缺省下發該動作) · Write Meta(在多級流表存在的情況下,即使控製器不下發,Switch上缺省下發目的MAC匹配的MetaData) |
VXLAN三層表項使用路由表實現,其支持能力如表1-13所示。
表1-13 MAC-IP流表VXLAN三層表項支持能力
支持項 |
能力 |
必選匹配項 |
· 以太網類型eth_type · 單播目的IP地址 |
可選匹配項 |
無 |
必選動作項 |
· 指定TUNNEL出接口 · 指定TUNNEL ID · 修改目的MAC地址 |
可選動作項 |
· Go to table(在多級流表存在的情況下,即使控製器不下發,Swtich上缺省下發該動作) · Write Meta(在多級流表存在的情況下,即使控製器不下發,Switch上缺省下發目的IP地址匹配的MetaData) |
MAC-IP流表的Flow Entry有一定的限製,控製器需要遵循這些限製下發表項,否則可能會造成轉發錯誤。
二層表項的限製如表1-14所示。
表1-14 MAC-IP流表二層表項限製
表項類型 |
限製 |
匹配項限製 |
目的MAC地址不是本機MAC地址 |
動作項限製 |
出接口屬於匹配的VLAN |
三層表項的限製如表1-15所示。
表1-15 MAC-IP流表三層表項限製
表項類型 |
限製 |
匹配項限製 |
· 匹配的VLAN所對應的VLAN接口UP · 目的MAC地址是匹配VLAN對應的VLAN接口的MAC地址 · 目的IP地址不是本機IP地址 |
動作項限製 |
· 指定出接口屬於目的VLAN · 目的MAC地址不是本機MAC地址 · 如果修改源MAC地址,源MAC地址必須是目的出接口所在VLAN對應的VLAN接口的MAC地址 |
三層表項能夠下發的前提是匹配VLAN所對應的VLAN接口存在並且處於UP狀態,且VLAN接口會作為OpenFlow接口上報(包括了VLAN接口的鏈路狀態和MAC地址),在VLAN接口刪除時同時也會上報給控製器,需要由控製器刪除對應的三層流表項,因此需要控製器保證三層表項的正確性,Switch端不對三層表項的匹配項限製進行檢查。
VXLAN二層表項的限製如表1-16所示。
表1-16 MAC-IP流表VXLAN二層表項限製
表項類型 |
限製 |
匹配項限製 |
目的MAC地址不是本機MAC地址 |
動作項限製 |
· 出接口必須為存在的TUNNEL接口 · 指定的TUNNEL ID(VNI)對應的VXLAN必須存在 |
VXLAN三層表項的限製如表1-17所示。
表1-17 MAC-IP流表VXLAN三層表項限製
表項類型 |
限製 |
匹配項限製 |
目的IP地址不是本機IP地址 |
動作項限製 |
· 出接口必須為存在的TUNNEL接口 · 指定的TUNNEL ID(VNI)對應的VXLAN和VSI必須存在 · 目的MAC不是本機的MAC地址 |
MAC-IP流表的Table Miss支持下列Output Action:
· Go To Table:進入下一級流表;
· Drop:丟棄報文;
· Controller:報文上送控製器;
· Normal:報文正常轉發。
在支持MAC-IP流表的情況下,Switch支持Controller獲取和刪除動態MAC地址表項。
控製器可以通過指定VLAN、單個MAC或者單個MAC與VLAN來獲取和刪除動態MAC地址表項。
MAC-IP流表和Extensibility流表通過MetaData/Mask可以實現多級流表。
MAC-IP流表支持Write MetaData/Mask,Extensibility流表支持Match MetaData/Mask。
MetaData Mask每個Bit表示不同的含義,MetaData中對應的Bit位置位表示匹配,未置位表示通配,具體參見表1-18。
MetaData Mask Bit |
含義 |
MetaData |
Bit 0 |
目的MAC |
1,置位,表示匹配到目的MAC |
0,未置位,表示未匹配到目的MAC |
||
Bit 1 |
源MAC |
1,置位,表示匹配到源MAC |
0,未置位,表示未匹配到源MAC |
||
Bit 2 |
目的IP |
1,置位,表示匹配到目的IP |
0,未置位,表示未匹配到目的IP |
||
其他 |
保留 |
保留 |
Extensibility流表和MAC-IP流表配合時:
· 當Extensibility流表中的Output動作不是Normal時,MAC-IP流表不會生效,所有動作根據Extensibility流表進行處理;
· 當Extensibility流表中的Output動作是Normal時,Output動作根據MAC-IP流表進行處理,其餘動作根據Extensibility流表進行處理。
不同款型規格的資料略有差異, 詳細信息請向具體銷售和400谘詢。H3C保留在沒有任何通知或提示的情況下對資料內容進行修改的權利!