OpenFlowはネットワーク上でスイッチまたはルーターのフォワーディング・プレーン (en) へのアクセスを可能にする通信プロトコルであり、最も一般的に導入されたソフトウェア定義ネットワーク(SDN)テクノロジーである。

## 概要

OpenFlowによって、ネットワーク・コントローラーがネットワーク・パケットの経路(どのネットワーク・スイッチを経由するか)を決定することが可能となる。つまり、コントローラーとスイッチの機能を分離・独立させることができる。フォワーディングからコントロールを分離することで、アクセス制御リスト (ACL) 及びルーティング・プロトコルを使う方法よりも洗練されたトラフィック管理が可能となる。また、OpenFlowは、スイッチ群を異なるベンダー製品で構成することも可能にする。通常はベンダーによって独自のインターフェースやスクリプト言語が用いられているが、これらを単一でオープンなプロトコルを用いて遠隔制御・管理することを可能にする。OpenFlowはSoftware Defined Networking (SDN) を実現する技術として発明された。OpenFlow APIは、転送の抽象化の一例である。

OpenFlowは、パケット・マッチングのルールとアクションを追加・修正・削除するなど、レイヤ3スイッチのパケット・フォワーディング・テーブルを遠隔で管理することを可能とする。こうして、ルーティングをコントローラーによって定期的または随時に決定し、構成可能な寿命を持つルールとアクションへと翻訳することができる。 このルールとアクションは次にスイッチのフロー・テーブルに展開され、マッチしたパケットがスイッチへワイヤー・スピードでルールで定められた期間に実際にフォワーディングされる。そして、コントローラーは、単一または複数のスイッチに関するフロー・テーブルのルールを修正するか、スイッチとコントローラの間のトラフィックの構造的なフローを妨げるために新たなルールを展開するか決定をすることができる。スイッチにパケットのヘッダーのみならずパケットの内容もすべてフォワードするように指示することで、トラフィック自身をフォワードするという決定も下すことができる。

OpenFlow通信規約は、OpenFlow操作装置とOpenFlowスイッチの間で行われるメッセージ交換を記述する。メッセージを切り替えるためのそれぞれ勝手な時間に行う、平行データ、およびOpenFlow操作装置をサポートする。ネットワークの管理に使用されるカプセル化されたパケット、フロー統計、およびイベントベースのメッセージをSDNコントローラーに提供する。スイッチがどのようにOpenFlow論理アーキテクチャを実装しているかの詳細に関して、コントローラがスイッチの論理構造を管理することを可能にするものではない。Transmission Control Protocol (TCP) の上に重なるレイヤーであり、Transport Layer Security (TLS) の使用を規定する。コントローラーは、接続を確立したいスイッチのTCPポート6653の情報を注視していなければならない。初期のバージョンのOpenFlowは非公式にポート6633を利用していた。OpenFlowチャネルは、Open/FlowスイッチとOpenFlowコントローラ間のインタフェースであり、コントローラがスイッチを管理するために使用される。OpenFlowポートは、パケットがOpenFlowパイプラインに入ったり出たりする場所である。

### テーブル

グループテーブル、フローテーブル、メーターテーブルは、OpenFlow仕様で定義された論理スイッチアーキテクチャの3種類のテーブルである:

グループテーブルは、グループ識別子、グループタイプ、カウンタ、アクションバケットの4つの要素からなる多数の行で構成される。グループテーブル、パケット転送、パケット変更、処理の操作を記述するのがアクション。アクションセットは、パケットが各テーブルによって処理されている間に蓄積され、パケットが処理パイプラインを出るときに実行される、パケットに関連付けられたアクションのリストである。

論理スイッチ・アーキテクチャの基本的な構成要素はフロー・テーブルである。フローは、ヘッダーフィールド値のセットを共有するネットワークを通過する一連のパケットである。

## 歴史

Open Networking Foundation (ONF) は、Software Defined Networking (SDN) の普及を促進するための主導の組織であり、OpenFlowの標準化を監督している。ONFは、OpenFlowをSDNのコントロール層及びフォワーディング層の間の仕様を策定する初の標準通信インターフェースであるとしている。OpenFlowは、スイッチやルーターなどのネットワーク・デバイスのフォワーディング・プレーンへの物理的にも仮想的にも直接アクセスと操作を可能にする(ハイパーバイザ (en) によって)。フォワーディング・プレーンへのオープン・インターフェースがなかったことから、旧来のネットワーク・デバイスはモノリシックでクローズなメインフレームのような特徴を持っていた。OpenFlowのようなプロトコルは、各社が専有するネットワークスイッチからネットワーク・コントロールを分離し、オープン・ソースのコントロール・ソフトウェアに移行する。

多くのネットワーク・スイッチやルーターのベンダーは、OpenFlowをサポートするスイッチを開発すると発表した。例えば、アルカテル・ルーセント、en:Big Switch Networks、ブロケード コミュニケーションズ システムズ、en:Radisys、アリスタネットワークス、Pica8、NoviFlow、華為技術、シスコシステムズ、フォーステンネットワークス、エクストリーム・ネットワークス、IBM、ジュニパーネットワークス、en:Digisol、en:Larch Networks、ヒューレット・パッカード、NEC、そしてMikroTikなどである。このプロトコルは、ネットワーク・コントロール・プレーン (en) の幾つかの実装において、ネットワーク・フォワーディング要素を管理するために採用されている。OpenFlowは、主にセキュリティの高いチャンネルにおいてスイッチとコントローラの間に使用されている。OpenFlow関連製品の情報は以下のウェブサイトで読むことができる:ONF website、SDNCentral website。

### 開発

OpenFlowプロトコルのバージョン1.1は、2011年2月28日にリリースされた。新たな開発の標準はOpen Networking Foundation (ONF) によって管理されていた。2011年12月、ONFの委員はOpenFlowバージョン1.2を承認し、2012年2月にリリースされた。現在のバージョンは1.4である。

### セキュリティ関連

- 中間者攻撃
- 潜在的な単一攻撃・障害点
- プログラミング及び通信チャンネル問題 - OpenFlow Deployment Experience

## 主要なSDNのソリューション比較表

主なSDNの比較表は下記の通り。

代表的なSDNのソリューション比較表

| 項目 | Open SDN | Cisco ACI | APIC Enterprise Module |
| --- | --- | --- | --- |
| コントロールプレーン変化 | ○ | ○ | X |
| コントロールプレーン集中度 | ほぼ全て | 一部 | 集中管理なし |
| SBI | OpenFlow | OpFlex | SNMP、SSH、Telnet |
| コントローラ | OpenDaylight SDN Controller、Cisco Open SDN Controller | APIC | APIC-EM |