一本SDN入門書籍讀書筆記——SDN 標準分析

交換機轉發面詳解:

OpenFlow交換機轉發面內部(即交換芯片)在邏輯上由兩部分組成:端口port和流表Flow Table。跟Controller通信的通道Controller channel可以認爲是一個特殊的port,一個交換機可以有多種端口,也可以有很多級流表;

 

在OpenFlow協議中,Controller通過一套標準消息接口,告訴交換機,當報從哪些port進來,就要去查那張流表,匹配到一條流表項(Flow Entry)之後,就要去執行這條流表項所規定的指令,然後要麼直接轉發出去要麼丟棄,要麼繼續去查找下一個指定的流表(由匹配到的這條流表項來指定),然後重複這個過程,知道報文被轉發或者丟棄;

 

流(Flow):指在一段時間內,經過同一個網絡的一系列具有相同屬性的順序發送的報文集合;

流有老化時間,如果具有相同屬性的報文隔了足夠長時間發,假設這個時間已經超過了老化時間了,那對於交換機來說,這已經是一條新的流了;

流表(Flow Table):流表就是芯片中一張張的轉發表,每一張流表都由很多條流表項組成,比如一張流表有16K,就是說這張流表有16K條流表項;

流表項(Flow Entry):流表項是流表的最小單位,每條流表項對應了網絡中傳輸的一條流,流表項是OpenFlow中最核心的元素,根據OpenFlow的標準,每條流表項的組成部分如下:

Match Field 匹配字段

Priority 優先級

Counter 計數器

Instruction 指令

Timeout 超時時間

Cookie 附屬屬性

這裏的流表項的組成部分是指Controller 和交換機之間傳輸的數據結構,是對流表項的邏輯描述,並不是跟芯片轉發表中的實際字段一一對應;

 

Match Field 匹配字段:

匹配字段包括保溫本身的信息(如MacDa,MacSa,Vlan,IPDA,IPSA等)以及跟報文關聯的字段(如報文進來的port,前一張流表傳過來的屬性數據),同一張流表中,裏面不同的流表項的匹配字段可以是不同的,也可以相同;

 

Priority 優先級:

一個報文在流表進行匹配查找的時候,是從上到下順序查找的,優先級就是用來標誌流表項之間的順序關係的,優先級相同的流表項是平等的,沒有順序關係;Controller往交換機下發流表項的時候,用優先級告訴交換機該條流表項在流表中存放的相對位置;

 

Counter 計數器:

計數器是管理員用來觀察監控網絡負載情況的非常重要的工具,原則上每條流表項都應該對應一個計數器,來表示屬於這條流的報文已經收到了多少個以及各種其他統計數據(比如多少字節,多少錯誤的包等)

 

Instruction 指令:

OpenFlow裏面定義的指令有以下幾種:

Meter:用於測量該Flow的速率並執行相應的動作。按照OpenFlow標準術語,每個Meter包含幾個Band,每個Band對應一個Rate(速率)和動作,Band的意思是如果所測量的Flow速率超過了指定的Rate,就執行相應的動作,動作可以是drop(丟包)或者dscp remark(改寫IP頭部中的dscp值);

Apply-Action:立即對報文執行一個Action List(動作列表)裏面指定的所有Action,這些Action執行的結果可能影響也可能不影響下一級流表查找;Apply-Action的一個例子是,每條流都出一個Counter(計數器),立即匹配該流對應的報文數量進行統計;

Write-Action:並不立即對報文執行動作,而是把一個Action list裏面的多個action放到一個action set動作集合中,等到所有流表都出來完了,再一次性處理這個action set裏面所有action;如果不同的流所放的action有衝突,那麼後面的覆蓋前面的;

Clear-Action:如果某條流想把前面的所有流表處理後產生的所有Action Set都清除掉,就要執行Clear-Action的指令;

Write-metadata(metedata可意譯爲描述信息):代表一條流獨一無二的特徵ID;用來在多級流表之間傳遞以達到關聯多級流表的目的。

Goto-Table:繼續下一級指定流表的處理。唯一一個要求必須支持的指令;只支持單級流表的時候,這個指令沒有意義;

 

Timeout 超時時間:

每套流表項可以被老化,timeout就是表示該流的老化時間。OpenFlow定義了兩種老化時間,hard timeout和idle timeout 前者標識從該流表項創建開始,到了這麼長時間後,無條件刪除;後者表示,如果在這麼長時間內,沒有任何報文匹配過該流表項,那就刪除;前者可以靠軟件做,後者可以必須要靠硬件來做;

 

Cookie 附屬屬性:

Cookie是被Controller向Switch來傳遞流表項相關的操作信息的,比如修改Flow,刪除Flow等;這個屬性不會在報文轉發的時候被使用,僅僅用於Controller和交換機之間傳遞消息;

 

端口:OpenFlow中定義三大類端口:

物理端口(Physical Port):交換機面板上所有對外可見的物理端口(帶外管理端口除外);邏輯端口:的一個例子就是,Tunnel;保留端口裏面有多種端口,Controller Channel(連接Controller的通道,可以是帶內業務口,也可以是獨立的帶外管理口)就是一種保留端口;

 

組group:

類似 Flow Table;

group中有一個詞bucket,bcket指一個action list;

ALL 意思是轉發到該group所包含的所有bucket中,可以使用組播實現;

Select:意思是轉發到該group所包含的所有bucket中的一個;

Indirect:在多個Flow中共享Action,這種類型的Group只包含一個Bucket

Fail-over:保護倒換,就是在正常狀態中,報文只從這個group的一條路徑轉發出去,一旦這條路徑斷了,備份路徑馬上頂上;

 

Controller和交換機之間的消息:分爲三類,分別是Controller-to-Switch消息,Asynchronous(異步消息)(就是Swich-To-Controller消息)、Symmetric(對稱消息)

 

1.Controller-To-Switch消息:

從Controller 發往Switch:

Features:Controller用這個消息類型詢問交換機能支持的類型

Configuration:Controller用這個消息類型配置交換機或者查詢交換機配置參數

Modify-State:Controller用這個消息類型來操作流表(add/delete/modify)和group表,以及Ports屬性等;

Read-State:Controller用這個消息類型來獲取交換機各種狀態消息,如Counter

Packed-out:Controller用這個消息類型向外發送匹配某條流表項的數據報文;

Barrier:Controller用這個消息類型保證一些其他消息之間的順序;如B消息依賴與A,那麼Controller先朝交換機發送消息A,然後在發送一個Barrier消息,交換機等消息A被執行完後才發送一個對Barrier消息的回覆,Controller收到回覆後,纔會繼續發送消息B;

Role-Request:當交換機連了多個Controller的時候,Controller用這個消息類型向交換機通告自己的角色;

Asynchronous-Configuration:用於Controller告訴交換機對交換機發來的哪些消息感興趣;

 

2.Asynchronous(異步)消息:

用於交換機想Controller發送,Switch-To-Controller

Packet-in:當有報文匹配某條流表項,該流表項action是output to Controller-Port時,這個報文就被通過Packet-in的消息發送到Controller

Flow-removed:當某個流表項被刪除的時候(老化或者Controller主動要求刪除),一個Flow-removed的消息就會被髮送到Controller;

Port-status:當端口狀態發生變化的時候,交換機用這個消息類型告訴Controller通告狀態變化,比如Link down/up;

Error:當交換機發生了一些錯誤的時候,發送這個消息到Controller;

 

3.Symmetric(對稱消息):

可以由任何一方發起:

Hello:Controller或者交換機啓動的時候,互發hello消息,通知對方啓動了;

Echo:通過發Echo以及得到reply,確認對方的連接沒有問題,也可以用來測量連接延時;

Experimenter:用來讓產家進行私有擴展。

 

Controller的三種角色:

Master:一臺交換機所連接到的所有Controller中,只能有一個Master,他對交換機擁有完全的操作權限;

Slave:一臺交換機所連接到的所有Controlller中,可以有多個Slave,它們對交換機只有讀取狀態和被動接受交換機消息的權限,不能對交換機進行配置;一旦Master死掉,其中一臺Slave就會被選舉爲Master,接替原來Master繼續工作,每個Slave可以接受不同的消息類型,從而在個Slave之間進行負載分擔;

Equal:有的網絡希望有多個Controller都能對交換機進行配置,以便負載分擔,這種情況,這些Controller可以被配置爲Equal角色,一臺交換機允許同時連接到多個Equal角色的Controller,這些Controller對交換機擁有跟Master一樣的功能;

 

OpenFlow系統性能指標:

交換機處理帶寬:芯片決定,無法優化

流表項數量:芯片決定,無法優化

流表項下發能力:即每秒能安裝多少條流表項;這個指標跟OpenFlow交換機收包/處理包能力、芯片SDN對流表項處理能力,Contoller軟件處理以及CPU主頻有很大關係;可以通過提高CPU主頻或者優化軟件來提高;

To-Controller報文轉發:有些報文在交換機裏面匹配到某條流表項,這條流表項的動作把報文發送到Controller,Controller經過處理後可能會在把報文通過交換機轉發出去;這個轉發性能決定Controller和交換機兩個元素;

 

OF-Config:

配置OpenFlow Controller地址;

隊列(Queue)和物理端口(Physical Port)的配置管理;

邏輯端口(Tunnel)的創建和管理;

Controller和交換機之間通信通道的創建和配置,包括安全認證;

交換機的能力發現;

目前OF-Config市場接受度很低;要完成上面的工作有三種做法:

一、使用命令行來配置

二、使用廠商的私有方案

三、重新定義另一種協議,(最著名的是Nicira公司的OVSDB)

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