SDN 技術指南(二):OpenFlow

摘要

  • OpenFlow 簡史(SDN != OpenFlow ; 版本問題)
  • OpenFlow 工作原理
  • OpenFlow is a communications protocol
  • 支持 OpenFlow 的開源交換機:Open vSwitch

Preview SDN 技術指南(一):架構概覽

  • Background:為什麼需要 SDN
  • SDN的主要解決方案
  • SDN的整體應用架構

History: OpenFlow != SDN

OpenFlow 最早由斯坦福大學提出,目前知識產權由開放網路基金會(Open Networking Foundation,ONF)持有。

SDN 和 OpenFlow 兩個概念經常會被混淆和誤讀。這也難怪,從歷史上看,兩者還這是你中有我、我中有你。首先,作為一個開放的協議,OpenFlow 協議是眾多 SDN 控制器解決方案的實現基礎;另外,定義 SDN 概念和架構背後的許多重要人物開始在 OpenFlow 領域取得了突破,進而推動 SDN 概念走向成熟。

OpenFlow is a key protocol in many SDN solutions.

在傳統的網路交換設備中,轉發平面(通常採用專門的晶元以提高性能)與控制平面(分布地部署在網路的各個節點)是緊密耦合的,被集成實現在單獨的設備中。當然,從另一個角度看這樣的設計也有合理性,至少能提高單個節點的靈活性和容災能力。但是眾多廠商各自為政,更出於技術保密、保持市場的考慮,對於開放介面供用戶調用、建立行業標準的興趣不大。OpenFlow 協議的推出突破了傳統壁壘,有利於增加用戶側的話語權,所以 Google、Facebook 等企業是 OpenFlow 協議最堅強的擁躉,他們的數據中心都在使用 OpenFlow 協議,並倡議發起成立 ONF 來推動這個技術。

  • 1995: Sun Microsystems 在1995年就提出軟體定義網路的概念(在公開 JAVA 編程語言之後不久)
  • 2006: Martin Casado(a PhD students at Stanford)及其團隊首次提出了一個集中式安全控制的框架
  • 2008: OpenFlow paper 《Architectural Support for Security Management in Enterprise Networks》 (人物: Nick McKeownScott ShenkerDan Boneh
  • 2009: Stanford 發布 OpenFlow V1.0.0 ; Martin Casado co-founds Nicira (主導 Open vSwitch)
  • 2010: Guido Appenzeller co-founds Big Switch Networks (head of clean slate lab at Stanford)
  • 2011: Open Networking Foundation is formed
  • Oct 2011: First Open Networking Summit.
  • July 2012: VMware buys Nicira for $1.26B
  • Nov 6, 2013: Cisco buys Insieme for $838M

OpenFlow 的版本問題

OpenFlow 協議簡單來說就是把路由器的控制平面(Control Plane,管理路由表、負責網路配置和系統管理等)從轉發平面(Forward Plane,轉發決策和輸出鏈路調度等)中分離出來,以軟體方式實現。從第一個正式商用版本 v1.0 開始,OpenFlow 有先後推出了v1.1,v1.2,v1.3,v1.4 等,版本之間存在不兼容的內容, OpenFlow 交換機或者其它解決方案也存在版本支持不盡相同的情況,版本兼容的問題需要尤其關注。

  • OpenFlow V1.0 (2009)
  • OpenFlow V1.1 (2011)

    Ethernet/IP only. Single Flow Table. Did not cover MPLS, Q-in-Q, ECMP, and efficient Multicast.

  • OpenFlow V1.2 (2011)

    IPv6 Support: Matching fields include IPv6 source address, destination address, protocol number, traffic class. ICMPv6 type, ICMPv6 code, IPv6 neighbor discovery header fields, and IPv6 flow labels.

    TLV Matching

    Multiple controller
  • OpenFlow V1.3 (2012)

    IPv6 extension headers: Can check if Hop-by-hop, Router, Fragmentation, Destination options, Authentication, Encrypted Security Payload (ESP), unknown extension headers are present

    MPLS Bottom-of-Stack bit matching

    MAC-in-MAC

    Multiple channels between switch and controller
  • OpenFlow V1.4 (2013)

    Optical ports: Configure and monitor transmit and receive frequencies of lasers and their power

    Improved Extensibility: Type-Length-Value (TLV) encodings at most places

    Extended Experimenter Extension API: Can easily add ports, tables, queues, instructions, actions, etc.

OpenFlow的工作原理

OpenFlow is a communications protocol.

OpenFlow 提供了一個在 SDN 控制器和網路設備(如交換機)之間通訊的標準協議。他允許由 SDN 控制器下發到轉發規則(forwarding rules)、安全規則(security rules)到底層網路交換機,完成路由決策、流量控制。OpenFlow 協議相當於一種共同語言,所以SDN 控制器和交換機都需要實現OpenFlow 協議,以便他們能夠理解 OpenFlow 消息(message)。

SDN 控制器和交換機之間需要建立通訊連接才能進行配置、管理和監控。通訊連接基於 TCP (或者 TLS)協議之上,監聽 6653 埠 。初始化模式:1)網路交換機發起,發送連接請求到控制器 2)控制器發起,交換機需要設置被動模式( passive mode)開啟監聽。 無論使用哪種模式,一旦通訊連接建立,OpenFlow 消息將通過 TCP/TLS 連接傳遞。

基於 OpenFlow 消息,該協議還可以支持網路交換機監控:為了監控網路交換機,OpenFlow 協議提供了從交換機抓取網路統計信息、事件消息的請求/響應報文,方便控制器獲得從交換機一側感知人工操作和失敗信息的能力,包括流移除事件,埠狀態 UP/DOWN 變化等。為了能夠支持第三方廠商可以在 OpenFlow 交換機上執行特定的任務,OpenFlow 協議提供可擴展的自定義消息結構,允許控制器和交換機之間傳遞信息。那是怎樣的 OpenFlow 被許多SDN應用程序用來提供簡單的網路控制和管理解決方案。

流表(Flow Table)

網路交換機將 SDN 控制器下發的所有規則存儲於流表(flow table),例如:

  • ACL 策略(configuring ACL rules)
  • 安全策略(security policy rules)
  • QoS 限速策略(QoS rate limiting bandwidth rules)
  • 路由策略(routing rules)
  • 埠鏡像策略(port mirroring rules)
  • 包變更策略(packet modification rules)

大體上,流(flow)中包含三種類型的信息:

  1. Match fields:他們將定義在包頭欄位:L2(源目的地 乙太網地址,VLAN ID,VLAN優先順序等),L3(IPv4和IPv6 源目的地 地址、協議類型、DSCP、等),L4領域(TCP/UDP/SCTP源目的埠),ARP ICMP欄位,欄位,MPLS域等等。
  2. Actions:他們將定義一個包是否符合特定條件。例如丟棄(drop),轉發到交換機的指定埠,修改數據包(push/pop VLAN ID,push/pop 標籤,遞增/遞減IP TTL),轉發到特殊埠的序列等。
  3. 計數器:記錄由多少數據包匹配到當前flow

OpenFlow 協議定義了多種消息來完成交換機和控制機通訊,例如:

  • 連接設置消息(connection setup messages)
  • 配置消息(configuration messages)
  • 交換機統計信息消息(switch statistics messages)
  • 連接監測消息(keep-alive messages)
  • 非同步事件消息(asynchronous events messages)
  • 發生錯誤消息(error messages)

支持 OpenFlow 的開源交換機:Open vSwitch

OpenFlow Switches including Open vSwitch.

市場中支持 OpenFlow 的硬體交換機包括 VMware 推出的vSwitch、vDS等虛擬交換機,Cisco與VMware合作發布了基於VMware kernel API開發的分散式虛擬交換機Nexus 1000V(功能對應於VMware的vDS),Citrix 迫於Open vSwitch快速追趕,推出了的Distributed Virtual Switch解決方案,這些方案都是收費的。

除了硬體交換機還可以通過軟體支持並實現虛擬機互聯,Open vSwitch(Open Source Virtual Switch)就是是一款基於軟體實現的開源虛擬交換機。它採用 C 語言編寫,遵循 Apache 2.0 許可。OpenStack 在2011年啟動 Quantum 項目,引入了Open vSwitch 發展 Open Stack Network 。隨著 OpenStack 社區的快速壯大,Open vSwitch 在虛擬交換機的領先優勢逐步確立。

Open vSwitch 內部分為用戶態和內核態。用戶層(態)為守護程序實現了交換機和流表,是Open vSwitch的核心,提供了一些組件去管理交換機,實現資料庫,對內核進行直接管理。主要包含三個守護進程:ovs-vswitched,ovsdb-server和ovs-brcompatd。openvswitch_mod.ko是內核態的主要模塊,完成數據包的查找、轉發、修改等操作,一個數據流的後續數據包到達OVS後將直接交由內核態,使用openvswitch_mod.ko中的處理函數對數據包進行處理。

Open vSwitch 的要點如下:

  • 支持的操作系統(Linux, Ubuntu, Debian,FreeBSD 和 NetBSD)
  • 支持雲計算平台管理系統集成,例如:OpenStack, openQRM, OpenNebula, 和 oVirt
  • 支持虛擬化部署( hypervisor),共享硬體資源
  • 支持雲平台 Xen XenServer 6.0 ,也支持 Proxmox VE, VirtualBox, Xen KVM
  • 提供開發工具包:Data Plane Development Kit (DPDK)
  • 支持虛擬機通訊/監控流量統計信息,例如 NetFlow(Cisco,RFC 3954)、sFlow(RFC 3176)、NetStream(Huawei)、IPFIX(RFC 7011),詳見 《淺談基於數據分析的網路態勢感知》。
  • SPAN(Switched Port Analyzer ), RSPAN( Remote Switch Port Analyzer):可以發送一份流量的拷貝給連接安全設備的交換機埠
  • GRE-tunneled mirrors: 遠程監控
  • LACP、VLAN、IGMP、LLDP、BFD、STP、RSTP、QoS、HFSC
  • Complete IPv6 (Internet Protocol version 6) support
  • Support for multiple tunneling protocols, including GRE、VXLAN 、STT、IPsec
  • 介面編程語言支持:C 、Python
  • Multi-table forwarding pipeline with a flow-caching engine
  • Intel 擁有一個自己的 Open vSwitch 版本

例如,下面 Open vSwitch 的命令是和控制器建立初始化連接(TCP),控制器 IP (192.168.56.101) 埠(6653):

ovs-vsctl set-controller <sampleBridgeName> tcp:192.168.56.101:6653n

aHR0cDovL3dlaXhpbi5xcS5jb20vci9xM1ZrZkZmRVp3b1lyUk1mOXlDNQ== (二維碼自動識別)


推薦閱讀:

SDN閑聊
OpenStack容器網路項目Kuryr(libnetwork)
SDN再談
NFV再談(應用現狀篇)
VXLAN with EVPN as Control Plane

TAG:SDN | OpenFlow | OpenStack |