摘要
- OpenFlow 簡史(SDN != OpenFlow ; 版本問題)
- OpenFlow 工作原理
- OpenFlow is a communications protocol
- 支持 OpenFlow 的開源交換機(jī):Open vSwitch
Previous SDN 技術(shù)指南(一):架構(gòu)概覽
- Background:為什么需要 SDN
- SDN的主要解決方案
- SDN的整體應(yīng)用架構(gòu)
History: OpenFlow != SDN
OpenFlow 最早由斯坦福大學(xué)提出册养,目前知識產(chǎn)權(quán)由開放網(wǎng)絡(luò)基金會(Open Networking Foundation吧史,ONF)持有摄杂。
SDN 和 OpenFlow 兩個(gè)概念經(jīng)常會被混淆和誤讀花盐。這也難怪罩锐,從歷史上看,兩者還這是你中有我模闲、我中有你攀唯。首先,作為一個(gè)開放的協(xié)議媚朦,OpenFlow 協(xié)議是眾多 SDN 控制器解決方案的實(shí)現(xiàn)基礎(chǔ)氧敢;另外,定義 SDN 概念和架構(gòu)背后的許多重要人物開始在 OpenFlow 領(lǐng)域取得了突破询张,進(jìn)而推動 SDN 概念走向成熟孙乖。
OpenFlow is a key protocol in many SDN solutions.
在傳統(tǒng)的網(wǎng)絡(luò)交換設(shè)備中,轉(zhuǎn)發(fā)平面(通常采用專門的芯片以提高性能)與控制平面(分布地部署在網(wǎng)絡(luò)的各個(gè)節(jié)點(diǎn))是緊密耦合的份氧,被集成實(shí)現(xiàn)在單獨(dú)的設(shè)備中唯袄。當(dāng)然,從另一個(gè)角度看這樣的設(shè)計(jì)也有合理性蜗帜,至少能提高單個(gè)節(jié)點(diǎn)的靈活性和容災(zāi)能力越妈。但是眾多廠商各自為政,更出于技術(shù)保密钮糖、保持市場的考慮梅掠,對于開放接口供用戶調(diào)用、建立行業(yè)標(biāo)準(zhǔn)的興趣不大店归。OpenFlow 協(xié)議的推出突破了傳統(tǒng)壁壘阎抒,有利于增加用戶側(cè)的話語權(quán),所以 Google消痛、Facebook 等企業(yè)是 OpenFlow 協(xié)議最堅(jiān)強(qiáng)的擁躉且叁,他們的數(shù)據(jù)中心都在使用 OpenFlow 協(xié)議,并倡議發(fā)起成立 ONF 來推動這個(gè)技術(shù)秩伞。
- 1995: Sun Microsystems 在1995年就提出軟件定義網(wǎng)絡(luò)的概念(在公開 JAVA 編程語言之后不久)
- 2006: Martin Casado(a PhD students at Stanford)及其團(tuán)隊(duì)首次提出了一個(gè)集中式安全控制的框架
- 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 (主導(dǎo) 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 協(xié)議簡單來說就是把路由器的控制平面(Control Plane,管理路由表展氓、負(fù)責(zé)網(wǎng)絡(luò)配置和系統(tǒng)管理等)從轉(zhuǎn)發(fā)平面(Forward Plane穆趴,轉(zhuǎn)發(fā)決策和輸出鏈路調(diào)度等)中分離出來,以軟件方式實(shí)現(xiàn)遇汞。從第一個(gè)正式商用版本 v1.0 開始未妹,OpenFlow 有先后推出了v1.1,v1.2,v1.3,v1.4 等,版本之間存在不兼容的內(nèi)容空入, OpenFlow 交換機(jī)或者其它解決方案也存在版本支持不盡相同的情況络它,版本兼容的問題需要尤其關(guān)注。
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 controllerOpenFlow 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 controllerOpenFlow 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 提供了一個(gè)在 SDN 控制器和網(wǎng)絡(luò)設(shè)備(如交換機(jī))之間通訊的標(biāo)準(zhǔn)協(xié)議歪赢。他允許由 SDN 控制器下發(fā)到轉(zhuǎn)發(fā)規(guī)則(forwarding rules)化戳、安全規(guī)則(security rules)到底層網(wǎng)絡(luò)交換機(jī),完成路由決策埋凯、流量控制迂烁。OpenFlow 協(xié)議相當(dāng)于一種共同語言,所以SDN 控制器和交換機(jī)都需要實(shí)現(xiàn)OpenFlow 協(xié)議递鹉,以便他們能夠理解 OpenFlow 消息(message)盟步。
SDN 控制器和交換機(jī)之間需要建立通訊連接才能進(jìn)行配置、管理和監(jiān)控躏结。通訊連接基于 TCP (或者 TLS)協(xié)議之上却盘,監(jiān)聽 6653 端口 。初始化模式:1)網(wǎng)絡(luò)交換機(jī)發(fā)起媳拴,發(fā)送連接請求到控制器 2)控制器發(fā)起黄橘,交換機(jī)需要設(shè)置被動模式( passive mode)開啟監(jiān)聽。 無論使用哪種模式屈溉,一旦通訊連接建立塞关,OpenFlow 消息將通過 TCP/TLS 連接傳遞。
基于 OpenFlow 消息子巾,該協(xié)議還可以支持網(wǎng)絡(luò)交換機(jī)監(jiān)控:為了監(jiān)控網(wǎng)絡(luò)交換機(jī)帆赢,OpenFlow 協(xié)議提供了從交換機(jī)抓取網(wǎng)絡(luò)統(tǒng)計(jì)信息、事件消息的請求/響應(yīng)報(bào)文线梗,方便控制器獲得從交換機(jī)一側(cè)感知人工操作和失敗信息的能力,包括流移除事件椰于,端口狀態(tài) UP/DOWN 變化等。為了能夠支持第三方廠商可以在 OpenFlow 交換機(jī)上執(zhí)行特定的任務(wù)仪搔,OpenFlow 協(xié)議提供可擴(kuò)展的自定義消息結(jié)構(gòu)瘾婿,允許控制器和交換機(jī)之間傳遞信息。那是怎樣的 OpenFlow 被許多SDN應(yīng)用程序用來提供簡單的網(wǎng)絡(luò)控制和管理解決方案。
流表(Flow Table)
網(wǎng)絡(luò)交換機(jī)將 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(源目的地 以太網(wǎng)地址,VLAN ID笛谦,VLAN優(yōu)先級等)抱虐,L3(IPv4和IPv6 源目的地 地址、協(xié)議類型揪罕、DSCP、等)宝泵,L4領(lǐng)域(TCP/UDP/SCTP源目的端口)好啰,ARP ICMP字段,字段儿奶,MPLS域等等框往。
- Actions:他們將定義一個(gè)包是否符合特定條件。例如丟棄(drop)闯捎,轉(zhuǎn)發(fā)到交換機(jī)的指定端口椰弊,修改數(shù)據(jù)包(push/pop VLAN ID,push/pop 標(biāo)簽瓤鼻,遞增/遞減IP TTL)秉版,轉(zhuǎn)發(fā)到特殊端口的序列等。
- 計(jì)數(shù)器:記錄由多少數(shù)據(jù)包匹配到當(dāng)前flow
OpenFlow 協(xié)議定義了多種消息來完成交換機(jī)和控制機(jī)通訊茬祷,例如:
- 連接設(shè)置消息(connection setup messages)
- 配置消息(configuration messages)
- 交換機(jī)統(tǒng)計(jì)信息消息(switch statistics messages)
- 連接監(jiān)測消息(keep-alive messages)
- 異步事件消息(asynchronous events messages)
- 發(fā)生錯誤消息(error messages)
支持 OpenFlow 的開源交換機(jī):Open vSwitch
OpenFlow Switches including Open vSwitch.
市場中支持 OpenFlow 的硬件交換機(jī)包括 VMware 推出的vSwitch清焕、vDS等虛擬交換機(jī),Cisco與VMware合作發(fā)布了基于VMware kernel API開發(fā)的分布式虛擬交換機(jī)Nexus 1000V(功能對應(yīng)于VMware的vDS)祭犯,Citrix 迫于Open vSwitch快速追趕秸妥,推出了的Distributed Virtual Switch解決方案,這些方案都是收費(fèi)的沃粗。
除了硬件交換機(jī)還可以通過軟件支持并實(shí)現(xiàn)虛擬機(jī)互聯(lián)粥惧,Open vSwitch(Open Source Virtual Switch)就是是一款基于軟件實(shí)現(xiàn)的開源虛擬交換機(jī)。它采用 C 語言編寫最盅,遵循 Apache 2.0 許可突雪。OpenStack 在2011年啟動 Quantum 項(xiàng)目,引入了Open vSwitch 發(fā)展 Open Stack Network 涡贱。隨著 OpenStack 社區(qū)的快速壯大挂签,Open vSwitch 在虛擬交換機(jī)的領(lǐng)先優(yōu)勢逐步確立。
Open vSwitch 內(nèi)部分為用戶態(tài)和內(nèi)核態(tài)盼产。用戶層(態(tài))為守護(hù)程序?qū)崿F(xiàn)了交換機(jī)和流表饵婆,是Open vSwitch的核心,提供了一些組件去管理交換機(jī),實(shí)現(xiàn)數(shù)據(jù)庫侨核,對內(nèi)核進(jìn)行直接管理。主要包含三個(gè)守護(hù)進(jìn)程:ovs-vswitched,ovsdb-server和ovs-brcompatd搓译。openvswitch_mod.ko是內(nèi)核態(tài)的主要模塊悲柱,完成數(shù)據(jù)包的查找、轉(zhuǎn)發(fā)些己、修改等操作豌鸡,一個(gè)數(shù)據(jù)流的后續(xù)數(shù)據(jù)包到達(dá)OVS后將直接交由內(nèi)核態(tài),使用openvswitch_mod.ko中的處理函數(shù)對數(shù)據(jù)包進(jìn)行處理段标。
Open vSwitch 的要點(diǎn)如下:
- 支持的操作系統(tǒng)(Linux, Ubuntu, Debian涯冠,F(xiàn)reeBSD 和 NetBSD)
- 支持云計(jì)算平臺管理系統(tǒng)集成,例如:OpenStack, openQRM, OpenNebula, 和 oVirt
- 支持虛擬化部署( hypervisor)逼庞,共享硬件資源
- 支持云平臺 Xen XenServer 6.0 蛇更,也支持 Proxmox VE, VirtualBox, Xen KVM
- 提供開發(fā)工具包:Data Plane Development Kit (DPDK)
- 支持虛擬機(jī)通訊/監(jiān)控流量統(tǒng)計(jì)信息,例如 NetFlow(Cisco赛糟,RFC 3954)派任、sFlow(RFC 3176)、NetStream(Huawei)璧南、IPFIX(RFC 7011),詳見 《淺談基于數(shù)據(jù)分析的網(wǎng)絡(luò)態(tài)勢感知》掌逛。
- SPAN(Switched Port Analyzer ), RSPAN( Remote Switch Port Analyzer):可以發(fā)送一份流量的拷貝給連接安全設(shè)備的交換機(jī)端口
- GRE-tunneled mirrors: 遠(yuǎn)程監(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 擁有一個(gè)自己的 Open vSwitch 版本
例如,下面 Open vSwitch 的命令是和控制器建立初始化連接(TCP)种呐,控制器 IP (192.168.56.101) 端口(6653):
ovs-vsctl set-controller <sampleBridgeName> tcp:192.168.56.101:6653