天天看點

openflow初學者入門筆記一(openflow 1.0 and openflow 1.3)

本文進行讨論的是openflow 1.0和openflow 1.3的基本知識

Overview:

Openflow 1.0:

安全通道+單張流表+ipv4

Openflow 1.3:

安全通道+多級流表(流水線pipeline)+組表+測量表+ipv6+.....

流(flow)

1.流由管理者定義,根據不同的流執行不同的政策

2.同一時間内,經過同一網絡并且具有相同屬性根據不同情況可以不同,例如我們可以規定通路同一個IP為一個流,也可以規定同一源目IP的資料為一個流或者同一個協定為一個流

3.所有資料都是以流為機關進行處理的。

流表(flow table)

1.流表最常用的動作:forward

                    discard(drop)

                    Next table

2.流表就是交換機裡的一張轉發表,類似交換機的MAC表和路由器的路由表。

3.每一個流表項都有各種動作

4.流表由一條條的流表項(路由條目)組成。

5.Openflow包含多個流表

6.流表由controller下發

流表項(flow entry):

Of1.0:Header Fields(標頭域)+Counters+Actions

Of1.3:Match Fields(比對字段)+Priority+Counters+Instructions+Timeouts+Cookie

Openflow1.0:

1.流表項:

openflow初學者入門筆記一(openflow 1.0 and openflow 1.3)

2.Header Fields(標頭域)的主要内容:  

openflow初學者入門筆記一(openflow 1.0 and openflow 1.3)

標頭域主要是不在分層簡單的說,就是除了進接口,傳統2層到4層的尋址資訊都出現在標頭域中(MAC,IP,PORT)

3.計數器Counters

主要對每張表,每個端口,每個流等進行計數,友善流量監管(例如經過這個端口有多少流量?比對這個流的資料包有多少了、這張表查找了多少次?)主要是将流量可視化

4.動作Actions

即是對比對到的流進行處理,傳統網絡中要不轉發要不丢棄,沒有第三種選擇,openflow1.0規定了必備動作(Require Action)和可選動作(Optional Actions)

5.必備動作-----轉發(Forward)

   ALL 轉發到所有出口(不包括入口)

   CONTROLLER 封裝并轉發給控制器

   LOCAL 轉發給本地網絡棧

   TABLE 對要發出的包執行流表中的動作

   IN_PORT 從入口發出

 必備動作---丢棄(Dorp)

   沒有明确指明處理行動表項的,所比對的所有分組預設丢棄

6.可選動作---轉發

 NORMAL 按照傳統交換機的2層或者3層進行轉發處理

 FLOOD 通過最小生成樹從出口泛洪發出,注意不包括入口

可選動作---入隊(Enqueue)

 将包轉發到綁定到某個端口的隊列中

可選動作----修改域(Modify-field)

 修改標頭内容

7 .Openflow與傳統網絡最大的差別:openflow可以對資料標頭部進行修改

8.流表比對(1.1版本):

openflow初學者入門筆記一(openflow 1.0 and openflow 1.3)

注釋:1.1版本中引入了多級流表的概念

      流表比對(table 0------->table n):

        比對到:執行相應動作

        未比對到:通過安全通道傳遞給控制器處理

Openflow1.3

1.流表項:

openflow初學者入門筆記一(openflow 1.0 and openflow 1.3)

    比對域                          優先級                  計數器                     指令                      超出時間              附屬屬性

    openflow使用多級流表,每張流表有獨立的序号,從序号最小的流表開始比對,每張流表由獨立的處理和動作。

2.比對域Match Fields

它是之前1.0的拓展,比對的内容除了2到4層的尋址資訊(MAC,IP,PORT),多了MPLS(城域網),IPV6,PBB,Tunnel ID等支援。1.0能比對12個資訊,1.3能比對39個資訊

3.優先級Priority

用于标志流表比對的優先順序,優先順序越高越早比對,預設優先級為0

4.計數器Counters

主要對每張表,每個端口,每個流等進行計數,友善流量監管,在原有1.0的基礎上,加入了對每一個組,每一個動作集(隊列)的計數

5.逾時時間Timeout

用于标志該流表項老化的時間,超過了時間限制就删除,節省了記憶體資源

6.附屬資訊Cookie

由控制器選擇的不透明資料值。控制器用來過濾流統計資料,流改變和流删除,但處理資料包時不能使用

7.指令Instructions:

 Require Instructions:

Write-Actions action(s):将制定的行動添加到正在運作的行動集中

Goto-Table next-table-id:指定流水線處理程序中的下一張表中的ID(流水線pipeline定義:多級流表的比對)

Apply-Actions action(s):立即執行指定的行動,而不改變指令集(。這個指令經常用來修改資料包,在兩個表之間或者執行同類型的多個行動的時候)

Optional Instructions:

Merter merter id:直接将計流量包丢棄

Clear-Actions:在行動集中立刻清楚所有的動作

Write-Meterdata meterdata/mask:在中繼資料區域紀錄中繼資料

動作Action

Require Action:

Outport:封包輸出到指定端口

Drop:丢棄

Group:用組表處理封包

 Optional Action:

Set-Queue:設定封包的隊列ID,為了QoS的需要

Push-Tag/Pop-Tag

Set-Field:設定封包標頭的類型和和修改標頭的值

Change-TTL:修改TTL的值

動作執行的順序(動作集Action Set):

1. copy TTL inwards: apply copy TTL inward actions to the packet  

2. pop: apply all tag pop actions to the packet  

3. push-MPLS: apply MPLS tag push action to the packet  

4. push-PBB: apply PBB tag push action to the packet  

5. push-VLAN: apply VLAN tag push action to the packet  

6. copy TTL outwards: apply copy TTL outwards action to the packet  

7. decrement TTL: apply decrement TTL action to the packet  

8. set: apply all set-field actions to the packet  

9. qos: apply all QoS actions, such as set queue to the packet  

10. group: 如果指定了組行動,那麼按照這個序列中的順序執行組行動存儲段裡的行動。  

11. output: 如果沒有指定組行動,封包就會按照 output 行動中指定的端口轉發。

Output 行動最後執行。如果組行動和輸出行動均存在,那麼組行動優先級高。如果兩者均 不存在,那麼封包被丢棄。

一個流表項可以使用 Write-Action 指令或者 Clear-Action指令修改行動集。

行動集在表間被累加。

當一個表項的指令集沒有包含 Goto-Table 指令時,流水線處理就停止了,然後封包的行動集就被執行。

 行動集包含所有的行動,無論他們以什麼順序加入到行動集中,行動的順序均按照下列順序執行。

如果行動集包含組行動,那麼組行動存儲段中的行動也按照下列順序執行。當然, 交換機也可以支援通過Apply-Actions指令修改行動執行順序。

8.流表比對:

openflow初學者入門筆記一(openflow 1.0 and openflow 1.3)

注釋:比對到相應的流表後(table 0------>table n):

          1.更新計數器

          2.執行指令(更新行動集、更新比對域、更新中繼資料)

      未比對到table:

           檢視是否存在table-miss,沒有則丢棄流表

       (table-miss 表項指定在流表中如何處 理與其他流表項未比對的資料包。比如資料包發送到控制器,丢棄資料包或直接 将包扔到後續的表。)

繼續閱讀