# OpenFlow OpenFlow は、スイッチのデータプレーンを実装する FIB(Forwarding Information Base)に対するエントリの設定において、ネットワークのコントロールプレーンが使用するインターフェースを体系化したプロトコルである。マッチ/アクションによるフロールールというシンプルな抽象化を提案した(図5.1)。Larry Peterson は 2008 年に ACM SIGCOMM CCR に掲載された最初の提案論文 "OpenFlow: enabling innovation in campus networks" の共著者の一人である。この論文は OpenFlow をコントロールプレーンとデータプレーンの間の実験的でオープンなインターフェースとして提案し、誰でも(研究者であっても)ネットワークのコントロールプレーンに新機能を導入できるべきという、当時としては急進的なアイデアを含んでいた。(Source: [[@2026__LambdaNote__ネットワークシステムについて語るときに我々の語ること - Chapter 5 SDN:ソフトウェア定義ネットワーク]] ch.5 §5.2) ## 受容の経緯 2009年の SIGCOMM カンファレンスでスタンフォード大学の研究グループが実演したデモが業界の注目を集めた。当初は「悪手」とされてきた二つのアイデア(中央制御・リアクティブなフォワーディング)の組み合わせに見えたため、Bruce Davie を含む多くの従来型ネットワーク技術者から懐疑的に見られていた。しかし、汎用スイッチ用チップ(Broadcom・Marvell 等)の台頭、超巨大データセンターという新市場の出現、分散システム研究の成熟という環境変化により、当初は現実性がないとされたアイデアが実用段階に入った。NSF が大学キャンパスでの実験的デプロイに資金提供し、Internet2 がバックボーンにオプションとして採用、ONF が OpenFlow コミュニティの活動拠点として設立され、ON.Lab が OpenFlow ベースのプラットフォームをオープンソースでリリースした。(Source: ch.5 §5.1, §5.2) ## 限界と後継 OpenFlow の仕様は新バージョンが策定されるたびにベンダー推奨の最適化機能を取り込み、当初目指した「多様なハードウェア上のハードウェア抽象化レイヤー」という理想から外れ、特定のデータプレーンへの依存が生じた。[[P4]] はこの問題への部分的な回答であり、データプレーンの振る舞いを P4 プログラムとして記述することで、コントロール/データプレーン間インターフェース(P4Runtime)をソフトウェア的に自動生成できる。ONF 自身も、フラッグシッププロジェクトの Aether において OpenFlow から P4 ベースの SDN へフォーカスを移しつつある。(Source: ch.5 §5.2) L2/L3 スイッチを主対象としていた OpenFlow のコンセプトは、携帯電話網にも適用されつつあり、RAN(無線アクセス網)ベンダーに基地局のオープン化と分離を迫っている。5G ネットワークでは OpenFlow の代わりに 3GPP が定義したインターフェースが用いられる見込みである(SD-RAN)。(Source: ch.5 §5.2) ## フローエントリの抽象化と2008年の提案論文(Software-Defined Networks: A Systems Approach 第1章) *Software-Defined Networks: A Systems Approach* 第1章は、OpenFlowをディスアグリゲーション(コントロール/データプレーン間の分離を開かれたインタフェースとして規定すること)を実現する最初のインタフェースと位置づけ、2008年に導入されたと記す。ただしOpenFlowはこの種の試みとして最初のものではなく、IpsilonのGSMPやIETFのForCESという先行する取り組みがあったが、最も注目を集めたのがOpenFlowだったという(脚注)。フローエントリ(flow rule)はマッチ/アクションの対であり、パケットがマッチ半分に一致すればアクション半分が適用される。オリジナル仕様のマッチ部分にはMACヘッダのType・IPヘッダのDstAddrなど固定のヘッダフィールド集合が含められ、アクションには当初「1つ以上のポートへの転送」「破棄」に加え、さらなる処理が必要なパケットをコントローラ(スイッチを制御するコントロールプレーン側プロセスを指す語として導入された)へ送る「エスケープハッチ」が含まれていた。各スイッチはコントローラから渡されたフローエントリの集合をフローテーブルとして保持し、OpenFlowはフローエントリを安全に受け渡すプロトコルも定義したため、コントローラをスイッチの外(off-switch)で動作させる構成が可能になった。2008年当時、通常のフォワーディングパスに加えて「OpenFlowオプション」を持つスイッチを作るという発想は急進的とみなされ、最初のOpenFlow論文("OpenFlow: Enabling Innovation in Campus Networks", N. McKeown, et al., SIGCOMM CCR, March 2008)は研究コミュニティへの行動喚起(call-to-action)として書かれた。仕様は版を重ねるごとに複雑化し、今日ではより柔軟(プログラマブル)な代替、すなわち[[P4]]への置き換えが進んでいる(詳細は第4章)。なお著者らは、著者らの把握するかぎり15を超えるオープンソース・プロプライエタリなディスアグリゲーテッドコントロールプレーンが今日利用可能だと注記する(脚注)。(Source: [[@2021__SystemsApproach__Software-Defined Networks - A Systems Approach - Chapter 1 Introduction]] ch.1 §1.2.1) ## 代表的な実装としての Open vSwitch(2015年、一次資料) [[Open vSwitch (OVS)|Open vSwitch]] は「その起源から OpenFlow スイッチであり、単一目的の垂直統合されたネットワーク制御スタックに縛られず OpenFlow で再プログラム可能である」と、OVS の一次資料である [[@2015__NSDI__The Design and Implementation of Open vSwitch]] は述べる。OpenFlow コントローラの視点では、パケットは一連の OpenFlow フローテーブルを順に通過し、条件を満たす最高優先度のフローが見つかりそのアクションが実行される、という単純なモデルとして見える。この単純なモデルを実際に高性能に実現するため、OVS は[[パケット分類|タプル空間探索分類器]]と2層フローキャッシュという複雑な実装を内部に持つ——OpenFlow が提供する「単純な抽象化」と、その裏で必要になる「複雑な性能工学」との対比を示す代表的な事例である。(Source: [[@2015__NSDI__The Design and Implementation of Open vSwitch]] §3.1) ## 教科書における位置づけ [[@2020__SystemsApproach__Computer Networks - A Systems Approach - Chapter 3 Internetworking]] §3.5.3は、OpenFlowをコントロールプレーン(RIP・OSPF・BGPなど経路制御アルゴリズムが動く部分)とデータプレーン(パケット転送の決定が行われる部分)を分離する「最初のインターフェース」と位置づけ、この分離の考え方自体をdisaggregation(分離・非統合)と呼ぶ。ベンダーに依存しないコントロールプレーンとデータプレーンの自由な組み合わせを可能にする標準インターフェースとして説明されており、上記のLambdaNote版の記述(受容の経緯・限界と後継)よりも簡潔だが、OpenFlowの技術的な位置づけそのものは一致する。(Source: [[@2020__SystemsApproach__Computer Networks - A Systems Approach - Chapter 3 Internetworking]] §3.5.3) ## 関連 - [[P4]] — OpenFlow のベンダー依存問題への部分的回答として登場した後継技術 - [[Open Networking Foundation]] — OpenFlow コミュニティの活動拠点として設立 - [[Nick McKeown]] — 2008年の提案論文の主著者 - [[ソフトウェア定義ネットワーク]] / [[プログラマブルデータプレーン]] - [[@2026__LambdaNote__ネットワークシステムについて語るときに我々の語ること - Chapter 5 SDN:ソフトウェア定義ネットワーク]] - [[@2020__SystemsApproach__Computer Networks - A Systems Approach - Chapter 3 Internetworking]] - [[@2021__SystemsApproach__Software-Defined Networks - A Systems Approach - Chapter 1 Introduction]] — フローエントリの抽象化、2008年の提案論文、15を超えるディスアグリゲーテッドコントロールプレーン - [[Open vSwitch (OVS)]] / [[パケット分類]] — OpenFlow の代表的なソフトウェア実装とその分類器設計 - [[@2015__NSDI__The Design and Implementation of Open vSwitch]] — OVS がOpenFlowスイッチとして高性能を達成する実装詳細 ## 出典 - [[@2026__LambdaNote__ネットワークシステムについて語るときに我々の語ること - Chapter 5 SDN:ソフトウェア定義ネットワーク]](ch.5 §5.1, §5.2) - Larry Peterson and Bruce Davie, *Computer Networks: A Systems Approach*, 6th edition, Chapter 3: Internetworking, §3.5.3. https://book.systemsapproach.org/internetworking.html - Peterson, Cascone, O'Connor, Vachuska, and Davie, *Software-Defined Networks: A Systems Approach*, 2021, Chapter 1: Introduction, §1.2.1. https://sdn.systemsapproach.org/intro.html - [[@2015__NSDI__The Design and Implementation of Open vSwitch]](Pfaff, B., et al., NSDI '15、Best Paper。§3.1、OVSがOpenFlowスイッチとして提供する抽象化と実装の対比)