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 McKeown 、Scott Shenker 、Dan Boneh)
- 2009: Stanford 發布 OpenFlow V1.0.0 ; Martin Casado co-founds Nicira
- 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.
-
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)中包含三種類型的信息:
Match fields: 他們將定義在包頭字段:L2(源目的地 以太網地址,VLAN ID,VLAN優先級等),L3(IPv4和IPv6 源目的地 地址、協議類型、DSCP、等),L4領域(TCP/UDP/SCTP源目的端口),ARP ICMP字段,字段,MPLS域等等。
Actions: 他們將定義一個包是否符合特定條件。例如丟棄(drop),轉發到交換機的指定端口,修改數據包(push/pop VLAN ID,push/pop 標簽,遞增/遞減IP TTL),轉發到特殊端口的序列等。
計數器: 記錄由多少數據包匹配到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 tcp:192.168.56.101:6653
審核編輯:郭婷
評論
查看更多