ネットワークスペシャリスト - SE娘の剣 -

ネットワークスペシャリストの試験対策サイトです。
ネスペ試験の合格体験談、合格のコツ、過去問解説、基礎知識などの情報を掲載します。

カテゴリ:13.ストレージと仮想化 > 13.5 SDN

ネットワークの仮想化技術がSDN(Softoware Defined Network)です。SDNの定義は曖昧で、具体的な製品や技術を指すのではなく、概念になります。
H25年秋NW午後2問2に、OpenFlowの出題がありました。これを参考に、SDNについて整理していきます。以下は、K主任が調査を指示したネットワーク仮想化技術に関してです。
 T君が調査したところ,大別して二つの新しい技術があることが分かった。
 一つは,オーバレイ方式と呼ばれるネットワーク仮想化方式で,レイヤ3ネットワーク上にレイヤ2をカプセル化して,同一テナントネットワークに属するサーバ間の接続用トンネルを作ることによって,ネットワーク仮想化を実現する。
 もう一つは,スイッチを,経路制御などの管理機能を実行するフローコントローラ(以下, OFCという)と,データ転送を行うフロースイッチ(以下, OFSという)に分け, OFSに入るパケットの経路制御をOFCが集中制御する方式(以下,0F方式という)である。OF方式は,カプセル化を使わず, OFSそれぞれの転送によって実現されることから,ホップバイホップ方式と呼ばれることもある。
 オーバレイ方式又はOF方式で実現されたネットワークは,どちらもソフトウェアで定義できることから,[ SDN ]と呼ばれている。 

つまりネットワーク仮想化技術であるSDNは大きく2つがあります。
オーバレイ方式
 この問題の意味とは若干違うかもしれませんが、補足します。OpenFlowの場合、純粋なOpenFlowの機器だけを用いるのをホップバイホップ方式と言います。一方、既存のネットワーク機器をそのまま使い、OpenFlowの仮想スイッチでトンネルを張るものをオーバレイ方式と呼ぶ。オーバレイとは「重ね合わせる」という意味なので、既存の機器上でOpenFlowの仕組みを重ね合わせるという意味でしょう

ホップバイホップ方式
 その代表がOpenFlowです。上記のオーバレイ方式と対比すると、全てをOpenFlowの機器で構築します。

以下は、この過去問にある説明図です。詳しくは個別に解説します。
sdn
また、両者の比較もありましたので、引用します。
hikaku

時代の流れからすると、OpenFlowの発想は自然な流れでしょう。私の勝手な概念も入っていますが、以下の流れと通じると思います。
 【1】無線LANがWLCによる集中管理をすることが主流になった
 【2】サーバが仮想化され、一台のサーバに複数の機能を持たせるようになった。
 
【1】無線LANにてWLCによる集中管理
ただ、違いがあります。無線LANは、WLCと無線APは通常のネットワークでつながっています。
ですが、OpenFlowの場合は、コントローラであるOFCと各ネットワーク機器は、通常のNWとは別の専用ケーブルで接続されているのです。
wlc
【2】サーバの仮想化
 最近では、サーバの仮想化が主流です。1つのサーバ上に、Webサーバ、メールサーバ、DNSサーバなど、いくつものサーバを搭載し、複数の機能を実現します。仮想化していれば、冗長化の仕組みも簡単ですし、拡張や変更も柔軟に行えます。
 これが、ネットワークの世界でも起こっているのです。
 OpenFlowにより、一つのネットワーク機器上に、L2スイッチだけでなく、L3スイッチの機能や、FW、はたまた負荷分散装置(LB)の機能も持たせます。そして、冗長化機能や拡張、変更の柔軟さも持たせるのです。この仕組みが求められるのは自然な流れと思いませんか?
vm

利点
いろいろな考え方があります。以下は私の主観ですので、あくまでも参考程度に。
DCやクラウド事業者むけの柔軟なネットワーク
 拡張や変更、障害時の切り替わりに柔軟なネットワークが構築できる。
 
大規模なネットワークを作れる
 特にVLANの制約が大きい。VLAN数は4096というの制約があるが、これがなくなり、実質的な上限はありません。DCなどで、多くのユーザを抱えるネットワークを構築する場合には、適しています。
 
プログラムを書いて、複雑な処理ができる。
 たとえば、負荷分散の設定も書けますし、負荷や条件に応じた設定もできます。細かな優先制御も設定できますし、冗長化の仕組みもできます。
 しかも、複数台機器を用意せずに、1台でやることも可能です。
 
FW、L2,L3、LBなどを一つに集約
 パケットを見てDropするなどのFW設定もできます。通常であれば、それぞれの機器を準備しなくてはいけません。しかもLBなどは値段が効果です。ソフトウェアでやれば費用をおさえて実現することも可能です。

OpenFlowを含めたSDNにより、大規模なネットワークで効果が期待できます。
ですが、機器もまだまだ高いですし、仕様も発展途上です。小規模ユーザに普及するのはまだまだ先のことでしょう。

欠点(課題)
・設定は従来のCiscoのに比べて複雑になる。ネットワークエンジニアが弱い(?)プログラミングの知識も必要。
・コントローラのソフトがメーカ系のもの、OSSのものなどさまざまです。さらに、プログラミング言語がPython(パイソン)であったあり、Rubyであったり、Cであったりする。なので、マルチベンダといっても、CiscoのIOSとJuniperのJunosが全く違うように、書く人はそれぞれの書きかたが違うので大変です。
・互換性の問題があります。従来のNW機器でもRFCに準拠はしていても、細かなところは実装によって違ったりする。同じことがOpenFlowにも言えて、Openflowプロトコルの仕様に準拠していても、メーカごとに実装の違いがあるので、相互接続検証が必要です。
・製品の価格が高い。安価にをうたっているが、実際に構築してみると高い
・コントローラと各スイッチを物理的な別NWで接続する必要がある。
・RFC化はされておらず、本当の意味でのマルチベンダとか、業界標準化はされていない。
→ぜひとも統一していただきたい。

OpenFlowのopenはopenオープンソースである。文字通り、ソース(ソースコード)がオープン(公開)されている。OpenFlowはSDNの概念の1つですので、SDNの言葉の通り、ソフトウェアでのネットワークです。

特徴
・無線LANのコントローラ(WLC)が無線APを集中管理するように、OpenFlowのコントローラが、各ネットワーク機器を集中管理します。よって、各ネットワーク機器に、個別に設定入れる必要はなく、OpenFlowコントローラのIPアドレスや使用するIFなど、最小限の設定で済む。これはかなり便利です。
・L2スイッチ、L3スイッチ、FW、LBなど、複数の機能をあわせもてる。
・特定のベンダに依存しない。これで、メーカ依存の、製品による制約がなくなる。→実際にはメーカやソフト間の互換性の問題があり、そう簡単ではない。とはいえ、そもそもの発想はこういうことである。
・プログラムすればいいので、やりたいことが自由にできる。たとえば、CiscoではVRFによって、ルータを仮想化できる。これは、VRFの機能が搭載された機器だけが実現できる。でも、このような機能を用いて1つのスイッチに同一セグメントを複数作ったり(VRFでできたかは要確認)、ルーティングポリシーを分けたりなどをやろうと思っても、機器やそのOS(CiscoではIOS)が対応していなければ、実現できない。
 他には、従来はSTPによるループ対策があった。OpenFlowでは、物理的にはループになっても、通信経路ではそもそもループにならないようにすればいい。そういう調整が自由にできる。
・実際のデータを転送する「データプレーン」と、経路計算などの制御をする「コントロールプレーン」を分離する。コントロールプレーンはOFCが担い、データプレーンはOFSが担う。
aa

用語
・OpenFlowコントローラ
・OpenFlowスイッチ
・FlowTable
・OpenFlowプロトコル
open

構成および動作
過去問(H25秋NW午後玉2)に基づいて、構成を確認しましょう。
OF方式では, OFSに入ってきたパケットのMACアドレス,IPアドレス, TCPポ−卜番号などの属性の組合せを“フロー”と呼び,そのパケットをどのように処理するかの判定に使用する。フローを識別し,入力されたパケットに対する処理を, OFS内のフローテーブル(以下, f-TBLという)に設定する。 OF方式でのOFCとOFSの構成を,図2に示す。OFCとOFS間の制御情報(以下,メッセージという)の交換のプロトコルを,0F Protocol と呼ぶ。
zu2

図2中のf-TBLの一つのエントリには,フローの識別情報(以下, Ruleという)を保持するRuleフィールド, Ruleに一致したフローをもつパケットに対する処理内容(以下, Actionという)を記述したActionフィールド,一致したフローのカウント値を保持するStatisticsフィールドなどがある。RuleとActionは, OFCが設定する。

団体
ONF(Open Networking Foundation)として、OpenFlowを推進する組織です。
また、ちょっと次元は違うかもしれないが、OpenDaylightという組織もあり、こちらもそうそうたるベンダが参加しています。こちらは、OpenFlowの概念も含めています。
Brocadeなどは、こちらに主軸を置いている気が……。

・OpenFLowスイッチとはOpenFlowプロトコルで通信をする。
・コントローラは、ソフトウェアであり、OpenFlowの仕様(2012年にVer1.3)にきちんと準拠していれば、どんなものでもいい。つまり、CiscoやHPなどの、メーカやベンダに依存しない。
  →とはいえ、実際には、メーカの癖が出てしまう。
・コントローラはソフトウェアで動作させればいいので、性能の問題は注意すべきであるが、普通のパソコンもコントローラになれる。
・オープンソース(OSS)系ではRyu(リュウ)やTrema(トレマ)、ちょっと古いがNOXなどがあります。一方のメーカ系では、NEC社のUNIVERGE PFシリーズのPFC(ProgrammableFlow Controller)やNTTデータの「バーチャルネットワークコントローラ」などがあります。

フローテーブルはFWのおけるルールと考えればいいでしょう。この点に関して、過去問(H25秋NW午後玉2)にてきれいにまとめられているので、これを読むといいでしょう。
図2中のf-TBLの一つのエントリには,フローの識別情報(以下, Ruleという)を保持するRuleフィールド, Ruleに一致したフローをもつパケットに対する処理内容(以下, Actionという)を記述したActionフィールド,一致したフローのカウント値を保持するStatisticsフィールドなどがある。RuleとActionは, OFCが設定する。
Ruleとして利用できる情報, Action及びメッセージの例を,表1に示す。
messe
 なお,ネットワークに参加するOFSは最初に必ずOFCに接続し, OFSのポート情報などをOFCに通知する。OFCは,OF Protocol を使ってトポロジを把握する。
 フローに対し, f-TBL内にRuleが一致するエントリがあった場合, OFSは当該エントリに記述されたActionの動作を行う。一方,なかった場合は, OFSはPacket In メッセージをOFCに送信し,そのパケットの処理方法を問い合わせるモードで動作する。Packet In を受信したOFCは, Flow Modメッセージを使用してf-TBLに処理のエントリを登録したり, Packet Out メッセージを使用して指定ポートからのパケット送信をOFSに指示したりする。 f-TBL内のRule及びAction内容の例を,表2に示す。
table

Rule

Action
この表の中で、Actionに関しては、Forward、Drop、Modify、Enqueueで考えましょう。内容は同じです。
Forward:転送する
Drop:破棄する
Modify:パケットを書き換える ※NATなど
Enqueue:キューに入れる ※優先制御など

Statistics
・Statisticsでは、該当通信の統計情報を持つことができる。

動き
Flowテーブルですが、起動時にOpenFlowスイッチに送り込まれる場合もあれば、該当する通信が発生した都度、コントローラに問い合わせ(Packet In)して取得する場合もあります。一概には言えないが、後者の方が多いと感じています。また、従来のスイッチでもARPテーブルやMACアドレステーブルなどの情報はネットワークの接続状況によって、都度作成されます。なので、Flowテーブルは、FWルールのようにずっと同じというものではありません。また、取得したテーブルは、ある程度の時間がたつと、消されます。

コントローラの指令を受けて動作します。単なる箱と考えでもいいでしょう。

製品
・製品としては、HPのProcurveなどのOpenFlow対応のスイッチやNECのUNIVERGE PFシリーズであるProgrammableFlow Switch(PFSを用意するのが普通です。
・一方、仮想上で動かすのであれば、物理的なものは不要。Linuxなどのサーバ上にopenflowのソフトウェアを入れて動作させる。例えば、オープンソースの「Open vSwitch」があります。
・狙いとしては、OFSは単なる箱なので安価なものなのですが、まだまだ高いのが現状です。それは、OFSの機能だけでなく従来のスイッチの機能も持たしているからです。
・既存のSWにOSを入れ替えてできるものもあるかもしれない。実際、Buffaloの安価なルータでもOpenFlowスイッチ化できたそうです。興味がある方は、ネットで検索してみましょう。このルータはおそらくLinuxベースで動いているので、管理画面上からファームの更新処理をして、OpenFlowのソフトウェアを入れてしまうのです。

動き
・L2スイッチと同様に、各ポートには基本的にIPアドレスを設定しません。
5 

普通、以下のようなネットワークの場合、
L3スイッチにIPをそれぞれ割り当てますよね?
 a
たしかにそう。でも、IPは要らない。
以下のようになる
b
3 
でも、PC1はデフォルトGWである192.168.1.254にパケットを送ると思います。
OFSに192.168.1.254のIPアドレスを割り当てなければ、きちんと動作しないのでは?
OFCから指示をうけて、OFSが254のパケットに応答します。つまり、IPアドレスは割り当てられてはいないのですが、スクリプトによって応答します。PCからみたら、IPが割り当てられているように感じます。
※この点は、OFSによって実装が違う可能性がありますので、参考程度にお考えください。

4 

Openflow関連の通信は、制御情報を流す通信と、実際の通信がありますよね。
そのプトロトコルは特殊なものなのですか?
まず、OpenflowスイッチとOpenflowコントローラ間の制御情報の通信に関して解説します。
制御情報はOpenFlowプロトコルを使います。この通信はイーサネット上のTCPで動作します。

次に、実際の通信ですが、OpenFlowの特殊なプロトコルとして通信しているのではありません。通常の通信そのままです。イーサネットファブリックでは拡張版のイーサネット(DCB:Data Center Bridging)が使われました。しかし、OpenFlowの場合は、通常のフレームがそのまま流れる。つまり、PCからTCPのパケットが来ればそのまま転送するし、UDPやICMPがくれば、そのまま転送する。 

ofp

OpenFlowプロトコルでは、メッセージが規定されています。過去問(H25秋NW午後玉2)を確認しましょう。
フローに対し, f-TBL内にRuleが一致するエントリがあった場合, OFSは当該エントリに記述されたActionの動作を行う。一方,なかった場合は, OFSはPacket In メッセージをOFCに送信し,そのパケットの処理方法を問い合わせるモードで動作する。Packet In を受信したOFCは, Flow Modメッセージを使用してf-TBLに処理のエントリを登録したり, Packet Out メッセージを使用して指定ポートからのパケット送信をOFSに指示したりする。
また、この過去問では、メッセージの例が掲載されています。
messe
過去問での解説は、シンプルではありますが、分かりやすく書かれています。
aa
sef1 

フローテーブルとは、FWのルールをイメージしています。OFCからOFSにルールが事前に送られるので、都度OFCにPacket Inで問い合わせるなんてことはないのでは?
無線LANのコントローラでも同じだと思います。
そういう設定もできるはずですが、最初のOFSにおけるフローテーブルは空です。ARPテーブルやMACアドレステーブルが、最初は空で、都度問い合わせ、数分後に消えるのと同じと考えてもらえばいいでしょう。このように、接続されている全ての機器の情報をOFCは把握できていません。MACアドレステーブルなどは通信をしながら都度学習していきますので、Packet Inなどのメッセージは必要です。
sef6 
なるほど、Packet InメッセージをOFCに送信して処理方法を問い合わせ、OFCはFlow ModにてOFSのフローテーブルにエントリを追加するのですね。

OFスイッチとOFコントローラとの接続に関して、過去問(H25秋NW午後玉2)には以下のように述べられています。
なお,ネットワークに参加するOFSは最初に必ずOFCに接続し, OFSのポート情報などをOFCに通知する。OFCは,OF Protocol を使ってトポロジを把握する。
OpenFlowスイッチにはコントローラのIPアドレスが設定されます。それに基づき、コントローラに通信をしTCPのコネクションを確立します。デフォルトではポート番号6633が使われます。
※接続先を設定ファイルに書いておいて、自動接続することがほとんどでしょう。
その後、コントローラではスイッチ側ののトポロジ把握をします。複数のOFSや端末がどのように接続されているかを把握するためです。LLDP( Link Layer Discovery Protocol )等のプロトコルを使うことが多くなります。

このページのトップヘ