OpenFlow1.3
1.OpenFlow端口
OpenFlow端口是OpenFlow處理進(jìn)程和網(wǎng)絡(luò)之間傳遞數(shù)據(jù)包的網(wǎng)絡(luò)接口。OpenFlow交換機(jī)之間通過OpenFlow端口在邏輯上相互連接。
OpenFlow的數(shù)據(jù)包從入口端口接收,經(jīng)過OpenFlow的流水線處理,可將它們轉(zhuǎn)發(fā)到輸出端口。輸入端口是數(shù)據(jù)包的屬性,貫穿整個(gè)OpenFlow流水線,代表數(shù)據(jù)包是從哪個(gè)端口接收的。在進(jìn)行報(bào)文匹配的時(shí)候會(huì)用到入端口。OpenFlow流水線可以決定數(shù)據(jù)包通過輸出行動(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í),用來確認(rèn)控制器的數(shù)據(jù)包 |
| TABLE | OpenFlow流水線的開始,僅在輸出時(shí)有效 |
| IN PORT | 代表數(shù)據(jù)包的輸入端口,用于輸出時(shí),僅能通過入端口發(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)沒有GOTO指令時(shí),流水線處理停止,數(shù)據(jù)包將會(huì)進(jìn)行轉(zhuǎn)發(fā)操作。
若數(shù)據(jù)包在流表中沒有匹配到流表項(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)容 | 說明 |
|---|---|
| 匹配字段 | 對(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ù)值??刂破饔脕磉^濾統(tǒng)計(jì)數(shù)據(jù),流改變和刪除 |
流表項(xiàng)通過匹配字段和優(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地址。除了通過數(shù)據(jù)包報(bào)頭中進(jìn)行匹配,也可以通過入口端口和元數(shù)據(jù)字段進(jìn)行匹配。元數(shù)據(jù)可以用來在一個(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ù)包通過CONTROLLER端口發(fā)送到控制器,那么報(bào)文中的信息必須與一個(gè)table-miss表項(xiàng)匹配。
2.5 流表項(xiàng)刪除
流表項(xiàng)可以通過兩種方式在流表中刪除,控制器的請(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)容 | 說明 |
|---|---|
| 組編號(hào) | 一個(gè)32位的無符號(hào)整數(shù),唯一標(biāo)識(shí)該組 |
| 組類型 | 確定組語義 |
| 計(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)容 | 說明 |
|---|---|
| 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)容 | 說明 |
|---|---|
| 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ì)列來實(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)容及說明:
| 內(nèi)容 | 說明 |
|---|---|
| 計(jì)量的標(biāo)識(shí)符 | 一個(gè)32位的無符號(hào)整數(shù)唯一識(shí)別符 |
| 計(jì)量帶 | 無序列表,定義帶的速度和處理數(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)容和說明
| 內(nèi)容 | 說明 |
|---|---|
| 帶類型 | 定義了數(shù)據(jù)包怎樣被處理 |
| 計(jì)量率 | 選擇計(jì)量帶,定義了帶可以運(yùn)行的最低速率 |
| 計(jì)數(shù)器 | 當(dāng)數(shù)據(jù)包被計(jì)量帶處理時(shí)更新 |
| 類型參數(shù) | 帶類型的可選參數(shù) |
帶類型可選(Optional)參數(shù)
| 內(nèi)容 | 說明 |
|---|---|
| drop | 丟棄數(shù)據(jù)包,可以用來定義的速率限制帶 |
| dscp remark | 減少數(shù)據(jù)包的IP頭中的DSCP字段丟棄的優(yōu)先級(jí)??捎糜诙x一個(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)容 | 說明 |
|---|---|
| Meter meter id | 直接將包計(jì)量后丟棄 |
| Apply-Actions action | 立即進(jìn)行指定的行動(dòng),而不改變行動(dòng)集,通常用來修改數(shù)據(jù)包 |
| Clear-Actions | 在行動(dòng)集中立即清除所有的行動(dòng) |
| Write-Metadata metadata/mask | 在元數(shù)據(jù)區(qū)域記錄元數(shù)據(jù) |
- 必備(Required)
| 內(nèi)容 | 說明 |
|---|---|
| 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)的指令集沒有包含Goto-Table指令時(shí),流水線處理就停止,報(bào)文行動(dòng)集被執(zhí)行。
行動(dòng)集包含所有的行動(dòng),無論他們以什么順序加入到行動(dòng)集中,行動(dòng)集的順序均按照下列順序執(zhí)行。如果行動(dòng)集包含組行動(dòng),那么行動(dòng)桶中的行動(dòng)也按照下列順序執(zhí)行,交換機(jī)可以通過Apply-Actions指令修改行動(dòng)執(zhí)行順序。
| 順序 | 內(nèi)容 | 說明 |
|---|---|---|
| 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 | 如果沒有指定組行動(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)作 | 說明 |
|---|---|
| Output | 報(bào)文輸出到指定端口 |
| Drop | 丟棄 |
| Group | 用組表處理報(bào)文 |
- 可選行動(dòng)
| 動(dòng)作 | 說明 |
|---|---|
| Set-Queue | 設(shè)置報(bào)文的隊(duì)列ID,為了Qos需求 |
| Push-Tag/Pop-Tag | |
| Set-Field | 設(shè)置報(bào)文包頭的類型和修改包頭的值 |
| Change-TTL | 修改TTL值 |
3.OpenFlow通道
OpenFlow通道是交換機(jī)連接控制器的接口,通過這個(gè)接口,控制器可以對(duì)交換機(jī)進(jìn)行管理和配置,接收交換機(jī)信息并向交換機(jī)發(fā)送數(shù)據(jù)包。
消息被封裝為openflow協(xié)議中規(guī)定的格式在交換機(jī)和控制器之間傳輸,運(yùn)行在安全傳輸層協(xié)議和無保護(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)容 | 說明 |
|---|---|
| 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 | 控制器通過交換機(jī)向指定端口發(fā)送數(shù)據(jù)包 |
| Barrier | 控制器確保消息依賴滿足,接收完成操作通知 |
- asynchronous
| 內(nèi)容 | 說明 |
|---|---|
| Packet-in | 數(shù)據(jù)包在交換機(jī)中沒有匹配項(xiàng)時(shí),通過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ā)生問題時(shí)觸發(fā) |
- symmetric
| 內(nèi)容 | 說明 |
|---|---|
| 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)后通過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)行完全訪問。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訪問,只要不指定異步消息,將不能向SLAVE發(fā)送除Port-Status消息之外的消息。