内容紹介
TCP/IP解説書の定番、マスタリングシリーズでOpenFlowプロトコルを学ぶ
プログラマブルなネットワークとして注目される「OpenFlow」。本書は、そのOpenFlowプロトコルの全体像を、OpenFlow 1.0から1.3.2まで解説したものです。プロトコルとメッセージの解説にとどまらず、システムを構築するうえでのパターン紹介やその解説を通じて、OpenFlowとは何かを具体的に知るための一冊です。
このような方におすすめ
・システムエンジニア、ネットワークエンジニア
・中、大規模なネットワークを持つ企業担当者
目次
主要目次
第1章 OpenFlow 概要
第2章 OpenFlow 1.0 の仕組み
第3章 OpenFlowとLLDP
第4章 L2スイッチの機能再現から学ぶOpenFlow
第5章 OpenFlowと仮想化
第6章 ユースケースで考えるOpenFlow
第7章 OpenFlow 1.1
第8章 OpenFlow 1.2
第9章 OpenFlow 1.3
第10章 OpenFlowの留意事項
第11章 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.
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.7 TTLフィールド操作
7.7.1 copy TTL inwards / copy TTL outwards
7.7.2 不正なTTL 値のパケットを受け取ったときの処理
7.7.3 TTL のマッチはできない
7.8 OpenFlow 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 複数コントローラ対応(フェイルオーバーとロードバランシング)
8.4.1 Role
8.4.2 Role の変更
8.4.3 OpenFlow コントローラ間の連携
8.5 OpenFlow 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 OpenFlow 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.
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 マッチとフローに関する留意事項
10.2.1 TCPのフラグを見られない
10.2.2 パケットやフレームの任意のフィールドがマッチ可能であるわけではない
10.2.3 マッチフィールドの依存関係
10.3 実装に依存する事項
10.3.1 フローエントリ数の上限
10.3.2 OpenFlowコントローラが同時に制御可能なOpenFlowスイッチ数の上限
10.3.3 buffer_id で示されるバッファが残っているとは限らない
10.3.4 OpenFlow チャネル切断時の再接続タイマー
10.4 Flow-Modは下流から
10.5 Barrier メッセージとエラー
10.5.1 Flow-Mod 直後のPacket-In の場合
10.5.2 別々のOpenFlow スイッチへFlow-Mod メッセージとPacket-In メッセージを送信する場合
10.6 Packet-Out の失敗を検出する方法がない
10.7 IP フラグメント処理
第11章 OpenFlowのこれから
11.1 相互接続性検証
11.1.1 OF-Test
11.1.2 プラグフェスト
11.1.3 2012年に行われた第1回プラグフェスト
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
索引
続きを見る