2013年1月8日火曜日

「OpenFlow 実践入門」を読んで Trema で面白いスイッチを作ろう

InternetWeek 2012にてOpenFlow チュートリアル&ハンズオンでOpenFlowのプログラミングフレームラーク、Tremaについてのハンズオンに参加し、調子に乗って開発が止まっているバージョンのTremaにpull requestしてしまったりなどしつつ、講師の高宮さん、鈴木さんと名刺交換をさせていただきましたところ、OpenFlow実践入門の献本をいただきました!

非常に恐縮です・・・

さて、いただいたOpenFlow実践入門ですが、それについてお話する前に OpenFlow について簡単に説明しますね。




OpenFlowとは

L2スイッチ(ハブとか呼ばれる)とかL3スイッチ(ルータとか呼ばれる)は大きく構成する要素をふたつに分けることができます。

ひとつはデータプレーン。こいつはパケットの転送を扱う部分です。目に見える部分でわかりやすく言うと足の部分ですね。ケーブルが生えててピコピコしてたりする部分らへんとかです。

もうひとつはコントローラプレーン。こいつはデータプレーンの制御を行なっている部分です。イメージが沸かないと思いますし、ぼくもよくは知らないんで、適当に想像すると、よく箱を開けるとワラワラとでてくる黒いムカデみたいなやつなんだと思います。

OpenFlowというのは、このうち、コントローラプレーンをソフトウェアによって擬似的に作成するために用意されたデータプレーンとのインターフェイスです。
要するにOpenFlowに対応したスイッチを買ったり、作ったりするとTremaなどで書いたコントローラプレーンを使うことができるよ、というわけです。

これは革新的なことで、いままでは細かいルールを設定してネットワークの実験がしたいな、というときにはハードウェアのスイッチが依存している制御ソフトウェアにそのルールを記述する設定がなければいけない、という状況でした。逆に表現すると、実験に利用したいアルゴリズムを実現するために、どのハードウェアの制御ソフトウェアが実験に必要な処理に対応しているか調べて購入する必要があったんですよね。

OpenFlowとその対応スイッチを使えばOpenFlowの枠組みの中での処理は自由に記述して動かすことができます。つまり、ハードウェアに付属するソフトウェアの仕様をひとつひとつ調べなくても、自分で処理を記述することで、ハードウェアのコントロールができるのです。画期的!!!

今回はそのOpenFlowの、たぶん、日本初な書籍であるOpenFlow実践入門という書籍をいただきました、という話なんです。ありがたや〜!

OpenFlow実践入門

実はおおよその内容はすでに知っていました。というのも、この本はGitHubで本文内容のおおよそが公開されているのです。と思ったら、オープンな場所からは消えてるような気がするので、買え!!!

Tue Jan  8 23:02:38 JST 2013 追記。著者の高宮さんからコメントでご指摘頂いたとおり、高宮さんのレポジトリにて、発刊以前よりずっと公開されていました。勘違いしてしまって申し訳ないです。

以下、特に良いと思ったことについて箇条書きっぽくあげてみます。


Rubyで記述することができる

これは書籍ではなく、この書籍で紹介されているOpenFlowフレームワークTremaそのものの特徴なのですが、Tremaではコントローラプレーンの内容をRubyで記述することができます。
あらかじめ必要なクラスなどの定義をロードすることでDSLな記述でパケットのコントロールを記述できます!これはとても分かりやすくて心地良い!!!

解説が分かりやすい!

解説がとても分かりやすいです。特に、ネットワークとソフトウェアの両方についてそれなりに素養のある技術者というのは限られてきますから、読者層を広げるためにはさまざまな試みが必要だったのだと思います。
ソフトウェア技術者向けにはサポートセンターをメタファにしたスイッチの内部でのやりとりについての解説があったり、ネットワーク技術者向けにはRubyのワンポイント講座のような解説が設けてあります。
日頃、よく中身を知らずに使っている機器でもTremaによる記述例があるので「MACアドレス学習型スイッチってこんなアルゴリズムで記述できるのか〜」とか勉強になりそうです。

上級者にも対応!

この本、完全におかしいです。市販品のスイッチを買ってきてメーカー保証外のファームを焼きこみ、OpenFlowスイッチを作成する方法まで掲載されています!知らなかった!これはうれしい!!!
なんといっても、自分で書いたOpenFlowの制御をシミュレーションするだけではなく、物理的なOpenFlow対応のデータプレーンを作成し、動かすことができるのですから。
ほかにも、ケーススタディとしてOpenFlowがどのように応用されているかが記されていますので、OpenFlowがもつ可能性の一部をみることができます。


まとめ

OpenFlow実践入門(原稿)を読んで、マニアックな挙動をするスイッチをTremaで作ろう!

4 件のコメント:

  1. 「コントローラプレーン」って書いてあるの、間違いで、正確には「コントロールプレーン」だったくさい。

    返信削除
  2. 高宮です。ブログ記事にまでしていただいてありがとうございます!
    原稿データのほうは、ずっと GitHub に置いてますので自分でビルドできる方はこちらからもどうぞ〜。
    http://yasuhito.github.com/trema-book/

    返信削除
  3. いえ、こちこらこそご献本ありがとうございます!

    原稿について勘違いしてしまったので、記事の記述を訂正しました。

    trema-edge にも興味津々かつコントリビュートできればしていきたいと思っています!ので、どうぞこれからもよろしくお願いします。

    # すでに英訳の準備をされているのを拝見し、ビビっている高野でした。

    返信削除