天天看點

Open vSwitch概述

Open vSwitch概述:

Open vSwitchh一個高品質的、多層虛拟交換機,使用開源Apache2.0許可協定。它的主要目的是讓大規模網絡自動化可以通過程式設計擴充,同時仍然支援标準的管理接口和協定(例如NetFlow,sFlow,SPAN,RSPAN,CLI,LACP,802.1ag)。

      Open vSwitch運作在虛拟平台(例如KVM,Xen)上的虛拟交換機。在虛拟化平台上,Open vSwitch可以為動态變化的端點提供2層交換功能,很好的控制虛拟網絡中的通路政策、網絡隔離、流量監控等等。

      在Open vSwitch中,有幾個非常重要的概念:

      Bridge:Bridge代表一個以太網交換機(Switch),一個主機中可以建立一個或者多個Bridge裝置。

      Port:端口與實體交換機的端口概念類似,每個Port隸屬于一個Bridge。

      Interface:連接配接到Port的網絡接口裝置。在通常情況下,port和interface是一對一的關系,隻有在配置port為bond模式後,port和interface是一對多的關系。

      Controller:OpenFlow控制器。Open vSwitch可以同時接受一個或者多個OpenFlow控制器的管理。

      Datapath:在Open vSwitch中, datapath負責執行資料交換,也就是把從接收端口收到的資料包在流表中進行比對,并執行比對到的動作。

      Flow table:流表,每個datapath都和一個流表關聯,當datapath接收到資料後,Open vSwitch會在流表中查找比對的flow,執行對應的操作,例如轉發資料到另外的端口。

Open vSwitch子產品:

Ovs-vswitched:主要子產品,實作switch的daemon,包含一個支援流交換的Linux核心子產品。

Ovsdb-server:輕量級資料庫伺服器,提供ovs-vswitchd擷取配置資訊。

Ovs-brcompatd:讓ovs-vswitch替換Linuxbridge,包含擷取bridge ioctls的Linux核心子產品。

Ovs-dpctl:用來配置switch核心子產品。

Ovs-vsctl:查詢和更新ovs-vswitchd的配置;

Ovs-appctl:發送指令消息,運作相關的daemon;

Ovsdbmonitor :GUI工具,可以遠端擷取OpenvSwitch資料庫和OpenFlow的流表。

Ovs-openflowd:一個簡單的openflow交換機。

Ovs-controller:一個簡單的openflow控制器。

Ovs-ofctl:查詢和控制openflow交換機和控制器。

Ovs-pki:openflow交換機建立和 管理公鑰架構。

Ovs-tcpundump:tcpdump的更新檔,解析openflow的消息。

Flow文法說明:

       當資料包進入Open vSwitch後,會将資料包和流表中的流表進行比對,如果發現了比對的流表項,則執行該流表中的指令集。相反,如果資料包在流表中沒有發現任何比對,Open vSwitch會通過控制通道把資料封包發送到openflow控制器中。

      在Open vSwitch中,流表項作為ovs-ofctl的參數,采用如下的格式:字段=值。如果有多個字段,可以用逗号或者空格分開,一些常用的字段有:

in_port=port     傳遞資料包端口的openflow端口編号。

dl_vlan=vlan      資料包的vlan tag值,範圍是0-4095,0xffff表示不包含vlan tag的資料包。

dl_src=<MAC>/dl_dst=<MAC>   比對源或者目的mac位址。

dl_type=ethertype   比對以太網類型。

nw_src=ip[/netmask]、nw_dst=ip[/netmask] 當dl_type=0x0800時,比對源或者目的 ipv4位址,可以使用ip位址或者域名。

nw_proto=proto      和dl_type協同使用,IP或者ipv6頭下層資料的協定号。

table=number         指定要使用的流表的編号,範圍是0-254。在不指定的情況下,預設值為0。通過使用流表編号,可以建立或者修改多個table中的flow。

reg<idx>=value[/mask] 交換機中寄存器的值。當一個資料包進入交換機時,所有寄存器都被清零,使用者可以通過Action的指令修改寄存器中的值。

對于add-flow,add-flows和mod-flows這三個指令,還需要指定要執行的動作:action=[target][,target…]

一個流規則中可能有多個動作,按照指定的先後順序執行。

常見的操作有:

output:port 輸出資料包到指定的端口。port是指端口的openflow端口編号。

mod_vlan_vid          修改資料包中的vlan tag。

strip_vlan:移除資料封包中的vlan tag。

mod_dl_src/mod_dl_dest:修改源或者目标的mac位址資訊。

mod_nw_src/mod_nw_dst:修改源或者目标的ipv4位址資訊。

resubmit:port替換流表的in_port字段,并重新進行比對。

load:value->dst[start…end]:寫資料到指定的字段。

Sflow和Netflow

      netflow會針對所有經過網絡的封包取得封包的特征,包含五元組、入接口、ToS這些資訊,若網絡流量較大時,netflow所提供的資料量亦會随之增加,如果資料量太大,後端分析引擎可能不堪負荷,進而影響資料判斷時的正确性。

      sflow的做法和netflow不同,sflow以取樣的方式取出資料的摘要,使用者可以自定義取樣大小以及取樣周期,即使流經大量的網絡流量,sflow經取樣後的資料相對于netflow而言會大量的減少,如此一來就可以兼顧資料正确性并保證後端分析引擎處理能力。是以,sflow常運用于高速網絡的環境,也是因為其具有此特性的關系。

繼續閱讀