OpenFlow1.3
1.OpenFlow端口
OpenFlow端口是OpenFlow處理進(jìn)程和網(wǎng)絡(luò)之間傳遞數(shù)據(jù)包的網(wǎng)絡(luò)接口把跨。OpenFlow交換機(jī)之間通過(guò)OpenFlow端口在邏輯上相互連接艳狐。
OpenFlow的數(shù)據(jù)包從入口端口接收,經(jīng)過(guò)OpenFlow的流水線處理毙籽,可將它們轉(zhuǎn)發(fā)到輸出端口。輸入端口是數(shù)據(jù)包的屬性,貫穿整個(gè)OpenFlow流水線,代表數(shù)據(jù)包是從哪個(gè)端口接收的蝙搔。在進(jìn)行報(bào)文匹配的時(shí)候會(huì)用到入端口。OpenFlow流水線可以決定數(shù)據(jù)包通過(guò)輸出行動(dòng)發(fā)送到輸出端口考传,它定義了數(shù)據(jù)包怎樣傳到網(wǎng)絡(luò)中吃型。
OpenFlow交換機(jī)必須支持的三種類型的標(biāo)準(zhǔn)端口:物理端口,邏輯端口僚楞,保留端口勤晚。
1.1 物理端口
OpenFlow的物理端口為交換機(jī)的一個(gè)硬件接口。在一些部署中镜硕,OpenFlow交換機(jī)可以實(shí)現(xiàn)硬件的虛擬化运翼,在這種情況下,OpenFlow物理端口可以代表一個(gè)與交換機(jī)硬件接口對(duì)應(yīng)的虛擬切片兴枯。
1.2 邏輯端口
OpenFlow的邏輯端口為交換機(jī)定義的端口血淌,并不直接對(duì)應(yīng)一個(gè)交換機(jī)的硬件接口,是一個(gè)更高層次的概念财剖,可能包括報(bào)文封裝悠夯,映射物理端口的功能,也可能是不使用的端口躺坟。相對(duì)于物理端口沦补,邏輯端口的數(shù)據(jù)包中存在一個(gè)叫做隧道ID的額外的元數(shù)據(jù)字段與之關(guān)聯(lián);當(dāng)邏輯端口接收的分組被發(fā)送的控制器時(shí)咪橙,其邏輯端口和相應(yīng)底層的物理端口都要報(bào)告給控制器夕膀。
1.3 保留端口
OpenFlow的保留端口,通常用作轉(zhuǎn)發(fā)動(dòng)作美侦,如:發(fā)送到控制器产舞,泛洪,或使用非OpenFlow的方法轉(zhuǎn)發(fā)菠剩,即正常交換機(jī)處理方式易猫。
OpenFlow交換機(jī)的保留端口可以分為“Required”(必備)和“Optional”(可選)兩種方式。
- Required(必備)
動(dòng)作 | 內(nèi)容 |
---|---|
ALL | 轉(zhuǎn)發(fā)特定的數(shù)據(jù)包到所有端口(包括數(shù)據(jù)包的入端口) |
CONTROLLER | OpenFlow控制器的控制通道具壮,作為出端口時(shí)進(jìn)行封裝數(shù)據(jù)包消息并使用OpenFlow協(xié)議發(fā)送准颓。作為入端口時(shí)哈蝇,用來(lái)確認(rèn)控制器的數(shù)據(jù)包 |
TABLE | OpenFlow流水線的開始,僅在輸出時(shí)有效 |
IN PORT | 代表數(shù)據(jù)包的輸入端口攘已,用于輸出時(shí)炮赦,僅能通過(guò)入端口發(fā)送的數(shù)據(jù)包 |
ANY | 用于未指定端口的OpenFlow指令 |
- Optional(可選)
動(dòng)作 | 內(nèi)容 |
---|---|
LOCAL | 交換機(jī)的本地網(wǎng)絡(luò)堆棧和管理堆棧 |
NORMAL | 代表傳統(tǒng)的非OpenFlow流水線,僅用于一個(gè)輸出端口 |
FLOOD | 使用普通流水線處理進(jìn)行泛洪(發(fā)往所有端口但不包括入端口) |
2.OpenFlow表
2.1 流水線處理
每個(gè)OpenFlow交換機(jī)的流水線包含多個(gè)流表贯被,每個(gè)流表包含多個(gè)流表項(xiàng)眼五,OpenFlow的流水線處理頂一個(gè)數(shù)據(jù)包如何與那些流表進(jìn)行交互。OpenFlow交換機(jī)至少具有一個(gè)流表彤灶。
- 流水線流程
OpenFlow交換機(jī)流表按標(biāo)號(hào)從0開始看幼,且總是從第一個(gè)流表開始,數(shù)據(jù)包與流表0的流表項(xiàng)進(jìn)行匹配幌陕,其他的流表根據(jù)第一個(gè)表的匹配結(jié)果進(jìn)行調(diào)用诵姜。在對(duì)某個(gè)流表的流表項(xiàng)進(jìn)行匹配時(shí),如果匹配到了流表項(xiàng)搏熄,則該流表項(xiàng)內(nèi)的指令集被執(zhí)行棚唆,這些指令可能包括指導(dǎo)數(shù)據(jù)包傳遞到另一個(gè)流表的Goto指令,在那里進(jìn)行同樣的處理(流水線處理只能前進(jìn)心例,即goto指令只能指向比它大的流表)宵凌。流水線的最后一個(gè)表項(xiàng)可以不包括GOTO指令。當(dāng)數(shù)據(jù)包匹配到的流表項(xiàng)沒(méi)有GOTO指令時(shí)止后,流水線處理停止瞎惫,數(shù)據(jù)包將會(huì)進(jìn)行轉(zhuǎn)發(fā)操作。
若數(shù)據(jù)包在流表中沒(méi)有匹配到流表項(xiàng)译株,這是一個(gè)table-miss行為瓜喇,table-miss將會(huì)對(duì)數(shù)據(jù)包進(jìn)行丟棄或傳遞到另一個(gè)表中取決于table-miss流表的配置∏该樱或者根據(jù)數(shù)據(jù)包的信息轉(zhuǎn)發(fā)到控制器乘寒。
2.2 流表
一個(gè)流表中包含多個(gè)流表項(xiàng),每個(gè)流表項(xiàng)包含:
Match Fields | Priority | Counters | Instructions | Timeouts | Cookie |
---|
內(nèi)容 | 說(shuō)明 |
---|---|
匹配字段 | 對(duì)數(shù)據(jù)包匹配匪补,包括端口和數(shù)據(jù)包報(bào)頭伞辛,及前一個(gè)表指定的可選元數(shù)據(jù) |
優(yōu)先級(jí) | 流表項(xiàng)的匹配次序 |
計(jì)數(shù)器 | 更新匹配數(shù)據(jù)包的計(jì)數(shù) |
指令 | 修改行動(dòng)集或流水線處理 |
超時(shí) | 最大時(shí)間計(jì)數(shù)或流有效時(shí)間 |
cookie | 由控制器選擇的不透明數(shù)據(jù)值『蝗保控制器用來(lái)過(guò)濾統(tǒng)計(jì)數(shù)據(jù)始锚,流改變和刪除 |
流表項(xiàng)通過(guò)匹配字段和優(yōu)先級(jí)決定,在一個(gè)流表中匹配字段和優(yōu)先級(jí)共同確定唯一的流表項(xiàng)喳逛。所有字段通配和優(yōu)先級(jí)為0的流表項(xiàng)為table-miss流表項(xiàng)。
2.3 匹配
- 匹配流程
OpenFlow交換機(jī)在接收到一個(gè)數(shù)據(jù)包后棵里,開始從第一個(gè)流表润文,并基于流水線的方式進(jìn)行查找姐呐。
數(shù)據(jù)匹配字段從數(shù)據(jù)包中提取,用于表查找的數(shù)據(jù)包匹配字段依賴于數(shù)據(jù)包類型典蝌,這些類型通常包括各種數(shù)據(jù)包的報(bào)頭字段曙砂,如:以太網(wǎng)源地址或IPV4地址。除了通過(guò)數(shù)據(jù)包報(bào)頭中進(jìn)行匹配骏掀,也可以通過(guò)入口端口和元數(shù)據(jù)字段進(jìn)行匹配鸠澈。元數(shù)據(jù)可以用來(lái)在一個(gè)交換機(jī)的不同表里面?zhèn)鬟f信息。報(bào)文匹配字段標(biāo)識(shí)報(bào)文的當(dāng)前狀態(tài)截驮,如果在前一個(gè)表中使用Apply-Actions改變了數(shù)據(jù)包的報(bào)頭笑陈,那么這些變化也會(huì)在數(shù)據(jù)包匹配字段中反映。
數(shù)據(jù)包匹配字段中的值用于查找匹配的流表項(xiàng)葵袭,如果流表項(xiàng)字段具有值得ANY涵妥,他就可以匹配報(bào)頭中的所有可能值。數(shù)據(jù)包與表進(jìn)行匹配坡锡,優(yōu)先級(jí)最高的表項(xiàng)必須被選擇蓬网,且與選擇流表項(xiàng)相關(guān)的計(jì)數(shù)器會(huì)更新,選定流表項(xiàng)的指令集也被執(zhí)行鹉勒。若多個(gè)匹配的流表項(xiàng)有相同的最高優(yōu)先級(jí)帆锋,所選擇的流表項(xiàng)被確定為未定義表項(xiàng)。
2.4 Table-miss
每一個(gè)流表必須能處理table-miss的流表項(xiàng)禽额。table-miss表項(xiàng)指定在流表中如何處理與其他流表項(xiàng)未匹配的數(shù)據(jù)包锯厢。比如講數(shù)據(jù)包發(fā)送到控制器,丟棄數(shù)據(jù)包或直接將包扔到后續(xù)的表绵疲。
table-miss的流表項(xiàng)也有他的匹配字段和優(yōu)先級(jí)哲鸳,它通配所有匹配字段,且優(yōu)先級(jí)最低(0)盔憨。table-miss流表項(xiàng)的匹配可能會(huì)不屬于正常范圍內(nèi)流表支持的匹配徙菠,例如精確匹配會(huì)不支持在其他流表項(xiàng)中使用通配符,但必須支持table-miss的通配符流表項(xiàng)郁岩。table-miss流表項(xiàng)的行為在許多方面像任何其他流表項(xiàng)婿奔,流表中不存在table-miss表項(xiàng),控制器可以在任何時(shí)候添加或刪除它问慎,它也可能會(huì)超時(shí)失效萍摊。table-miss流表項(xiàng)能夠匹配其他流表項(xiàng)不能匹配的數(shù)據(jù),當(dāng)數(shù)據(jù)包與table-miss表項(xiàng)匹配時(shí)如叼,table-miss表項(xiàng)指令就會(huì)執(zhí)行冰木。如果該table-miss表項(xiàng)直接將數(shù)據(jù)包通過(guò)CONTROLLER端口發(fā)送到控制器,那么報(bào)文中的信息必須與一個(gè)table-miss表項(xiàng)匹配。
2.5 流表項(xiàng)刪除
流表項(xiàng)可以通過(guò)兩種方式在流表中刪除踊沸,控制器的請(qǐng)求或交換機(jī)流超時(shí)機(jī)制歇终。
2.6 組表
組表包括若干組表項(xiàng),這也是一種openflow轉(zhuǎn)發(fā)方法逼龟,就是若干流表項(xiàng)指向一組
Group Identifier | Group Type | Counters | Action Buckets |
---|
每個(gè)組表項(xiàng)由組編號(hào)確定具體為:
內(nèi)容 | 說(shuō)明 |
---|---|
組編號(hào) | 一個(gè)32位的無(wú)符號(hào)整數(shù)评凝,唯一標(biāo)識(shí)該組 |
組類型 | 確定組語(yǔ)義 |
計(jì)數(shù)器 | 當(dāng)報(bào)文被組表處理時(shí)更新數(shù)據(jù) |
行動(dòng)桶 | 包含一組要執(zhí)行的動(dòng)作和參數(shù) |
- 組類型(Group Types)
組類型包括必備(Required)選項(xiàng)和可選(Optional)選項(xiàng)。
必備選項(xiàng)(Required)
內(nèi)容 | 說(shuō)明 |
---|---|
all | 執(zhí)行組中所有行動(dòng)桶腺律,用于多播或廣播的轉(zhuǎn)發(fā) |
indirect | 執(zhí)行組中定義的一個(gè)動(dòng)作桶奕短,這個(gè)組只支持單一的動(dòng)作桶,允許多個(gè)流表項(xiàng)或組指向一個(gè)組編號(hào) |
可選選項(xiàng)(Optional)
內(nèi)容 | 說(shuō)明 |
---|---|
select | 執(zhí)行組中的一個(gè)動(dòng)作桶 |
fast failover | 執(zhí)行一個(gè)活躍的動(dòng)作桶 |
2.7 計(jì)量表
一個(gè)計(jì)量表包含若干個(gè)計(jì)量表項(xiàng)匀钧,確定每個(gè)流量的計(jì)數(shù)翎碑,單位流量的計(jì)量可以使OpenFlow實(shí)現(xiàn)各種簡(jiǎn)單的QoS業(yè)務(wù),如:限速榴捡,并且可以結(jié)合每個(gè)端口隊(duì)列來(lái)實(shí)現(xiàn)復(fù)雜的QoS框架杈女,如:DiffServ。
計(jì)量可以測(cè)試數(shù)據(jù)包的速率吊圾,使這些數(shù)據(jù)包可以實(shí)現(xiàn)速率控制达椰。計(jì)量直接連接到流表項(xiàng)。任意的流表項(xiàng)可以在它的指令集中定義一個(gè)計(jì)量项乒,計(jì)量測(cè)量和控制和它相連的所有流的速率啰劲,在同一個(gè)表中可以使用多個(gè)計(jì)量,但必須使用分離的流表項(xiàng)檀何。
Meter Idertifier | Meter Bands | Counters |
---|
每個(gè)計(jì)量表項(xiàng)所含內(nèi)容及說(shuō)明:
內(nèi)容 | 說(shuō)明 |
---|---|
計(jì)量的標(biāo)識(shí)符 | 一個(gè)32位的無(wú)符號(hào)整數(shù)唯一識(shí)別符 |
計(jì)量帶 | 無(wú)序列表蝇裤,定義帶的速度和處理數(shù)據(jù)包的方式 |
計(jì)數(shù)器 | 報(bào)文被計(jì)量表項(xiàng)處理時(shí)更新 |
- Meter Bands(計(jì)量表帶)
每個(gè)計(jì)量表可能有一個(gè)或多個(gè)計(jì)量帶,每個(gè)計(jì)量帶指定適用的速率和數(shù)據(jù)被處理的方式频鉴。每個(gè)計(jì)量帶包括:
Band Type | Rate | Counters | Type specific arguments |
---|
內(nèi)容和說(shuō)明
內(nèi)容 | 說(shuō)明 |
---|---|
帶類型 | 定義了數(shù)據(jù)包怎樣被處理 |
計(jì)量率 | 選擇計(jì)量帶栓辜,定義了帶可以運(yùn)行的最低速率 |
計(jì)數(shù)器 | 當(dāng)數(shù)據(jù)包被計(jì)量帶處理時(shí)更新 |
類型參數(shù) | 帶類型的可選參數(shù) |
帶類型可選(Optional)參數(shù)
內(nèi)容 | 說(shuō)明 |
---|---|
drop | 丟棄數(shù)據(jù)包,可以用來(lái)定義的速率限制帶 |
dscp remark | 減少數(shù)據(jù)包的IP頭中的DSCP字段丟棄的優(yōu)先級(jí)垛孔∨核Γ可用于定義一個(gè)簡(jiǎn)單的DiffServ策略 |
2.8 計(jì)數(shù)器
計(jì)數(shù)器可以進(jìn)行如下計(jì)數(shù):每一個(gè)流表,流量入口周荐,端口隊(duì)列狭莱,組,動(dòng)作桶概作,計(jì)量表腋妙,計(jì)量帶。主要用于統(tǒng)計(jì)流量信息讯榕,例如活動(dòng)表項(xiàng)骤素,查找次數(shù)匙睹,發(fā)送包數(shù)等。如下所示為OpenFlow規(guī)范中定義的計(jì)數(shù)器集:
- Per Flow Table
Counter | Bits | |
---|---|---|
Reference count(active entries) | 32 | Required |
Packet Lookups | 64 | Optional |
Packet Matches | 64 | Optional |
- Per Flow Entry
Counter | Bits | |
---|---|---|
Received Packets | 64 | Optional |
Received Bytes | 64 | Optional |
Duration(second) | 32 | Required |
Duration(nanoseconds) | 32 | Optional |
- Per Port
Counter | Bits | |
---|---|---|
Received Packets | 64 | Required |
Transmitted Packets | 64 | Required |
Received Bytes | 64 | Optional |
Transmitted Bytes | 64 | Optional |
Received Drops | 64 | Optional |
Transmit Drops | 64 | Optional |
Received Errors | 64 | Optional |
Transmit Errors | 64 | Optional |
Received Frame Alignment Errors | 64 | Optional |
Received Overrun Errors | 64 | Optional |
Receive CRC Errors | 64 | Optional |
collisions | 64 | Optional |
Duration(seconds) | 32 | Required |
Druation(nanoseconds) | 32 | Optional |
- Per Queue
Counter | Bits | |
---|---|---|
Transmit Packets | 64 | Required |
Transmit Bytes | 64 | Optional |
Transmit Overrun Errors | 64 | Optional |
Duration(seconds) | 32 | Required |
Durqation(nanoseconds) | 32 | Optional |
- Per Group
Counter | Bits | |
---|---|---|
Reference Count(flow entries) | 32 | Optional |
Packet Count | 64 | Optional |
Byte Count | 64 | Optional |
Duration(seconds) | 32 | Required |
Durqation(nanoseconds) | 32 | Optional |
- Per Group Bucket
Counter | Bits | |
---|---|---|
Packet Count | 64 | Optional |
Byte Count | 64 | Optional |
- Per Meter
Counter | Bits | |
---|---|---|
Flow Count | 32 | Optional |
Input Packet Count | 64 | Optional |
Input Byte Count | 64 | Optional |
Duration(seconds) | 32 | Required |
Durqation(nanoseconds) | 32 | Optional |
- Per Meter Band
Counter | Bits | |
---|---|---|
In Band Packet Count | 64 | Optional |
In Band Byte Count | 64 | Optional |
2.9 指令
每個(gè)流表項(xiàng)中包含一組指令谆甜,當(dāng)一個(gè)數(shù)據(jù)包匹配流表項(xiàng)時(shí)指令會(huì)被執(zhí)行垃僚,這些指令可以更改數(shù)據(jù)包,行動(dòng)組或流水線處理规辱。
OpenFlow中包含的指令如下:
- 可選(Optional)
內(nèi)容 | 說(shuō)明 |
---|---|
Meter meter id | 直接將包計(jì)量后丟棄 |
Apply-Actions action | 立即進(jìn)行指定的行動(dòng),而不改變行動(dòng)集栽燕,通常用來(lái)修改數(shù)據(jù)包 |
Clear-Actions | 在行動(dòng)集中立即清除所有的行動(dòng) |
Write-Metadata metadata/mask | 在元數(shù)據(jù)區(qū)域記錄元數(shù)據(jù) |
- 必備(Required)
內(nèi)容 | 說(shuō)明 |
---|---|
Write-Actions action | 將指定的行動(dòng)添加到正在運(yùn)行的行動(dòng)集 |
Goto-Table next-table-id | 指定流水線處理進(jìn)程中下一張表的ID |
2.10 行動(dòng)集
行動(dòng)集與每個(gè)報(bào)文相關(guān)罕袋,默認(rèn)為空,一個(gè)流表項(xiàng)可以使用Write-Actions指令或者Clear-Action指令修改行動(dòng)集碍岔。行動(dòng)集在表間被累加浴讯。當(dāng)一個(gè)表項(xiàng)的指令集沒(méi)有包含Goto-Table指令時(shí),流水線處理就停止蔼啦,報(bào)文行動(dòng)集被執(zhí)行榆纽。
行動(dòng)集包含所有的行動(dòng),無(wú)論他們以什么順序加入到行動(dòng)集中捏肢,行動(dòng)集的順序均按照下列順序執(zhí)行奈籽。如果行動(dòng)集包含組行動(dòng),那么行動(dòng)桶中的行動(dòng)也按照下列順序執(zhí)行鸵赫,交換機(jī)可以通過(guò)Apply-Actions指令修改行動(dòng)執(zhí)行順序衣屏。
順序 | 內(nèi)容 | 說(shuō)明 |
---|---|---|
1 | copy TTL inwards | apply copy TTL inward actions to the packet |
2 | pop | apply all tag pop actions to the packet |
3 | push-MPLS | apply MPLS tag push action tothe packet |
4 | push-PBB | apply PBB tag push action to the packet |
5 | push-VLAN | apply VLAN tag push action to the packet |
6 | copy TTL outwards | apply copy TTL outwards action to the packet |
7 | decrement TTL | apply decrement TTL action to the packet |
8 | set | apply all set-field actions to the packet |
9 | qos | apply all QoS actions, such as set queue to the packet |
10 | group | 如果指定了組行動(dòng),那么按照這個(gè)序列中的順序執(zhí)行組行動(dòng)存儲(chǔ)段里的行動(dòng) |
11 | output | 如果沒(méi)有指定組行動(dòng)辩棒,報(bào)文就會(huì)按照 output 行動(dòng)中指定的端口轉(zhuǎn)發(fā) |
注:Output行動(dòng)最后執(zhí)行狼忱,如果行動(dòng)組和輸出行動(dòng)均存在,行動(dòng)組優(yōu)先級(jí)最高一睁,兩個(gè)均不存在钻弄,報(bào)文被丟棄。
2.11 行動(dòng)列表
Apply-Actions指令和Packet-out消息中存在行動(dòng)列表者吁,行動(dòng)效果累加窘俺,全部都會(huì)執(zhí)行。
2.12 行動(dòng)
- 必備動(dòng)作
動(dòng)作 | 說(shuō)明 |
---|---|
Output | 報(bào)文輸出到指定端口 |
Drop | 丟棄 |
Group | 用組表處理報(bào)文 |
- 可選行動(dòng)
動(dòng)作 | 說(shuō)明 |
---|---|
Set-Queue | 設(shè)置報(bào)文的隊(duì)列ID砚偶,為了Qos需求 |
Push-Tag/Pop-Tag | |
Set-Field | 設(shè)置報(bào)文包頭的類型和修改包頭的值 |
Change-TTL | 修改TTL值 |
3.OpenFlow通道
OpenFlow通道是交換機(jī)連接控制器的接口批销,通過(guò)這個(gè)接口,控制器可以對(duì)交換機(jī)進(jìn)行管理和配置染坯,接收交換機(jī)信息并向交換機(jī)發(fā)送數(shù)據(jù)包均芽。
消息被封裝為openflow協(xié)議中規(guī)定的格式在交換機(jī)和控制器之間傳輸,運(yùn)行在安全傳輸層協(xié)議和無(wú)保護(hù)的tcp連接上单鹿。
3.1 OpenFlow協(xié)議
OpenFlow協(xié)議支持三種消息類型:controller-to-switch掀宋,asynchronous(異步)和symmetric(對(duì)稱),三種消息類型又有多個(gè)子消息類型。
controller-to-switch消息由控制器發(fā)出劲妙,主要用于管理和獲取switch狀態(tài)湃鹊;asynchronous消息由switch發(fā)出,用于網(wǎng)絡(luò)事件和交換機(jī)狀態(tài)變化更新發(fā)送到控制器镣奋;symmetric消息可以由交換機(jī)或控制器發(fā)出币呵。
- controller-to-switch
內(nèi)容 | 說(shuō)明 |
---|---|
Features | 建立傳輸安全會(huì)話時(shí),控制器發(fā)送給交換機(jī)侨颈,交換機(jī)應(yīng)答交換機(jī)所支持的功能 |
Configuration | 控制器用于設(shè)置或查詢交換機(jī)上的配置信息余赢,交換機(jī)需應(yīng)答查詢信息 |
Modify-state | 控制器管理交換機(jī)流表項(xiàng)和端口狀態(tài) |
Read-state | 控制器想交換機(jī)請(qǐng)求關(guān)于流或數(shù)據(jù)包的統(tǒng)計(jì)信息 |
Packet-out | 控制器通過(guò)交換機(jī)向指定端口發(fā)送數(shù)據(jù)包 |
Barrier | 控制器確保消息依賴滿足,接收完成操作通知 |
- asynchronous
內(nèi)容 | 說(shuō)明 |
---|---|
Packet-in | 數(shù)據(jù)包在交換機(jī)中沒(méi)有匹配項(xiàng)時(shí)哈垢,通過(guò)Packet-in消息發(fā)送給控制器 |
Flow-removed | 交換機(jī)的流表項(xiàng)因?yàn)槌瑫r(shí)或修改等原因被刪除掉妻柒,會(huì)觸發(fā)此消息 |
Port-status | 交換機(jī)端口狀態(tài)發(fā)生變化時(shí)觸發(fā) |
Error | 交換機(jī)發(fā)生問(wèn)題時(shí)觸發(fā) |
- symmetric
內(nèi)容 | 說(shuō)明 |
---|---|
Hello | 交換機(jī)和控制器用于建立連接 |
Echo | 交換機(jī)和控制器均可以發(fā)送Echo,接收者需回復(fù)Echo reply耘分。用于測(cè)量延遲举塔,是否保持連接 |
Vendor | 交換機(jī)提供附加信息 |
3.2 建立連接
OpenFlow連接建立后,交換機(jī)和控制器必須先要發(fā)送OFPT_HELLO消息給對(duì)方求泰,該消息攜帶雙方支持的最高版本號(hào)央渣,接收方將采用雙方都支持的最低協(xié)議版本進(jìn)行通信。發(fā)現(xiàn)共同支持的協(xié)議版本拜秧,則進(jìn)行連接痹屹,否則發(fā)送OFPT_ERROR消息,中斷連接枉氮。
3.3 加密
安全通道用TLS連接加密志衍,交換機(jī)啟動(dòng)后通過(guò)6633端口進(jìn)行TCP連接,雙方交換證書進(jìn)行認(rèn)證聊替。
3.4 中斷連接
連接異常時(shí)楼肪,交換機(jī)嘗試去連接備份的控制器。當(dāng)多次連接失敗后惹悄,交換機(jī)進(jìn)入緊急模式春叫,重置所有的TCP連接。此后泣港,數(shù)據(jù)包匹配指定的緊急模式流表項(xiàng)暂殖,刪除其他正常流表項(xiàng)。
3.5 多控制器
交換機(jī)可以與多臺(tái)控制器建立連接当纱,進(jìn)行故障轉(zhuǎn)移和負(fù)載均衡呛每。
3.5.1 Role
與多臺(tái)控制器建立連接時(shí),各個(gè)控制器具有名為Role(角色)的作用坡氯,Role可以分為:
- EQUAL
- MASTER
- SLAVE
默認(rèn)的Role為EQUAL晨横。當(dāng)為EQUAL時(shí)洋腮,各個(gè)控制器具有相同的作用,也可以對(duì)OpenFlow交換機(jī)進(jìn)行完全訪問(wèn)手形。EQUAL控制器可以對(duì)交換機(jī)發(fā)送Flow-Mod消息啥供,變更交換機(jī)設(shè)置,在默認(rèn)設(shè)置中库糠,OpenFlow交換機(jī)向EQUAL控制器發(fā)送所有的異步消息伙狐。
對(duì)于MASTER控制器,具有和EQUAL相同的權(quán)限曼玩,但是一個(gè)拓?fù)渲兄荒艽嬖谝粋€(gè)MASTER鳞骤,一個(gè)OpenFlow交換機(jī)只能與一個(gè)MASTER控制器連接,同時(shí)黍判,其他的控制器被置為SLAVE。
當(dāng)交換機(jī)為SLAVE時(shí)篙梢,OpenFlow控制器只能對(duì)OpenFlow交換機(jī)進(jìn)行Read-Only訪問(wèn)顷帖,只要不指定異步消息,將不能向SLAVE發(fā)送除Port-Status消息之外的消息渤滞。