マスタリングTCP/IP OpenFlow編 目次

2013/7/4-1

今年はじめから半年間書き続けていた「マスタリングTCP/IP OpenFlow編」(あきみち・宮永直樹・岩田淳 共著/7月末発売予定)の目次です。 予定では、先月発売されているはずだったのですが、色々と調べているうちに「ここが書き足りない」というような部分をいろいろと発見してしまい、遅れてしまいました。。。

方向性は多少違いますが、「インターネットのカタチ - 織り成す粘り強い世界」と同様に、自分自身で満足できる出来になっていると感じています。

OpenFlow 1.0から1.3.2まで

本書はOpenFlow 1.0を骨子としつつ、OpenFlow 1.3.2までを解説しています。 OpenFlow 1.0を基本としているのは、OpenFlow 1.0でOpenFlowの初期設計思想が色濃く反映されているため、OpenFlowを理解するにはOpenFlow 1.0から入るのがわかりやすいと考えたためです。

最初からOpenFlow 1.3で全部を解説することも検討しましたが、そうしてしまうと、なぜ各機能が追加されていったのかを理解しにくい書籍になってしまうのではという懸念がありました。 実際、OpenFlow 1.0までは、「既存のハードウェアを生かしつつソフトウェアの変更で面白いことをする」という思想がありましたが、OpenFlow 1.3は、OpenFlowの旧バージョンではできないことを実現するために拡張されていった結果であるという側面も感じられます。

いろいろと悩んだ結果、OpenFlow 1.0をベースにOpenFlowを説明しつつ、本書執筆段階で最新であるOpenFlow 1.3.2までの変化も解説する構成にしました。 プロトコルに対する変更は、必要に応じて各所で個別に言及するとともに、OpenFlow 1.1、1.2、1.3の各バージョンについては、それぞれ一章分を割いて解説しています。

その他、本書の方向性

OpenFlow 1.3.2までの解説を行っているのは後半ですが、前半はOpenFlow 1.0の解説や、様々なユースケースを考察することでOpenFlowそのものの理解がしやすいような内容を目指しました。

その他、本書を執筆するにあたって気をつけたことのひとつが、特定ベンダの実装に依存する解説書にしないことでした。 だたし、実装依存する可能性が高いプロトコル仕様に関しては、注意点として記載するなどは心掛けました。

プロトコルを利用するうえで陥りやすいと思われる落とし穴に関しても、可能な限り紹介することを目指しました。 そういったポイントの多くは「10章 OpenFlowの留意事項」に書いていますが、必要に応じて個別箇所にも記載しています。

目次

以下、目次です。

そのうち、「はじめに」と「1章 OpenFlow概要」の途中までのサンプルも公開予定です。 よろしくお願い致します。

第1章 OpenFlow概要
 1.1 OpenFlowの成り立ち
   1.1.1 OpenFlowの歴史
   1.1.2 ONF(Open Networking Foundation)
 1.2 既存ハードウェアを活用して面白いことを!
 1.3 OpenFlowとは、具体的に何か?
   1.3.1 OpenFlowネットワークの構成例
   1.3.2 コントロールプレーンとデータプレーンの分離
   1.3.3 コントロールプレーン構築手法
   1.3.4 データプレーン構築手法
   1.3.5 OpenFlowコントローラとOpenFlowチャネル
   1.3.6 フローテーブル
 1.4 コントローラとスイッチの基本動作
   1.4.1 OpenFlowスイッチの初期動作
   1.4.2 プロアクティブ型設定
   1.4.3 リアクティブ型設定
 1.5 OpenFlowの動作例
   1.5.1 動作例1
   1.5.2 動作例2
   1.5.3 動作例3
   1.5.4 その他の動作例
 1.6 変化し続けるOpenFlow仕様
   1.6.1 OpenFlow 1.0以降、急激に変化する仕様
   1.6.2 OpenFlow 1.3標準化後
   1.6.3 本書でのOpenFlow 1.1以降のバージョン解説について

第2章 OpenFlow 1.0の仕組み
 2.1 OpenFlow 1.0のフローテーブルとフローエントリ
   2.1.1 複数フローテーブル
 2.2 フローエントリ
   2.2.1 ヘッダフィールド
   2.2.2 カウンタ
   2.2.3 アクション
 2.3 アクション
   2.3.1 Forwardアクション
   2.3.2 Dropアクション
   2.3.3 Enqueueアクション(Optional)
   2.3.4 Modify-Fieldアクション(Optional)
 2.4 コントローラとスイッチ間のメッセージ
   2.4.1 セキュアチャネルの確立
   2.4.2 メッセージフォーマット
   2.4.3 セキュアチャネルの確立および初期設定
   2.4.4 ハンドシェイク
   2.4.5 Flow-Modメッセージ
   2.4.6 Packet-Inメッセージ
   2.4.7 Packet-Outメッセージ
   2.4.8 Port-Statusメッセージ
   2.4.9 Flow-Removedメッセージ
   2.4.10 Errorメッセージ
   2.4.11 Barrierメッセージ
   2.4.12 Echoメッセージ
 2.5 OpenFlow Switch Errata Version 1.0.1
   2.5.1 セキュアチャネル切断時の緊急事態モード
 2.6 新しい仕様でいろいろと変わっているので注意

第3章 OpenFlowとLLDP
 3.1 LLDPとOpenFlow
   3.1.1 OpenFlowでのLLDP処理概要
 3.2 LLDPの仕組み
   3.2.1 LLDPで利用される宛先イーサネットアドレス
   3.2.2 LLDPで利用される3種類のマルチキャストイーサネットアドレス
   3.2.3 LLDPDUフォーマット
 3.3 OpenFlowにおけるLLDP活用手法例
   3.3.1 事前の準備
   3.3.2 Packet-OutメッセージでLLDPフレームを送出
   3.3.3 Packet-InメッセージでLLDPフレームをOpenFlowコントローラへ
 3.4 ダイクストラ法による経路計算

第4章 L2スイッチの機能再現から学ぶOpenFlow
 4.1 具体的なネットワーク機器の実現を通してOpenFlowを理解する
 4.2 リピータHUB
   4.2.1 この例のネットワーク構成
   4.2.2 プロアクティブ型設定で実現
   4.2.3 すべてのパケットをOpenFlowコントローラへPacket-Inする方法
 4.3 ラーニングブリッジ
   4.3.1 この例のネットワーク構成
   4.3.2 OpenFlow 1.0でラーニングブリッジに挑戦!
   4.3.3 ARPを監視してフローエントリを作成してみる
   4.3.4 PC AとPC Bが入れ替わるとどうなるか?
   4.3.5 送信元と宛先イーサネットアドレスのペアで管理する方法
   4.3.6 OpenFlow 1.1以降でのラーニングブリッジ実現方法
 4.4 タグドVLAN
   4.4.1 この例のネットワーク構成
   4.4.2 タグドVLANを実現する設定(OpenFlowスイッチ1側)
   4.4.3 タグドVLANを実現する設定(OpenFlowスイッチ2側)
   4.4.4 この例の注意点

第5章 OpenFlowと仮想化
 5.1 サーバ仮想化とネットワーク仮想化
   5.1.1 サーバ仮想化
   5.1.2 ライブマイグレーション
   5.1.3 マルチテナント
   5.1.4 ネットワーク仮想化
 5.2 OpenFlowによるネットワーク仮想化実現手法例
   5.2.1 VLAN IDを利用したもの
   5.2.2 物理ポート/論理ポートを利用したもの
   5.2.3 OpenFlowコントローラの実装のポイント
   5.2.4 他の方法
 5.3 FlowVisor
   5.3.1 FlowVisor概要
   5.3.2 FlowVisorとOpenFlowコントローラ間のOpenFlowチャネル
   5.3.3 FlowVisorの多段接続
   5.3.4 FlowVisorと仮想ネットワーク
   5.3.5 FlowVisor設定時の注意点

第6章 ユースケースで考えるOpenFlow
 6.1 イーサネットアドレスを利用したユーザ管理
   6.1.1 コントローラの実装のポイント
 6.2 ECMP(Equal-Cost Multi-Path)
   6.2.1 この例のネットワーク構成
   6.2.2 送信元アドレスで分ける場合
   6.2.3 TCPポート番号で分ける場合
   6.2.4 ラウンドロビン方式
 6.3 簡易ロードバランサ
 6.4 選択的ポートミラーリング
   6.4.1 単純なポートミラーリング
   6.4.2 特定のTCPポートのみをミラーリング
   6.4.3 OpenFlow 1.1の「グループ」とミラーリング
   6.4.4 複数のOpenFlowスイッチから選択的ミラーリングしつつ監視機器へと転送
 6.5 セキュリティ製品へのリダイレクト
 6.6 仮想ルータに似た挙動(マルチレイヤスイッチ)
   6.6.1 この例のネットワーク構成
   6.6.2 同一サブネット内のパケット転送処理
   6.6.3 仮想ルータを越えるパケット転送処理
   6.6.4 仮想ルータとしてARPリクエストに返答
   6.6.5 仮想ルータがARPでイーサネットアドレス解決
   6.6.6 TTL の扱い

第7章 OpenFlow 1.1
 7.1 OpenFlow 1.1における変更ポイント
 7.2 マッチフィールドの変更
 7.3 マルチテーブル仕様の変更(パイプライン処理)
   7.3.1 パイプライン処理
   7.3.2 メタデータ
   7.3.3 OpenFlow 1.1でのラーニングブリッジ実装手法を考える
 7.4 インストラクション
   7.4.1 インストラクションとは
   7.4.2 アクション、アクションセット、アクションリスト、インストラクションの違い
   7.4.3 アクションに対する変更
 7.5 グループ
   7.5.1 グループテーブル
   7.5.2 グループエントリ
   7.5.3 グループタイプ
   7.5.4 グループのグループ
 7.6 仮想ポートの拡張
   7.6.1 ポート番号の識別子が16ビットから32ビットへ変更
   7.6.2 OpenFlow 1.2での変更
 7.7 TTLフィールド操作
   7.7.1 copy TTL inwards / copy TTL outwards
   7.7.2 不正なTTL 値のパケットを受け取ったときの処理
   7.7.3 TTL のマッチはできない
 7.8 OpneFlow 1.1におけるその他の変更
   7.8.1 MPLSタグとVLANタグのpush/pop対応
   7.8.2 OpenFlow ハイブリッドスイッチ
   7.8.3 SCTP対応
   7.8.4 ECN対応
   7.8.5 OpenFlow スイッチとコントローラ間接続の名称変更
   7.8.6 緊急事態フローキャッシュ(Emergency Flow Cache)の廃止
   7.8.7 Vendor メッセージの名称変更

第8章 OpenFlow 1.2
 8.1 OpenFlow 1.2における変更ポイント
 8.2 OpenFlow eXtensible Match(OXM)
   8.2.1 OXM TLVの基本構造
   8.2.2 パケット解析仕様の廃止とPre-requisite
   8.2.3 OXMマッチフィールド
   8.2.4 OXMにおけるワイルドカード
   8.2.5 OXM TLV例
   8.2.6 OXMによるSet-Field
   8.2.7 TCP、UDP、SCTP、ICMPが同じフィールドをオーバーロードして使っていたのを廃止
 8.3 基本的なIPv6対応
 8.4 複数コントローラ対応(fail over とロードバランシング)
   8.4.1 Role
   8.4.2 Role の変更
   8.4.3 OpenFlow コントローラ間の連携
 8.5 OpneFlow 1.2におけるその他の変更
   8.5.1 仮想ポートがロジカルポートと予約ポートに分離
   8.5.2 Flow-Mod MODIFY/MODIFY_STRICTの仕様変更
   8.5.3 実験的拡張への対応
   8.5.4 変更履歴の追加

第9章 OpenFlow 1.3
 9.1 OpenFlow 1.3 における変更ポイント
 9.2 メーターテーブル(QoS対応)
   9.2.1 メーターエントリ、メーターバンド
 9.3 テーブルミスのデフォルト挙動がPacket-In ではなくDropに
   9.3.1 テーブルミスフローエントリ
   9.3.2 フローマッチ状態遷移の変更
 9.4 OpneFlow 1.3におけるその他の変更
   9.4.1 OpenFlowコントローラとOpenFlowスイッチ間の補助接続(Auxiliary Connections)
   9.4.2 OpenFlowコントローラとUDPやDTLSでの通信が可能に
   9.4.3 IPv6 拡張ヘッダ対応
   9.4.4 OXMマッチフィールドの追加
   9.4.5 PBB対応
   9.4.6 マルチパートフレームワーク
   9.4.7 ハンドシェイク時のFeatures応答メッセージからポート番号情報が削除
   9.4.8 フローエントリの構成要素が変更
 9.5 OpenFlow 1.3.1と1.3.2
   9.5.1 OpenFlowチャネルにおけるバージョンネゴシエーションの変更
   9.5.2 OpenFlowコントローラからのOpenFlow チャネル確立

第10章 OpenFlowの留意事項
 10.1 Packet-Inメッセージの処理負荷
   10.1.1 コントロールプレーンの帯域が狭いことによる障害
   10.1.2 Packet-Inによるメッセージ遅延
 10.2 IP フラグメント処理
 10.3 フローエントリ数の上限
 10.4 OpenFlow コントローラが同時に制御可能なOpenFlowスイッチ数の上限
 10.5 Packet-Outの失敗を検出する方法がない
 10.6 buffer_idで示されるバッファが残っているとは限らない
   10.6.1 OpenFlowスイッチがbuffer_idを削除するタイミングに関する仕様書での記載
 10.7 TCPのフラグを見られない
 10.8 パケットやフレームの任意のフィールドがマッチ可能であるわけではない
   10.8.1 仕様で定義されていても実装されているとは限らない
   10.8.2 すべてのOXMマッチフィールドでマスクが利用可能であるとは限らない
 10.9 マッチフィールドの依存関係
 10.10 Flow-Modは下流から
 10.11 Barrierメッセージとエラー
 10.11.1 Flow-Mod 直後のPacket-Inの場合
 10.11.2 別々のOpenFlow スイッチへFlow-ModメッセージとPacket-Inメッセージを送信する場合
 10.12 OpenFlowチャネル切断時の再接続タイマー

第11章 OpenFlowのこれから
 11.1 相互接続性検証
   11.1.1 OF-Test
   11.1.2 プラグフェスト
   11.1.3 2012年に行われた第一回プラグフェスト
   11.1.4 第2回、第3回プラグフェスト
   11.1.5 今後の課題
 11.2 Northbound API
 11.3 OF-CONFIG

付録
 付.1 各バージョンのアクション一覧
 付.1.1 OpenFlow 1.0のアクション
 付.1.2 OpenFlow 1.1のアクション
 付.1.3 OpenFlow 1.2のアクション
 付.1.4 OpenFlow 1.3のアクション
 付.2 各バージョンのメッセージ一覧
 付.2.1 OpenFlow 1.0のメッセージ
 付.2.2 OpenFlow 1.1のメッセージ
 付.2.3 OpenFlow 1.2のメッセージ
 付.2.4 OpenFlow 1.3のメッセージ

付.3 OpenFlow 1.0から1.3.2までの変更点まとめ
 付.3.1 アクションセット
 付.3.2 インストラクション
 付.3.3 アクションリスト
 付.3.4 グループテーブル
 付.3.5 メーターテーブル
 付.3.6 アクション

付.4 参考文献およびURL

索引

最近のエントリ

過去記事

過去記事一覧

IPv6基礎検定

YouTubeチャンネルやってます!