OpenFlow协议
功能
1.0版本Openflow:控制器通過(guò)Openflow協(xié)議與交換機(jī)建立了安全通道(Sceure Channel),下發(fā)流表。
1.3版本Openflow:多控制器,多流表。
用于實(shí)現(xiàn)Controller和Switch之間的通信過(guò)程,定義了一系列標(biāo)準(zhǔn)術(shù)語(yǔ)。
定義了Controller如何來(lái)控制Swithch以及Switch如何來(lái)反饋Ctroller。
定義了Controller和Switch通信過(guò)程的消息類型和格式。
版本
版本升級(jí)功能升級(jí)。
流表
相當(dāng)于傳統(tǒng)網(wǎng)絡(luò)的路由表和CAM表。
傳統(tǒng)網(wǎng)絡(luò)的表是死的,給我就按照上面的做,查找轉(zhuǎn)發(fā)。
SDN的流表,很多張,可編程。
流(Flow)
同一時(shí)間內(nèi),經(jīng)過(guò)同一網(wǎng)絡(luò)并且具有相同屬性的數(shù)據(jù)包集合。
不同情況流的定義可以不同。一般基于端口以及源目IP。
SDN體系中,所有的數(shù)據(jù)都以“流”為單位進(jìn)行處理。
流表(Flow Table)
流過(guò)來(lái)就查表(基于序號(hào)查找)。
每一張流表都有詳細(xì)的流表項(xiàng)。
每一個(gè)流表項(xiàng)中都有相應(yīng)參數(shù),根據(jù)參數(shù)做出相應(yīng)的動(dòng)作(要么轉(zhuǎn),要么丟,不轉(zhuǎn)也不丟,下一張表處理)。
雖然要遞歸似的查表,但是節(jié)約了計(jì)算的時(shí)間,總體上轉(zhuǎn)發(fā)速度加快。
流表項(xiàng)-1.0版本(Flow Entry)
不同版本的Openflow的流表項(xiàng)有些區(qū)別,下面是Openflow1.0版本的流表項(xiàng)。
包含:包頭域、計(jì)數(shù)器、動(dòng)作三個(gè)部分。
包頭域(Header Fields)
除了進(jìn)接口,傳統(tǒng)的2-4層的尋址信息都出現(xiàn)在包頭域中(MAC、IP、PORT)。
Openflow交換機(jī)相比傳統(tǒng)網(wǎng)絡(luò)交換機(jī)(路由器),是一個(gè)模糊的概念,不再區(qū)分二者,所以O(shè)penflow交換機(jī)可以廣義的理解為Openflow轉(zhuǎn)發(fā)設(shè)備(交換機(jī)、路由器、防火墻)。
計(jì)數(shù)器(Counters)
計(jì)數(shù)器主要對(duì)每張表、每個(gè)端口、每個(gè)流等進(jìn)行計(jì)數(shù),方便流量監(jiān)管。
為流量可視化奠定了基礎(chǔ)。
動(dòng)作(Actions)
對(duì)匹配到的流進(jìn)行處理,傳統(tǒng)網(wǎng)絡(luò)中要么轉(zhuǎn)發(fā)要么丟棄,沒(méi)有第三種選擇。Openflow1.0中規(guī)定了必備動(dòng)作(Required Actions)和可選動(dòng)作(Optional Actions)。
必備動(dòng)作-轉(zhuǎn)發(fā)(Forward):
ALL:轉(zhuǎn)發(fā)到所有出口(不包括入口)。
CONTROLLER:封裝并轉(zhuǎn)發(fā)給控制器。
LOCAL:轉(zhuǎn)發(fā)給本地網(wǎng)絡(luò)棧。
TABLE:對(duì)要發(fā)出的包執(zhí)行流表中的行動(dòng)。
IN_PORT:從入口發(fā)出。
必要行動(dòng)-丟棄(Drop)
沒(méi)有明確指明處理行動(dòng)的表項(xiàng),所匹配的所有分組默認(rèn)丟棄。
可選行動(dòng)-轉(zhuǎn)發(fā)
NORMAL:按照傳統(tǒng)交換機(jī)的2層或3層進(jìn)行轉(zhuǎn)發(fā)處理。
FLOOD:通過(guò)最小生成樹從出口泛洪發(fā)出,注意不包括入口。傳統(tǒng)網(wǎng)絡(luò)只有在CAM表空或者滿了的時(shí)候才會(huì)泛洪,現(xiàn)在更加靈活。
可選行動(dòng)-入隊(duì)(Enqueue)
將包轉(zhuǎn)發(fā)到綁定到某個(gè)端口的隊(duì)列中。(流控)
可選行動(dòng)-修改域(Modify-field)
修改包頭內(nèi)容。
這個(gè)動(dòng)作是跟傳統(tǒng)網(wǎng)絡(luò)的最大區(qū)別,Openflow可以對(duì)數(shù)據(jù)包頭部進(jìn)行修改!(可修改2層-4層的信息)。
流表項(xiàng)—1.3版本
Openflow1.0之后都支持多流表,每張表都有獨(dú)立的序號(hào),從序號(hào)最小的開始匹配。
Openflow1.3版本包括了匹配域、優(yōu)先級(jí)、計(jì)數(shù)器、指令、超時(shí)時(shí)間、附屬屬性。
匹配域(Match Fields)
1.0包頭域的拓展,除了2-4層的信息,多了MPLS、IPv6、PBB、Tunnel ID等支持。
1.0能匹配12個(gè)信息,1.3能匹配39個(gè)信息。
Openflow正在覆蓋傳統(tǒng)網(wǎng)絡(luò)協(xié)議。
優(yōu)先級(jí)(Priority)
用于標(biāo)志流表項(xiàng)的匹配優(yōu)先次序,越高越先匹配,默認(rèn)為0。
支持復(fù)雜的策略調(diào)度。
計(jì)數(shù)器(Counters)
在1.0的基礎(chǔ)上,加入了對(duì)每組,每個(gè)動(dòng)作的計(jì)數(shù)。
流量統(tǒng)計(jì)。
指令(Instructions)
相當(dāng)于1.0版本的動(dòng)作(Actions),但是因?yàn)橐肓硕嗔鞅恚嗔撕芏鄰?fù)雜操作:
行動(dòng)集:查到行動(dòng)后,不立即執(zhí)行,放到一個(gè)集合(緩存)中去,最后一起執(zhí)行。
這一段講述了動(dòng)作的疊加,集成,清除。
Required Instruction:Write-Actions action(s):將指定的行動(dòng)添加到正在運(yùn)行的行動(dòng)集中。
Required Instruction:Goto-Table next-table-id:指定流水線處理進(jìn)程中的下一張表的ID。
Optional Instruction:Apply-Actions action(s):立即執(zhí)行指定的行動(dòng),而不改變行動(dòng)集。
Optional Instruction:Meter meter id:直接將包計(jì)量后丟棄。
Optional Instruction:Clear-Actions:在行動(dòng)集中立即清除所有的行動(dòng)。
Optional Instruction:Write-Metadata metadata / mask:在元數(shù)據(jù)區(qū)域記錄元數(shù)據(jù)。
這一段是動(dòng)作
Required Actions:Output:報(bào)文傳輸?shù)街付ǘ丝凇?br /> Required Actions:Drop:丟棄。
Required Actions:Group:用組表處理報(bào)文。
Optional Actions:Set-Queue:設(shè)置報(bào)文隊(duì)列ID,為了Qos的需要。
Optional Actions:Push-Tag / Pop-Tag
Optional Actions:Set-Field:設(shè)置報(bào)文包頭的類型和修改包頭的值。
Optional Actions:Change-TTL:修改TTL的值。
動(dòng)作集順序
copy TTL inwards:apply copy TTL inward actions to the packet.
pop:apply all tag pop actions to the packet.
push-MPLS:apply MPLS tag push action to the packet.
push-PBB:apply PBB tag push action to the packet.
push-VLAN:apply VLAN tag push action to the packet.
copy TTL outwards:apply copy TTL outwards action to the packet.
decrement TTL:apply decrement TTL action to the packet.
set:apply all set-field actions to the packet.
qos:apply all QoS actions,such as set queue to the packet.
group:如果指定了組行動(dòng),那么按照這個(gè)序列中的順序執(zhí)行組行動(dòng)存儲(chǔ)段里的行動(dòng)。
output:如果沒(méi)有指定組行動(dòng),報(bào)文就會(huì)按照output行動(dòng)中指定的端口轉(zhuǎn)發(fā)。
行動(dòng)集與每個(gè)報(bào)文相關(guān),默認(rèn)情況下是空的。
一個(gè)流表項(xiàng)可以使用Write-Action指令或者Clear-Action指令修改行動(dòng)集。
當(dāng)一個(gè)表項(xiàng)的指令集沒(méi)有包含Goto-Table指令時(shí),流水線處理就停止了,然后報(bào)文的行動(dòng)集就被執(zhí)行。
交換機(jī)可以通過(guò)Apply-Actions指令修改行動(dòng)的執(zhí)行順序。
行動(dòng)集包含所有的行動(dòng),無(wú)論它們按照什么順序加入到行動(dòng)集中,行動(dòng)的順序均按照上一段順序執(zhí)行。
超時(shí)時(shí)間(Timeouts)
用于標(biāo)志該流表項(xiàng)的老化時(shí)間,到了超時(shí)時(shí)間就刪除,節(jié)約資源保持準(zhǔn)確性。
附屬信息(Cookie)
由控制器選擇的不透明數(shù)據(jù)值。控制器用來(lái)過(guò)濾統(tǒng)計(jì)數(shù)據(jù)、流改變和流刪除。但處理數(shù)據(jù)包時(shí)不能使用。
流表匹配—1.1版本(Flow Match)
引入了多流表,多流表的流表匹配稱為流水線處理(Pipeline Process)。交換機(jī)從流表0開始查找,序號(hào)從小到大匹配。
每個(gè)包按照優(yōu)先級(jí)去匹配流表中的流表項(xiàng),優(yōu)先級(jí)高的先匹配(被匹配),一旦匹配成功,對(duì)應(yīng)計(jì)數(shù)器將更新,動(dòng)作立即執(zhí)行;如果沒(méi)能找到匹配的表項(xiàng),則轉(zhuǎn)發(fā)給控制器。
流表匹配—1.3版本
1.3版本引入了table-miss的處理和action-set的處理。
之前的版本當(dāng)交換機(jī)沒(méi)有匹配到流表項(xiàng)的時(shí)候,直接丟給Controller處理。而table-miss則用于解決這個(gè)問(wèn)題。
通過(guò)table-miss參數(shù),可以對(duì)數(shù)據(jù)包實(shí)現(xiàn)丟棄、給下一個(gè)表處理、轉(zhuǎn)發(fā)給控制器。
還多了一個(gè)邏輯層—?jiǎng)幼骷?dòng)作的累加。
多流表操作中,每個(gè)表都有獨(dú)立的指令,這些指令(執(zhí)行動(dòng)作)可以在查表的時(shí)候執(zhí)行,也可以通過(guò)指令匯總到action-set再疊加執(zhí)行。
行動(dòng)集與每個(gè)報(bào)文相關(guān),默認(rèn)情況為空。
一個(gè)流表項(xiàng)可以使用Write-Action指令或者Clear-Action指令修改行動(dòng)集。
當(dāng)一個(gè)表項(xiàng)的指令集沒(méi)有包含Goto-Table指令時(shí),流水線處理就停止了,然后報(bào)文的行動(dòng)集就被執(zhí)行。
交換機(jī)可以通過(guò)Apply-Actions指令修改行動(dòng)的執(zhí)行順序。
行動(dòng)集包含所有的行動(dòng),無(wú)論它們按照什么順序加入到行動(dòng)集中,行動(dòng)按照指定順序執(zhí)行。
單表時(shí),只有action動(dòng)作;多表環(huán)境下,多個(gè)action操作累加則為action-set動(dòng)作集。
決定action-set中的一堆動(dòng)作如何工作,便是Instruction指令。指令可以將動(dòng)作寫入、修改到動(dòng)作集action-set中,或者可以直接在讀表時(shí)執(zhí)行。
多流表最核心的內(nèi)容:疊加執(zhí)行。
流表的生成
傳統(tǒng)路由技術(shù)中,建立一張路由表,需要路由器和路由器之間運(yùn)行路由協(xié)議,然后相互交互路由條目,之后達(dá)到路由共享。這種架構(gòu)是一種P2P架構(gòu)(雙方對(duì)等)。
SDN的想法是類似的,在控制器和交換機(jī)直接運(yùn)行Openflow協(xié)議,不同的是,這里是一種C/S架構(gòu)(客戶端服務(wù)器架構(gòu))。由控制器統(tǒng)一計(jì)算后再下發(fā)給Openflow交換機(jī)流表項(xiàng)信息。
總結(jié)
以上是生活随笔為你收集整理的OpenFlow协议的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 不关注公众号可以获取openid吗_微信
- 下一篇: android studio gradl