天天看點

OpenFlow Switch Specification 1.3.0 (二)

五、OpenFlow 表

        這一部分描述了構成流表群組表的元件,同時也包括了流表“比對”的機制和“動作”處理。

5.1 管線處理流程

        服從OpenFlow協定的交換機可以分為兩大類:一類是 OpenFlow-only 的,另一類的 OpenFlow-hybrid。  OpenFlow-only交換機隻支援 OpenFlow 操作,在這種交換機中所有的資料包都是由 OpenFlow 管線來處理的,否則不可以被處理。

        OpenFlow-hybrid 交換機既支援 OpenFlow 操作,也支援普通的(normal)以太網交換操作(ethernet switching operation);例如,傳統的 L2 以太網交換機,VLAN 隔離,L3 路由(IPv4路由,IPv6路由……),ACL 和 QoS 處理流程。這類交換機除了定位為 OpenFlow 類别外,還應該再提供一個分類機制,以說明交換機将流量路由到了 OpenFlow 管線還是普通管線。例如,一個交換機可以通過使用 VLAN 标簽或者資料包的輸入端口來決定如何處理此資料包:是利用這種管線還是那種管線,或者是将所有的資料包發送到 OpenFlow 管線。這個分類機制不屬于此文檔的說明範圍。一個 OpenFlow-hybrid 交換機應該也允許通過 NORMAL 和 FLOOD 保留端口,來實作将資料包從 OpenFlow 管線傳遞給普通管線(normal pipeline 即傳統網絡的處理方式)的方式。(見第4.5章節)

        每一個 OpenFlow 交換機中的 OpenFlow 管線包含多個流表,每一個流表包含多個流表項。OpenFlow 管線處理流程定義了資料包如何與這些流表互動(見圖2)。一個交換機至少需要一個流表,也可以有多個流表。一個 OpenFlow 交換機隻有一個流表是合法的,在這中情況下管線處理流程就極大的簡化了。

OpenFlow Switch Specification 1.3.0 (二)

         OpenFlow 交換機中的流表是連續編号的,編号從0開始。“管線處理流程”通常從第一個流表開始:即,資料包首先比對0号流表的流表項。其它流表的使用要根據第一個流表比對到的結果而定。

        當資料包被流表處理時,資料包與流表中的流表項比對,進而選擇一個流表項(見5.3章節)。如果比對到一個流表項,那麼這個流表項中包含的指令集(instruction set)就會被執行,這些指令可以明确地将資料包轉發給另一個流表(利用 Goto指令,見5.9章節),這個比對的過程以此類推。“流表項”隻能将資料包轉發給比目前流表編号大的流表, 換言之,就是說管線處理流程隻能向前,不能後退。顯而易見,管線的最後一張流表的流表項是不能有Goto指令的。如果比對到的流表項不再将資料包轉發給另一個流表,那麼管線處理流程就在這張表停止。當管線處理流程停止,資料包就被與它關聯的動作集(action set)處理,通常這個動作集是做轉發操作(見5.10章節)。

        如果一個資料包在一個流表中沒有比對到流表項,這種情況叫做“表丢失”(table miss)。“表丢失”的處理行為依賴于“表的配置”(table configuration)(見5.4章節)。 流表中,名為 table-miss 的流表項可以指定如何處理沒有比對到的資料包:可以選擇的操作包括“删除資料包”,“發送給另一個流表”,或者“通過控制通道(control channel),用packet-in消息把資料包發送給控制器(見6.1.2章節)。

5.2 流表

        流表由流表項組成。 每一個流表項(見表1)包含:         

OpenFlow Switch Specification 1.3.0 (二)

* match fields:用來比對資料包。這個字段由“輸入端口”和“資料包信頭”,以及由前一個流表指定的“中繼資料”(此項為可選項)構成。 * priority:流表項的比對優先權 * counters:當比對到資料包時,更新此項 * instructions:用來修改動作集(action set)或者管線處理流程 * timeouts:流表項最大的空閑時間,超過此時間流表項失效 * cookie:由控制器選擇的不透明的資料值(data value)。可以被控制器用作“過濾流政策”,“修改流”(flow modification)和“删除流”(flow deletion),當處理資料包時不使用此字段。 (批注:我覺得這裡的“修改流”和“删除流”中的“流”指的是“流表項”)

        一個流表項由它的比對字段(match fields)和優先級(priority)确定:比對字段和優先級一起辨別流表中唯一的 一條流表項。當流表項中的比對字段 通配所有字段(即所有字段都忽略不考慮)并且擁有優先級0時,這種流表項被稱作“table-miss”流表項(見5.4章節)。

5.3 比對

OpenFlow Switch Specification 1.3.0 (二)

        當交換機收到資料包,将執行圖3所示的流程。交換機首先在第一個流表中查詢,根據管線處理流程,也可能執行其他流表的查詢(見5.1章節)。

        用于包比對的字段是從資料包中抽取的。根據資料包的類型,“包比對字段” (packet match fields)用于表查詢;其中,典型的可供比對的字段包括:“各類資料包信頭”例如以太網原位址或者IPv4目的位址(見A.2.3)。除了資料包的標頭外,也可依據資料包的“輸入端口”和“中繼資料字段”(metadata fields)進行比對。中繼資料可以用來在交換機中不同的表之間傳遞資訊。“包比對字段”代表的是資料包的目前狀态,如果流表中之前使用的動作(actions)有用到Apply-Actions,以此來改變標頭,這些改變将 展現在包比對字段中。

        如果資料包的“包比對字段”的值與已經定義在流表項中的值比對,那麼資料包就比對到一條流表項。如果流表項字段有 ANY 值(字段忽略),流表項将比對資料包信頭中的所有值。如果交換機可以支援“包比對字段”任意掩碼,那麼這些掩碼将有利于更加精确地訓示比對。

        資料包比對流表時,隻有比對到的擁有最高優先級的流表項才會被選中。其流表項相關的計數器必須更新,其中的指令必須執行。如果有多個比對到的流表項,且有相同的優先級,這種情況下選擇哪一個流表項執行并未明确定義。這種情況隻會發生在控制器的應用編寫者,未在“流模式消息”(flow mod messages)中設定 OFPFF_CHECK_OVERLAP 位,且增加了重疊的流表項。

        當交換機配置包含了 OFPC_FRAG_REASM 标記時(見A.3.2),IP片段必須重新組裝,而後才能執行“管線處理流程”。

        這個版本的說明書并沒有定義當交換機收到“畸形資料包”以及“損壞的資料包”的處理行為。          5.4 Table-miss

        每一個流表必須支援一條“table-miss”流表項,用來處理“表丢失”。當資料包無法比對流表中其它所有流表時,此時“表丢失”流表項得以執行(見5.1章節);并且,多數情況下,“表丢失”的“動作”是将資料包發送到控制器上。其它的操作還有删除資料包,或者直接将資料包發送到接下來的流表中。

        table-miss 流表項是由它的比對字段和優先級确定的(見5.2章節),它的“比對字段”通配所有的字段(即忽略所有字段)并且有最低的權限(0)。table-miss 流表項的比對可能落在流表所支援的正常比對的範圍之外,例如,一個精确的流表可能不支援某些多餘的流表項,但是必須支援通配所有字段的“table-miss”流表項。“table-miss”流表項可能沒有與通常流表項一樣的能力(見A.3.5.5)。交換機的設計者,設計“table-miss”流表項處理流程時,最好至少支援本文檔所述的幾個能力:發送資料包到控制器,删除資料包或者将資料包發送到接下來的流表。

        “table-miss”流表項各方面的表現基本與其他的流表項一樣:它并不是預設就在流表中的,控制器可以随時添加或者删除它(見6.4章節),且他也可能發生逾時而被删除(見5.5章節),它的作用就是用來比對流表中其它所有流表不能比對的資料包(見5.9章節)。如果“table-miss”流表項通過使用 CONTROLLER 端口(見4.5章節),直接将資料包發送給控制器,那麼“packe-in”消息發生的原因,必須被識别為“table-miss”(見A。4.1)。

        如果“table-miss”流表項不存在,預設條件下未比對的資料包應該删除掉(抛棄)。交換機可以利用“OpenFlow配置協定”來重新配置這個預設的操作,指定其它的行為。

5.5 流表項的删除

        流表項從流表中删除有兩種方式:一種是來自控制器的删除請求,另一種是通過交換機的逾時機制。

        交換機的“流過期”(flow expiry)機制是獨立于控制器執行的。它的執行根據的是流表項的狀态資訊和流表項的配置資訊。每一個流表項關聯有一個“idle_timeout”和一個“hard_timeout”。如果兩個值都非零,交換機必須注意流表項的“到達時間”(即流表項被插入到流表的時間),以便之後清除掉它。一個非零的“hard_timeout”字段使這條流表在給定的秒數後删除,無論它比對到多少的資料包都要删除。而“idle_timeout”字段的含義是,當此流表項在給定的秒數内沒有比對到資料包,則删除此流表項。交換機必須實作“流過期”(flow expiry),并且當這兩個設定的時間字段超過了時必須删除流表項。

        控制器可能主動地從流表中删除流表項,通過發送“delete”流表修改消息(flow table modification messages)(OFPFC_DELETE 或者 OFPFC_DELETE_STRICT 見6.4章節)實作。

        當一個流表項被删除,無論是交換機主動删除,還是“流過期”(flow expiry)機制,交換機必須檢查流表項的“OFPFF_SEND_FLOW_REM”标記。如果這個标記被設定,交換機必須給控制器發送“流删除消息”(flow removed message)。每一個“流删除消息”都包含了流表項的完整描述,其中有删除的原因(逾時或控制器删除),删除時流表項的存活時間,删除時流表項的統計資料。

5.6 組表

        組表由“組表項”(group entries)組成。指向“組”的流表項,使 OpenFlow 擁有了額外的轉發處理方式(例如,select和all)。

OpenFlow Switch Specification 1.3.0 (二)

        每一個組表項(見表2)由它的組辨別符所辨別,并且保含: * group identifier :一個32位的無符号整數,唯一的辨別這個“組”(group) * group type :用來決定“組語義”(group semantics)(見5.6.1章節) * counters :當資料包由此組處理,更新此字段 * action buckets :一個有序的“動作桶”(action buckets)清單,每一個動作桶(action bucket)包含一個動作的集合,這些“動作”用來執行和關聯參數。

5.6.1 組類型

        交換機不必支援所有的組類型,隻需要選擇下面标記有“必須”的去支援即可。控制器可以查詢交換機支援哪些“可選”組類型。

*必須: all :執行組中所有的“桶”(buckets)。使用這個組用來多點傳播或者廣播轉發。這種情況下,資料包會被高效地複制給每一個“桶”;資料包将被組中的每一個“桶”操作。如果一個“桶”明确地将一個資料包轉發到它的輸入端口,此時這個資料包的“拷貝”将被删除。如果控制器應用編寫者想把資料包發送到資料包的輸入端口,這個“組”應該另外再包含一個“桶”,此“桶”含有“輸出到保留端口 OFPP_IN_PORT”的動作。

*可選: select :執行組中的一個“桶”。基于一個“switch-computed selection”算法(例如,對使用者注冊的一些“元祖(tuple)”進行hash或者是簡單的“輪詢”),資料包被“組”中唯一的一個桶處理。所有的與此選擇算法有關的注冊及狀态都與OpenFlow無關。選擇算法盡量考慮到各“桶”的負載平等共享,也可以是基于“桶”的權重。當一個被標明的組的“桶”,其指定的端口關閉的話,交換機應當“桶選擇”(bucket selection)到剩餘(remaining)的“桶集”(set,應該是桶的集合之意),而不是将要發送到這個端口的資料包删除。這個樣做可以減少鍊路斷線以及交換機掉線帶來的危害。

*必須: indirect :執行組中定義的“桶”。這個組僅支援一個單獨的“桶”。允許多個“流表項”或“組”指向一個共同的組辨別符,支援快速高效的收斂。(例如,IP下一跳轉發)。這個組類型實際上等同于一個隻有一個“桶”的“all”類型的組。

*可選: fast failover :執行第一個存活的(live)“桶”。每一個“動作桶”(action bucket)與一個特定的端口和(或)組(這個組控制着它的生命期)關聯。這些“桶”将依據此組定義的順序而被評估,并且關聯着“live port/group”的第一個“桶”将被選。這種組類型可以使交換機不需要詢問控制器的情況下而改變轉發方式。如果沒有存活的(live)“桶”,那麼資料包就會被删除。這種組類型必須實施一個“存活狀态機制”(liveness mechanism)(見6.5章節)。

5.7 計量器表(meter table)

        一個計量表由“計量器表項”(meter table)組成,定義每一條流(per-flow)的計量。Per-flow 計量允許 OpenFlow實施各種簡單的Qos操作,例如,速率限制(rate-limiting),也可以結合每一個端口(per-port)的隊列(queues)(見5.12)來實施複雜的 QoS 架構,例如 DiffServ。

        一個 “計量器”(meter ) 測量配置設定給它的包速率,如此來控制那些資料包的速率。計量器直接與流表項綁定(與不直接綁定到端口上而綁定到端口上的隊列的方式相反)。任何流表項都可以在它的“指令”裡指定一個“計量器”(見5.9章節),這個計量器用來測量和控制所有綁定到它上面的流表項集合的總的速率。多個“計量器”可以被用在同一個流表中,但是要用在無交集的流表項集合(即流表項不會比對到相同的資料包)。多個流表項也可以被用到相同的“資料包聚合”上,隻要把“計量器”用到處理此“資料包集合”的下一個流表中即可。

OpenFlow Switch Specification 1.3.0 (二)

        每一個“計量器表項”(meter entry)(見表3)由它的計量器辨別所辨別,并且包含: *meter identifer:一個32位無符号整形數,唯一的辨別這個“計量器” *meter bands:一個“計量器帶寬”(meter bands)的無序清單,每一個“計量器帶寬”指定“帶寬”的速率和處理資料包的方式。 *counters:當資料包被一個“計量器”處理時,更新此值

5.7.1 計量器帶寬

        每一個“計量器”可以有一到多個“計量器帶寬”。每一個“帶寬”訓示出應用此“帶寬”的速率及資料包應該如何處理地的方法。資料包的處理依據的是單獨的一個“計量器帶寬”目前測量到的“計量器”速率。“計量器”執行“計量器帶寬”(meter band)處理時,是目前測量到的計量器”速率超過的配置的最高速率。如果目前速率低于指定的“計量器帶寬”速率,那麼就沒有“計量器帶寬”處理可執行。

OpenFlow Switch Specification 1.3.0 (二)

                 每一個“計量器帶寬”(見表4)由它的速率所辨別,其中包含: * band type:定義包如何處理 * rate:供“計量器”用來選擇“計量器帶寬”,定義了使用此“計量器帶寬” 時的最低速率。  *counters:當“計量器帶寬”被使用來處理資料包時,更新此計數 * type specific arguments:一些“計數器帶寬”類型有的可選參數

        在這個文檔說明中,沒有“必須”的“帶寬類型”(band type)。控制器可以查詢交換機支援下列哪些“可選”的“帶寬類型”: *可選: drop:删除(或抛棄)資料包。可以被用來定義一個“速率限制”帶寬。 *可選: dscp remark(差分服務代碼點重标記 ):減少删除具IP頭部具有優先DSCP字段的資料包。能用來定義一個簡單的 DiffServ(區分服務) 政策器。

5.8 計數器

       每一個流表(flow table)、流表項(flow entry)、端口(port)、隊列(queue)、組(group)、組桶(group bucket)、計量器(meter)和計量器帶寬(meter band)都維護着一些計數器(counters) 。服從 OpenFlow 的計數器可能是由軟體實作,通過輪詢有所限制的硬體計數器來維護。表5 涵蓋了由 OpenFlow 說明書所定義的計數器。交換機沒有必要支援所有的計數器。隻有那些在表5中标注了“必須”的才必須有。

OpenFlow Switch Specification 1.3.0 (二)
OpenFlow Switch Specification 1.3.0 (二)
OpenFlow Switch Specification 1.3.0 (二)
OpenFlow Switch Specification 1.3.0 (二)

        “Duration”統計的是流表項,一個端口,一個組,一個隊列或者一個計量器被安裝到交換機中的時間。必須以秒的精度跟蹤。表5中定義的“Receive error”字段用來統計所有接收錯誤以及沖突錯誤。其它在表5中提到的類似計數器其意義大緻相似。

        計數器是一個無符号整數,它循環增長,沒有溢出訓示器。如果給交換機中某個計數器指定的數值太大,那麼計數器的值就會被設定為此字段的最大值(其二進制形式與有符号數的 -1 一緻)。

5.9 指令

        每一個流表項包含一些指令,當有資料包比對到流表項的時候就會執行它們。這些指令導緻資料包、set 動作、“管線處理流程”的改變。

        交換機并不是必須要支援所有的指令類型,隻有下列這些标記了“必須指令”(required instruction)的才必須有。控制器也可以查詢交換機支援哪些可選指令(optional instruction)。

*optional instruction: Meter  meter_id:将資料包導向到一個指定的計量器。根據計量器的速率規則,這個資料包可能被删除。 *optional instruction: Apply-Actions action(s):立即應用指定的action(s),對 Action set不做任何改變。這個指令可以在兩個表之間用來修改資料包,或者執行多個同種類型的動作。action(s)在action list(見5.11)中列出。 *optional instruction: Clear-Actions action(s):立即清除 action set 中的所有動作。 *required instruction: Write-Actions action(s):把指定的動作(action(s))添加到目前的 action set中(見5.10)。如果此動作在目前動作集合中存在,将其重寫,否則添加這個動作。 *optional instruction: Write-Metadata metadata / mask:将掩碼的中繼資料(masked metadata value)值寫入中繼資料字段(metadata field)。這個掩碼訓示出中繼資料寄存器的哪些位需要被修改(例如,new_metadata = old_metadata & ~mask | value & mask)。 *required instruction: Goto-table next-table-id:訓示管線處理流程的下一個表。table-id必須比目前的table-id大。最後一個表的流表項不能包含此指令(見5.1章節)。

        一個流表項的指令集所能包含的指令最大數量為指令各種類型的數量。指令集合中指令執行的順序與清單中指定的順序一緻。在實際中,唯一的限制是: Meter 指令在  Apply-Actions 指令之前執行, Clear-aActions 指令在 Write-Actions 指令之前執行, Goto-Table指令最後執行。

        交換機可以拒絕一個流表項的安裝,這種情況發生在當此流表項的指令不能被交換機執行時。在這種情況下,交換機必須傳回一個“unsupported flow error”(見6.4章節)。流表不可能支援所有比對、所有指令以及所有動作(actions)。

5.10 動作集合(Action Set)

        動作集與任一資料包都有關。這個集合預設情況下是空的。流表項可以通過使用“Write-Action”指令或者“Clear-Action”指令來修改與“比對”相關的動作集。動作集于流表之間傳輸。當流表項的指令中不含“Goto-Table”指令,“管線處理流程” 停止後,此資料包的“動作集”裡的“動作”就開始執行。

        一個“動作集”至多每一種“動作類型”(type)包含一個“動作”。“set-field”動作(actions)由它們的字段類型(field types)辨別,是以,動作集所能包含的“set-field”動作的數量與字段類型的數量有關(例如,多個字段可以被設定)。當需要多個相同的類型的動作時,例如,插入(pushing)多個 MPLS 标簽或者彈出(popping)多個 MPLS 标簽時,“Apply-Actions”指令可以用到(見5.11章節)。

        動作集中的動作是按照下面指定的順序執行的,與它們被添加到動作集中的先後無關。如果動作集中含有“組動作”,“動作桶”中的動作也要應用以下的執行順序。交換機可能會通過使用“Apply-Actions”指令, 來支援以任意的動作執行順序,執行“動作清單”中的動作。

1.  copy TTL inwards        :對資料包執行 copy TTL inward 動作(actions) 2.  pop                                :對資料包執行所有的 tag pop 動作 (actions) 3.  push-MPLS                    :對資料包執行 MPLS tag push 動作(action) 4.  push-PBB                       :對資料包執行 PBB tag push 動作(action) 5. push-VLAN                   :對資料包執行 VLAN tag push 動作(action) 6.  copy TTL outwards      :對資料包執行 copy TTL outwards 動作(action) 7. decrement TTL             :對資料包執行 decrement TTL 動作 8. set                                  :對資料包應用所有的 set-field 動作(actions) 9. qos                                 :對資料包應用所有的 QoS 動作(actions),例如 set_queue 10. group                           :如果指定了組動作,相應“組桶”中的動作也應該按這個順序執行 11. output                         :如果沒有指定組動作,對資料包執行 output 動作,轉發資料包

                動作集中的“output”動作最後執行。如果一個動作集指定了“output”動作和“group”動作,“output”動作就會被忽略,而“group”動作會搶占優先級。如果動作集中既沒有“output”動作,又沒有“group”動作被指定的話,資料包就會被删除。交換機支援的話,組(groups)的執行應該是遞歸的;一個 group bucket 可以指定另一個 group,總之,動作的執行會穿過所有由組配置(group configuration)指定的組(groups)

5.11 動作清單(Action List)

        “Apply-Actions”指令和“Packet-out”消息均包含“action list”。動作清單的語義與 OpenFlow 1.0 說明文檔保持一緻。動作清單中,動作(actions)的執行順序與清單中動作指定的先後順序一緻,并且是被直接應用的資料包上的。

        動作清單從第一個action開始執行,其餘的動作依次順序執行。動作執行的結果具有積累效果,如果動作清單中包含着兩個 “Push VLAN”動作,将會有兩個 VLAN 頭部被添加到資料包上。如果動作列中包含一個“output”動作,那麼就拷貝資料包,并将它按目前狀态發送到指定的端口。如果動作清單中包含“group”動作,那麼久拷貝此資料包,并對此拷貝的資料包執行相應的“group buckets”。

        執行完所有的“Apply-Actions”指令清單中的動作後,“管線操作”在此修改過的資料包上繼續執行(見5.1章節)。此資料包的“動作集”并沒有因為執行動作“清單”而改變。

5.12 動作(Actions)

        交換機不要求支援所有的動作類型(action types),有以下标記了“必須動作”的就行。控制器可以通過查詢交換機,來得知交換機支援哪些“可選動作”(optional action)。

必須動作: Output。Output action 轉發資料包到一個指定的 OpenFlow 端口(見4.1章節)。 OpenFlow 交換機必須支援轉發資料包到實體端口,交換機定義的邏輯端口以及必須的保留端口(見4.5章節)。

可選動作: Set-Queue 。Set-queue action 為資料包設定 queue id。當使用 Output action 讓資料包轉發到一個端口時,queue id 決定使用哪個 queue 來附加到這個端口,用隊列來排程和轉發此資料包。通過這種途徑,轉發行為由這個配置的隊列來代理,這樣可以提供基本的 服務品質(Qos)支援(見A.2.2)。

必須動作: Drop。沒有明确的 action 代表 drops。隻有那些 action set 中沒有 output actions 的資料包會被删除。删除的操作可以通過“清空 instruction sets”或者在“管線處理流程”中清空“action buckets”,或者執行“Clear-Actions”指令來實作。

必須動作: Group。通過指定的“組”處理資料包。具體的動作意義依賴于組的類型。

可選動作: Push-Tag/Pop-Tag。交換機可以支援 插入/彈出 标簽,如表6所示。為了有助于和現有網絡的融合,我們建議交換機支援 push/pop VLAN 标簽的功能。

新插入的标簽應該總是插入到最外層的合法位置。當一個新的 VLAN 标簽被插入,它應該是插入的最外層的标簽。其位置應該是在緊接在Ethernet 頭部之後,其它标簽之前。同樣的,當一個新的 MPLS 标簽被插入,它也應該是最外層的标簽, 在緊接在Ethernet 頭部之後,其它标簽之前的位置。

        當多個 push actions 被添加到資料包的 action set 時,這些動作會按照 action set 的規則來對資料包依次執行,首先是 MPLS,然後是 PBB,然後是 VLAN(見5.10章節)。當多個 push actions 被包含到一個 action list時,它們的執行順序按 動作清單中的先後順序(見5.11章節)。

Note:參考5.12.1章節擷取字段的預設值。

OpenFlow Switch Specification 1.3.0 (二)

可選動作: Set-Field。各種各樣的  Set-Field actions 是通過它們的字段類型來辨別的,用來修改資料包中相應的頭部字段值。而這個“動作”并不是必須的,如果支援重寫多種頭部字段,将會大大增強 OpenFlow 實施的可用性。為了有利于與現有網絡的融合,我們建議 VLAN 修改“動作”必須支援。Set-Field actions 應該總是應用到最外層的可用頭部(outermost-possible header)(例如,一個 “Set VLAN ID”動作總是設定最外層的 VLAN 标簽 ID),除非這個字段類型被明确指出。

可選動作:Change-TTL。各種 Change-TTL actions 用來修改資料包中的 IPv4 TTL,IPv6 Hop Limit 或者 MPLS TTL。然而,這個動作并不是必須的,如果有了表7中的那些“動作”就會極大的增強 OpenFlow 在路由功能方面的實施可用性。Change-TTL actions 應該總是應用到 最外層可用的頭部 (outermost-possible header)。

OpenFlow Switch Specification 1.3.0 (二)
OpenFlow Switch Specification 1.3.0 (二)

        OpenFlow 交換機檢查資料包的 IP TTL,以及 MPLS TTL ,若失效,則拒絕此資料包。 不需要為每一個資料包檢查失效 TTL ,但是必須每間隔很小一段時間對資料包執行 decrement TTL action。交換機經異步配置(見6.1.1章節),可能會 利用 packet-in 消息,通過控制通道,将 TTL 失效的資料包發送給控制器(見6.1.2章節)。

5.12.1 push action 的字段預設值

        表8中字段的值,當執行 push action 時應該從已經存在的外層頭部拷貝,這樣形成的新頭部作為更外層的頭部。若新表中相應的字段在頭部中不存在,則将它們的值置零。若不能通過 OpenFlow 的 set-field actions 來修改的字段值,則初始化時需要初始化為合适的協定值。

OpenFlow Switch Specification 1.3.0 (二)

        由 “push”生成的新頭部可能會被指定了合适字段的“set”action 重寫。

(轉載請注明出處: http://blog.csdn.net/gulansheng/article/details/46515641)

繼續閱讀