一:OpenFlow協議概述
OpenFlow協議為控制器與交換機之間的通信,提供了一種開放標准的方式。OpenFlow交換機通過安全通道與控制器進行信息交互
二:OpenFlow消息類型
(一)controller-to-switch消息
1.Features消息
在建立傳輸安全會話時,控制器主動向交換機發送Feature_Request消息,請求交換機的特性信息,交換機通過Feature_Reply消息回復所支持的功能特性
2.Configuration消息
可以設置查詢交換機的配置信息,交換機需應答查詢請求
3.Modify-state消息
修改狀態消息主要用於增加、修改、刪除交換機的流表項、組表項及端口狀態
4.Read-state消息
5.Send-packet消息
一般用於響應Packet-in消息的處理,Packet-out信息必須攜帶一個Buffer_id,來定位緩存在交換機上的數據包
6.Barrier消息
用於告知控制器該報文之前的動作均已執行
(二)asynchronous信息(異步)
這類消息的觸發不是由控制器觸發,而是有交換機主動發起的,用於告知控制器新數據包的到達,和交換機狀態的改變
1.Packet-in消息
2.Flow-removed消息
3.Port-status消息
4.Error消息
(三)symmtric消息(對稱)
兩邊都可以發送
1.Hello消息
2.Echo消息
該消息用於測量延遲、帶寬或用於保持活動連接
3.Vendor消息
三:OpenFlow的消息格式
由OpenFlow頭部和OpenFlow消息體組成
(一)OpenFlow頭部
(二) OpenFlow消息體
與具體的消息類型有關,消息類型是一種枚舉類型,每種消息類型被定義為一個常數
四:OpenFlow協議的主要通信流程
(一)控制器和交換機連接的建立
(二)雙方建立TLS隧道后,方法發送hello消息進行版本協商
如果協議版本協商成功,則連接建立。否則發送Error消息描述協商失敗原因,並終止連接
(三)協商完成后,控制器和交換機之間發送Features消息,獲取交換機參數
參數包括支持的buffer數目、流表數、Actions等
(四)控制器發送SET_CONFIG消息向交換機發送配置參數
(五)通過GET_CONFIG消息得到交換機修改后的配置信息
(六)控制器與OpenFlow交換機之間,發送PACKET_OUT和PACKET_IN消息。通過PACKET_OUT中內置的LLDP包進行網絡拓撲的探測
(七)控制器通過FLOW_MOD向控制器下發流表操作
五:OpenFlow通信流程詳解