OpenFlow 最早由斯坦福大學提出,目前知識產權由開放網絡基金會(Open Networking Foundation,ONF)持有。SDN 和 OpenFlow 兩個概念經常會被混淆和誤讀。這也難怪,從歷史上看,兩者還這是你中有我、我中有你。首先,作為一個開放的協(xié)議,OpenFlow 協(xié)議是眾多 SDN 控制器解決方案的實現(xiàn)基礎;另外,定義 SDN 概念和架構背后的許多重要人物開始在 OpenFlow 領域取得了突破,進而推動 SDN 概念走向成熟。
OpenFlow is a key protocol in many SDN solutions.
在傳統(tǒng)的網絡交換設備中,轉發(fā)平面(通常采用專門的芯片以提高性能)與控制平面(分布地部署在網絡的各個節(jié)點)是緊密耦合的,被集成實現(xiàn)在單獨的設備中。當然,從另一個角度看這樣的設計也有合理性,至少能提高單個節(jié)點的靈活性和容災能力。但是眾多廠商各自為政,更出于技術保密、保持市場的考慮,對于開放接口供用戶調用、建立行業(yè)標準的興趣不大。
OpenFlow 協(xié)議的推出突破了傳統(tǒng)壁壘,有利于增加用戶側的話語權,所以 Google、Facebook 等企業(yè)是 OpenFlow 協(xié)議最堅強的擁躉,他們的數(shù)據(jù)中心都在使用 OpenFlow 協(xié)議,并倡議發(fā)起成立 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 發(fā)布 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 協(xié)議簡單來說就是把路由器的控制平面(Control Plane,管理路由表、負責網絡配置和系統(tǒng)管理等)從轉發(fā)平面(Forward Plane,轉發(fā)決策和輸出鏈路調度等)中分離出來,以軟件方式實現(xiàn)。從第一個正式商用版本 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 控制器和網絡設備(如交換機)之間通訊的標準協(xié)議。他允許由 SDN 控制器下發(fā)到轉發(fā)規(guī)則(forwarding rules)、安全規(guī)則(security rules)到底層網絡交換機,完成路由決策、流量控制。OpenFlow 協(xié)議相當于一種共同語言,所以SDN 控制器和交換機都需要實現(xiàn)OpenFlow 協(xié)議,以便他們能夠理解 OpenFlow 消息(message)。
SDN 控制器和交換機之間需要建立通訊連接才能進行配置、管理和監(jiān)控。通訊連接基于 TCP (或者 TLS)協(xié)議之上,監(jiān)聽 6653 端口 。初始化模式:1)網絡交換機發(fā)起,發(fā)送連接請求到控制器 2)控制器發(fā)起,交換機需要設置被動模式( passive mode)開啟監(jiān)聽。 無論使用哪種模式,一旦通訊連接建立,OpenFlow 消息將通過 TCP/TLS 連接傳遞。
基于 OpenFlow 消息,該協(xié)議還可以支持網絡交換機監(jiān)控:為了監(jiān)控網絡交換機,OpenFlow 協(xié)議提供了從交換機抓取網絡統(tǒng)計信息、事件消息的請求/響應報文,方便控制器獲得從交換機一側感知人工操作和失敗信息的能力,包括流移除事件,端口狀態(tài) UP/DOWN 變化等。為了能夠支持第三方廠商可以在 OpenFlow 交換機上執(zhí)行特定的任務,OpenFlow 協(xié)議提供可擴展的自定義消息結構,允許控制器和交換機之間傳遞信息。那是怎樣的 OpenFlow 被許多SDN應用程序用來提供簡單的網絡控制和管理解決方案。
流表(Flow Table)
網絡交換機將 SDN 控制器下發(fā)的所有規(guī)則存儲于流表(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優(yōu)先級等),L3(IPv4和IPv6 源目的地 地址、協(xié)議類型、DSCP、等),L4領域(TCP/UDP/SCTP源目的端口),ARP ICMP字段,字段,MPLS域等等。
Actions: 他們將定義一個包是否符合特定條件。例如丟棄(drop),轉發(fā)到交換機的指定端口,修改數(shù)據(jù)包(push/pop VLAN ID,push/pop 標簽,遞增/遞減IP TTL),轉發(fā)到特殊端口的序列等。
計數(shù)器: 記錄由多少數(shù)據(jù)包匹配到flow
OpenFlow 協(xié)議定義了多種消息來完成交換機和控制機通訊,例如:
- 連接設置消息(connection setup messages)
- 配置消息(configuration messages)
- 交換機統(tǒng)計信息消息(switch statistics messages)
- 連接監(jiān)測消息(keep-alive messages)
- 異步事件消息(asynchronous events messages)
- 發(fā)生錯誤消息(error messages)
支持 OpenFlow 的開源交換機:Open vSwitch
OpenFlow Switches including Open vSwitch.
市場中支持 OpenFlow 的硬件交換機包括 VMware 推出的vSwitch、vDS等虛擬交換機,Cisco與VMware合作發(fā)布了基于VMware kernel API開發(fā)的分布式虛擬交換機Nexus 1000V(功能對應于VMware的vDS),Citrix 迫于Open vSwitch快速追趕,推出了的Distributed Virtual Switch解決方案,這些方案都是收費的。
除了硬件交換機還可以通過軟件支持并實現(xiàn)虛擬機互聯(lián),Open vSwitch(Open Source Virtual Switch)就是是一款基于軟件實現(xiàn)的開源虛擬交換機。它采用 C 語言編寫,遵循 Apache 2.0 許可。OpenStack 在2011年啟動 Quantum 項目,引入了Open vSwitch 發(fā)展 Open Stack Network 。隨著 OpenStack 社區(qū)的快速壯大,Open vSwitch 在虛擬交換機的領先優(yōu)勢逐步確立。

Open vSwitch 內部分為用戶態(tài)和內核態(tài)。用戶層(態(tài))為守護程序實現(xiàn)了交換機和流表,是Open vSwitch的核心,提供了一些組件去管理交換機,實現(xiàn)數(shù)據(jù)庫,對內核進行直接管理。主要包含三個守護進程:ovs-vswitched,ovsdb-server和ovs-brcompatd。openvswitch_mod.ko是內核態(tài)的主要模塊,完成數(shù)據(jù)包的查找、轉發(fā)、修改等操作,一個數(shù)據(jù)流的后續(xù)數(shù)據(jù)包到達OVS后將直接交由內核態(tài),使用openvswitch_mod.ko中的處理函數(shù)對數(shù)據(jù)包進行處理。
Open vSwitch 的要點如下:
- 支持的操作系統(tǒng)(Linux, Ubuntu, Debian,F(xiàn)reeBSD 和 NetBSD)
- 支持云計算平臺管理系統(tǒng)集成,例如:OpenStack, openQRM, OpenNebula, 和 oVirt
- 支持虛擬化部署( hypervisor),共享硬件資源
- 支持云平臺 Xen XenServer 6.0 ,也支持 Proxmox VE, VirtualBox, Xen KVM
- 提供開發(fā)工具包:Data Plane Development Kit (DPDK)
- 支持虛擬機通訊/監(jiān)控流量統(tǒng)計信息,例如 NetFlow(Cisco,RFC 3954)、sFlow(RFC 3176)、NetStream(Huawei)、IPFIX(RFC 7011),詳見 《淺談基于數(shù)據(jù)分析的網絡態(tài)勢感知》。
- SPAN(Switched Port Analyzer ), RSPAN( Remote Switch Port Analyzer):可以發(fā)送一份流量的拷貝給連接安全設備的交換機端口
- GRE-tunneled mirrors: 遠程監(jiān)控
- 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
審核編輯:郭婷
電子發(fā)燒友App

















評論