以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
図1は、第1の実施の形態の制御装置を示す図である。制御装置1は、ネットワークNに接続されている。ネットワークNはスイッチ2,3,4,5,6,7,8を含む。スイッチ2,3,4,5,6,7,8は、データ転送を行う装置である。スイッチ2,3,4,5,6,7,8は、ネットワークNの外部の何れかのネットワーク(ネットワークN1,N2,N3など)から受け付けたデータを、外部の他のネットワークへ転送する。
スイッチ2は、ポート2a,2b,2cを有する。ポート2aは、スイッチ4に接続されている。ポート2bは、スイッチ6に接続されている。ポート2cは、ネットワークN1に接続されている。スイッチ3は、ポート3a,3b,3cを有する。ポート3aは、スイッチ5に接続されている。ポート3bは、スイッチ8に接続されている。ポート3cは、ネットワークN3に接続されている。また、スイッチ4は、スイッチ5に接続されている。スイッチ6は、スイッチ7に接続されている。スイッチ7は、ネットワークN2に接続されている。スイッチ8は、他のスイッチまたは他のネットワーク(何れも図示を省略)に接続されている。
ネットワークN1にはノード9,9aが接続されている。ネットワークN2にはノード9bが接続されている。ネットワークN3にはノード9cが接続されている。ノード9,9a,9b,9cは、例えばデータ通信を行うコンピュータなどの情報処理装置である。
ここで、スイッチ2,3の各ポートはポート番号に対応付けられている。ポート2aのポート番号は“#1”である。ポート2bのポート番号は“#2”である。ポート2cのポート番号は“#3”である。ポート3aのポート番号は“#1”である。ポート3bのポート番号は“#2”である。ポート3cのポート番号は“#3”である。
また、スイッチ2,3およびノード9,9a,9b,9cにはアドレスが付与されている。アドレスはIPアドレスでもよい。スイッチ2のアドレスは“SW1”である。スイッチ3のアドレスは“SW2”である。ノード9のアドレスは“X1”である。ノード9aのアドレスは“X2”である。ノード9bのアドレスは“Y1”である。ノード9cのアドレスは“Z1”である。
制御装置1は、ネットワークN内の制御用のネットワークを介してスイッチ2,3,4,5,6,7,8と接続され、スイッチ2,3,4,5,6,7,8によるデータ転送を制御する。具体的には、制御装置1は、転送対象のデータの宛先に応じて、そのデータの転送先を示すルールをスイッチ2,3,4,5,6,7,8に登録する。スイッチ2,3,4,5,6,7,8は、そのルールに従ってデータを転送する。
例えば、制御装置1およびスイッチ2,3,4,5,6,7,8はSDNの手法によりデータ転送を行うネットワークシステムでもよい。制御装置1は、LLDP(Link Layer Discovery Protocol)などを用いて、スイッチ2,3,4,5,6,7,8によるネットワークトポロジを予め検出し得る。
制御装置1は、記憶部1aおよび制御部1bを有する。記憶部1aは、RAM(Random Access Memory)などの揮発性記憶装置でもよいし、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性記憶装置でもよい。制御部1bは、例えば、プロセッサを含む。プロセッサは、CPU(Central Processing Unit)やDSP(Digital Signal Processor)でもよいし、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの特定用途の電子回路でもよい。また、プロセッサは、複数のプロセッサの集合(マルチプロセッサ)でもよい。プロセッサは、例えば、記憶部1aに記憶されたプログラムを実行するものでもよい。
記憶部1aは、アドレスの集合“X,Y,Z”を示す情報R1を記憶する。情報R1は、例えば、ユーザにより記憶部1aに予め格納されてもよい。ここで、集合“X”は、“X1,X2”などの複数のアドレスを要素にもつ集合である。集合“Y”は“Y1”などの複数のアドレスを要素にもつ集合である。集合“Z”は“Z1”などの複数のアドレスを要素にもつ集合である。
制御部1bは、第1のアドレスを送信元とする第1のデータを受信した第1のスイッチから第1のアドレスと第1のデータを受信したポートの情報とを取得する。すると、制御部1bは、集合“X,Y,Z”のうち第1のアドレスが属する集合とポートとの対応関係を示す情報を生成する。
例えば、ノード9によりノード9bへ宛てたデータD1が送信されたとする。データD1の宛先アドレスは“Y1”である。データD1の送信元アドレスは“X1”である。データD1は、ネットワークN1を介してポート2cに到着する。この場合、制御部1bは、送信元アドレス“X1”とポート2cの情報(ここでは、スイッチ2の識別情報とポート番号との組“SW1−#3”)をスイッチ2から取得する。例えば、スイッチ2は、データD1の転送先が不明なとき、送信元アドレス“X1”を含むデータD1を、ポート2cの情報とともに制御装置1に送信してもよい。
すると、制御部1bは、送信元アドレス“X1”が属する集合“X”とポート2cとの対応関係を示す情報R2を生成する。例えば、情報R2は、集合“X”とポート2cの識別情報“SW1−#3”との対応関係を示す。制御部1bは、情報R2を記憶部1aに格納する。
制御部1bは、情報R2に登録された集合に属する第2のアドレスを宛先とする第2のデータを受信した第2のスイッチから第2のアドレスを取得する。制御部1bは、情報R2の対応関係により第2のデータを、情報R2で示されるポートから出力させると決定する。
例えば、ノード9cによりノード9aへ宛てたデータD2が送信されたとする。データD2の宛先アドレスは“X2”である。データD1の送信元アドレスは“Z1”である。データD2は、ネットワークN3を介してポート3cに到着する。この場合、制御部1bは、宛先アドレス“X2”をスイッチ3から取得する。例えば、スイッチ3は、データD2の転送先が不明なとき、宛先アドレス“X2”を含むデータD2を制御装置1に送信してもよい。すると、制御部1bは、情報R2の対応関係によりデータD2を、ポート2cから出力させると決定する。アドレス“X2”は集合“X”の要素だからである。
例えば、制御部1bは、データD2をスイッチ2へ向けて転送するルールをスイッチ3,5,4に設定してもよい。具体的には、制御部1bは、宛先アドレス“X2”であるデータをポート3aから出力するというルールをスイッチ3に設定する。スイッチ5にはスイッチ4に繋がるポート、スイッチ4にはスイッチ2に繋がるポートから当該データを出力するというルールを設定する。また、制御部1bは宛先アドレス“X2”であるデータをポート2cから出力するというルールをスイッチ2に設定する。すると、データD2は、スイッチ3,5,4,2およびネットワークN1を介してノード9aまで転送される。
制御装置1によれば、データD1の送信元アドレス“X1”とデータD1を受信したポート2cの情報とがスイッチ2から取得される。すると、記憶部1aに記憶された情報R1で示される集合“X,Y,Z”のうちアドレス“X1”が属する集合“X”とポート2cとの対応関係を示す情報R2が生成される。制御装置1により、データD2の宛先であり集合“X”に属するアドレス“X2”がスイッチ3から取得される。すると、情報R2で示される対応関係によりデータD2をポート2cから出力させると決定される。
これにより、アドレスの学習を効率化できる。具体的には次の通りである。例えば、各ノードが何れのスイッチの何れのポートの先に存在するかを、ノードのアドレス毎に、制御装置1に学習させることも考えられる。例えば、制御装置1は、ノードのアドレスとポートとの対応関係を学習するために、所定の問合せをネットワークN1,N2,N3にブロードキャストすることが考えられる。
具体的には、制御装置1がデータD2の宛先アドレス“X2”をIPアドレスとし、各ノードのIPアドレスが同じサブネットに属するとき、アドレス“X2”と何れかのポートとの対応を学習することを考える。このとき、制御装置1は、IPアドレス“X2”のMAC(Media Access Control)アドレスを解決するためのARP(Address Resolution Protocol)リクエストをネットワークN1,N2などに転送することが考えられる。何れかのノードからのARPリクエストを取得した場合に、制御装置1は、ネットワークN1,N2などにそのARPリクエストを転送してもよい。
この場合、制御装置1は、アドレス“X2”が何れのスイッチの何れのポートの先に存在するかが不明なら、そのARPリクエストを各ネットワークまで転送するためのルールを、スイッチ2,3,4,5,6,7,8に設定することになる。すると、各スイッチはARPリクエストをネットワークN1,N2などに転送する。宛先IPアドレス“X2”のノード9aは、ポート2cの先にあるから、スイッチ2が当該ARPリクエストに対するARPリプライを受信することになる。制御装置1は、ARPリプライを受信したスイッチ2から、ARPリプライの送信元IPアドレス“X2”とポート2cの情報を取得することで、IPアドレス“X2”とポート2cとの対応を学習し得る。
ところが、このように、ノードのアドレス毎に学習を行っていると、ノード数が増大するほど、制御装置1の学習量が増大し得る。すなわち、制御装置1による学習の頻度や学習する情報量が増大してしまう。制御装置1による学習の頻度が高まると、学習のための制御装置1の負荷が増大し得る。また、学習した情報量が巨大化すると、記憶部1aなどの記憶領域を圧迫し得る。また、学習した情報量が巨大化すると学習した情報から何れかのエントリを検索するための処理コストが増大し得る。
また、上記のように未知のIPアドレスが発生するたびに、ARPリクエストをネットワークNの外部の複数のネットワークに転送していると、スイッチ2,3,4,5,6,7,8に設定されるルールが巨大化するおそれがある。ARPリクエストを各ネットワークまで転送させるためのルールが、問合せ対象のIPアドレス毎に、スイッチ2,3,4,5,6,7,8に設定されることになるからである。各スイッチに設定されるルールが巨大化すると、各スイッチの記憶領域を圧迫し得る。また、各スイッチにおいて転送対象のデータをルールと照合するための処理コストが増大し得る。
これに対し、制御装置1では、記憶部1aに格納された情報R1で示される集合“X,Y,Z”を単位として、各集合に属するアドレスをもつノードが、どのスイッチの、どのポートの先に存在するかを学習し、情報R2を生成する。そして、例えば、情報R2に登録された集合“X”に属するアドレス“X2”を宛先としたデータD2を受信した場合に、集合“X”に対応するポート2cからデータD2を出力させると決定する。すなわち、制御装置1は、アドレス“X2”であるノード9aが何れのスイッチの何れのポートの先に存在しているかを学習しなくてもよい。よって、制御装置1によるアドレスの学習量を低減できる。学習量の低減は、学習のための負荷低減、記憶領域の節約、学習した情報内を検索する処理コストの低減に寄与する。
また、例えば、データD2がARPリクエストである場合にも、上記のようにデータD2の出力先ポートをポート2cと決定できるので、当該ARPリクエストをスイッチ3,5,4,2と転送して、ポート2cから出力させればよい。このため、制御装置1は、当該ARPリクエストの転送用のルールをスイッチ3,5,4,2に設定すればよく、スイッチ6,7,8に当該ルールを設定しなくてもよい。例えば、スイッチ6,7,8の先に集合“X”に属するIPアドレスをもつノードが存在しないことが明らかであれば、IPアドレス“X2”を宛先(問合せ)IPアドレスとするARPリクエスト転送用のルールをスイッチ6,7,8に設定するのは余計だからである。このように、余計なルールを各スイッチに設定しないことで、各スイッチに設定されるルールの情報量を低減できる。上記の場合、スイッチ6,7,8は余計な転送処理を行わずに済むので、スイッチ6,7,8の負荷も低減できる。また、ネットワークN1以外のネットワークで余計なARPリクエストがブロードキャストされないので、当該ネットワークの負荷も低減できる。
更に、ユーザは、学習させたい集合の情報を記憶部1aに予め登録しておけばよい。例えば、ネットワークN1,N2,N3において、近接するアドレスをもつ複数のノードが同じネットワークに接続されるという運用上の制約が存在するなら、ユーザはその制約を把握してさえいれば、アドレスの集合を制御装置1に登録することができる。このため、宛先として用いられ得る全てのアドレスを事前に把握して登録しておかなくてもよい。よって、ユーザによる作業の省力化を図れる。
以上のように、制御装置1はアドレスの学習を効率化できる。なお、上記の説明では制御装置1がデータD1,D2が異なるスイッチ2,3により受信される場合を例示したが、同一のスイッチにより受信された場合も同様に制御し得る。例えば、図1において、ポート2bの先にネットワークN2が直接(スイッチ6,7を省いて)接続され、集合“X”とポート2cとの対応関係を示す情報R2が記憶部1aに格納されている場合を考える。このとき、ノード9bから宛先アドレスを“X2”とするデータがポート2bに到着しても、制御部1bは、データD2がポート3cに到着したときと同様に処理できる。すなわち、制御部1bは、スイッチ2から宛先アドレス“X2”を取得し、ポート2bに到着したデータをポート2cから出力させると決定できる。
[第2の実施の形態]
図2は、第2の実施の形態の情報処理システムを示す図である。第2の実施の形態の情報処理システムは、クライアント30,50,60、サーバ30a,40,40a、制御サーバ100およびスイッチ200,300,400,500,600,700を含む。制御サーバ100およびスイッチ200,300,400,500,600,700は、オープンフローを用いてデータの転送を行う。
クライアント30,50,60は、ユーザにより利用されるクライアントコンピュータである。サーバ30a,40,40aは、クライアント30,50,60などに所定のサービスを提供するサーバコンピュータである。以下の説明では、クライアント30,50,60およびサーバ30a,40,40aを指して“エンドホスト”ということがある。
制御サーバ100は、スイッチ200,300,400,500,600,700によるデータ転送を制御するサーバコンピュータである。制御サーバ100は、ネットワーク10に接続されている。ネットワーク10は、制御用のネットワーク(コントロールプレーン)である。ネットワーク10には、スイッチ200,300,400,500,600,700も接続されている。制御サーバ100は、ネットワーク10を介してスイッチ200,300,400,500,600,700と通信可能である。制御サーバ100は、第1の実施の形態の制御装置1の一例である。
スイッチ200,300,400,500,600,700は、制御サーバ100からの指示に従ってデータ転送を行う装置である。スイッチ200,300,400,500,600,700は、ネットワーク20を形成する。例えば、スイッチ200,300,400,500,600,700を所定のケーブルを介して接続することでスイッチ間を結ぶ通信経路が形成される。ネットワーク20は、データ転送用のネットワーク(データプレーン)である。
ここで、ネットワーク20は、ネットワーク21,22,23,24に接続されている。ネットワーク21,22,23,24はユーザ用のネットワークである。ネットワーク21にはクライアント30、サーバ30aが接続されている。ネットワーク22にはサーバ40,40aが接続されている。ネットワーク23にはクライアント50が接続されている。ネットワーク24にはクライアント60が接続されている。
また、スイッチ200は、スイッチ600およびネットワーク21に接続されている。スイッチ300は、スイッチ700およびネットワーク22に接続されている。スイッチ400は、スイッチ700およびネットワーク23に接続されている。スイッチ500は、スイッチ600およびネットワーク24に接続されている。スイッチ600は、スイッチ200,500,700に接続されている。スイッチ700は、スイッチ300,400,600に接続されている。
スイッチ200,300,400,500は、ネットワーク20に属し、ネットワーク20とネットワーク21,22,23,24との境界に配置されているので、エッジスイッチまたはエッジと呼ぶことができる。これに対し、スイッチ600,700は、当該境界ではなく、ネットワーク20内部で基幹の通信路を形成しているので、コアスイッチと呼ぶことができる。なお、以下の説明ではスイッチ200,300,400,500,600,700を指して、“各スイッチ”と表記することがある。
ここで、クライアント30,50,60およびサーバ30a,40,40aの通信インタフェースは、MACアドレスによって識別される。クライアント30,50,60およびサーバ30a,40,40aは、各自のIPアドレスを各自のMACアドレスに対応付けて保持する。
また、第2の実施の形態では、L2ネットワーク(フラットなネットワーク)を想定する。すなわち、クライアント30,50,60およびサーバ30a,40,40aに設定されている各IPアドレスについて、ネットワークアドレスは同一であるとする。あるエンドホストは、他のエンドホストと通信しようとするとき、当該他のエンドホストのIPアドレスが自身のIPアドレスと同じネットワークアドレスに属していると認識する。
更に、ネットワーク21,22,23,24では、近接する(例えば、IPアドレスの上位何ビットかが同じである)IPアドレスをもつ複数のエンドホストが同じネットワークに接続されるという運用上のポリシーが存在している。
図3は、第2の実施の形態のスイッチの接続関係を示す図である。図3では、各スイッチが備える通信用のポートの接続関係を例示している。各スイッチのポートには、ポート番号が付与されている。
スイッチ200は、ポート番号“a1”、“a2”、“a3”のポートを有する。スイッチ300は、ポート番号“b1”、“b2”、“b3”のポートを有する。スイッチ400は、ポート番号“c1”、“c2”、“c3”のポートを有する。スイッチ500は、ポート番号“d1”、“d2”、“d3”のポートを有する。スイッチ600は、ポート番号“e1”、“e2”、“e3”、“e4”のポートを有する。スイッチ700は、ポート番号“f1”、“f2”、“f3”、“f4”のポートを有する。
ここで、以下の説明では、“ポート”の文字列と、ポート番号とを組み合わせて各ポートを表記する。例えば、ポート番号“a1”のポートであれば、“ポートa1”のように表記する。各スイッチのポートの具体的な接続関係は次の通りである。
ポートa1はネットワーク21に接続されている。ポートb2は、ネットワーク22に接続されている。ポートc1はネットワーク23に接続されている。ポートd1はネットワーク24に接続されている。
また、次のポートの組が相互に接続されている。ポートa2,e1。ポートb1,f2。ポートc2,f1。ポートd2,e2。ポートe3,f3。更に、ポートa3,b3,c3,d3,e4,f4は、ネットワーク10を介して制御サーバ100に接続されている(図中、この接続関係を点線で示している)。制御サーバ100は、各スイッチのポートの接続関係を含むネットワークトポロジを所定のプロトコル(LLDPやOSPF(Open Shortest Path First)など)を用いて把握できる。
図3では、各スイッチに付与された識別情報も例示している。スイッチ200の識別情報は“A”である。スイッチ300の識別情報は“B”である。スイッチ400の識別情報は“C”である。スイッチ500の識別情報は“D”である。スイッチ600の識別情報は“E”である。スイッチ700の識別情報は“F”である。識別情報は、各スイッチのネットワーク10に接続されたポートのMACアドレスやIPアドレスなどでもよい。
また、図3では、クライアント30,50,60およびサーバ30a,40,40aのIPアドレスも例示している。クライアント30のIPアドレスは“192.168.30.55”である。サーバ30aのIPアドレスは“192.168.30.9”である。サーバ40のIPアドレスは“192.168.40.2”である。サーバ40aのIPアドレスは“192.168.40.10”である。クライアント50のIPアドレスは“192.168.50.101”である。クライアント60のIPアドレスは“192.168.60.2”である。
図4は、第2の実施の形態の制御サーバのハードウェア例を示す図である。制御サーバ100は、プロセッサ101、RAM102、HDD103、画像信号処理部104、入力信号処理部105、読み取り装置106、通信インタフェース107を有する。各ユニットが制御サーバ100のバスに接続されている。
プロセッサ101は、制御サーバ100全体を制御する。プロセッサ101は、マルチプロセッサであってもよい。プロセッサ101は、例えばCPU、DSP、ASICまたはFPGAなどである。プロセッサ101は、CPU、DSP、ASIC、FPGAなどのうちの2以上の要素の組み合わせであってもよい。
RAM102は、制御サーバ100の主記憶装置である。RAM102は、プロセッサ101に実行させるOS(Operating System)のプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、RAM102は、プロセッサ101による処理に用いる各種データを記憶する。
HDD103は、制御サーバ100の補助記憶装置である。HDD103は、内蔵した磁気ディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。HDD103には、OSのプログラム、アプリケーションプログラム、および各種データが格納される。制御サーバ100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の補助記憶装置を備えてもよく、複数の補助記憶装置を備えてもよい。
画像信号処理部104は、プロセッサ101からの命令に従って、制御サーバ100に接続されたディスプレイ11に画像を出力する。ディスプレイ11としては、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、有機EL(Electro-Luminescence)ディスプレイなど各種のディスプレイを用いることができる。
入力信号処理部105は、制御サーバ100に接続された入力デバイス12から入力信号を取得し、プロセッサ101に出力する。入力デバイス12としては、マウスやタッチパネルなどのポインティングデバイス、キーボード、ボタンスイッチなど各種の入力デバイスを用いることができる。また、制御サーバ100には複数の種類の入力デバイスが接続されてもよい。
読み取り装置106は、記録媒体13に記録されたプログラムやデータを読み取る装置である。記録媒体13として、例えば、フレキシブルディスク(FD:Flexible Disk)やHDDなどの磁気ディスク、CD(Compact Disc)やDVD(Digital Versatile Disc)などの光ディスク、光磁気ディスク(MO:Magneto-Optical disk)を使用できる。また、記録媒体13として、例えば、フラッシュメモリカードなどの不揮発性の半導体メモリを使用することもできる。読み取り装置106は、例えば、プロセッサ101からの命令に従って、記録媒体13から読み取ったプログラムやデータをRAM102またはHDD103に格納する。
通信インタフェース107は、ネットワーク10を介して他の装置(例えば、各スイッチ)と通信を行う。
クライアント30,50,60およびサーバ30a,40,40aも制御サーバ100と同様のハードウェアによって実現できる。
図5は、第2の実施の形態のスイッチのハードウェア例を示す図である。スイッチ200は、プロセッサ201、RAM202、ROM(Read Only Memory)203およびネットワーク接続部204を有する。各ユニットがスイッチ200のバスに接続されている。
プロセッサ201は、スイッチ200全体を制御する。プロセッサ201は、マルチプロセッサであってもよい。プロセッサ201は、例えばCPU、MPU、DSP、ASICまたはFPGAなどである。プロセッサ201は、CPU、MPU、DSP、ASIC、FPGAのうちの2以上の要素の組み合わせであってもよい。
RAM202は、スイッチ200の主記憶装置である。RAM202は、プロセッサ201に実行させるファームウェアのプログラムの少なくとも一部を一時的に記憶する。または、RAM202は、プロセッサ201による処理に用いる各種のデータを記憶する。
ROM203は、ファームウェアのプログラムやデータを予め記憶している。ROM203は、フラッシュメモリなど、書き換え可能な不揮発性メモリであってもよい。ROM203に記憶されたプログラムやデータは、プロセッサ201の処理に用いられる。
ネットワーク接続部204は、データ転送に用いられる通信インタフェースである。ネットワーク接続部204は、ポートa1,a2,a3を含む。前述のように、ポートa1はネットワーク21に接続されている。ポートa2はスイッチ600に接続されている。ポートa3はネットワーク10に接続されている。ネットワーク接続部204は、ポートa1,a2,a3に入力されたデータをプロセッサ201に出力する。また、ネットワーク接続部204は、プロセッサ201による指示に従って、ポートa1,a2,a3からデータを出力する。
スイッチ300,400,500,600,700もスイッチ200と同様のハードウェアによって実現できる。
図6は、第2の実施の形態の制御サーバの機能例を示す図である。制御サーバ100は、記憶部110、メッセージ通信部120、アドレス学習部130、ポリシー処理部140および転送制御部150を有する。記憶部110は、RAM102やHDD103に確保された記憶領域を用いて実現できる。メッセージ通信部120、アドレス学習部130、ポリシー処理部140および転送制御部150は、プロセッサ101によって実行されるプログラムのモジュールであってもよい。
記憶部110は、制御サーバ100の各部の処理に用いられる情報を記憶する。記憶部110が記憶する情報は、ポリシー情報111、エンドホストテーブル112およびアドレス−エッジ対応テーブル113を含む。
ポリシー情報111は、同一エッジの配下(ネットワーク20の外部)に存在するIPアドレス空間(IPアドレスの集合)を特定するための情報である。エンドホストテーブル112は、学習したエッジ情報とIPアドレスとMACアドレスとの対応関係を示す情報である。ここで、エッジ情報とは、スイッチとポートとの組み合わせであり、各スイッチの何れかのポートを識別する情報である。アドレス−エッジ対応テーブル113は、エッジ情報とIPアドレス空間との対応関係を示す情報である。なお、記憶部110は、各スイッチとの通信に用いられる情報(各スイッチのネットワーク10に接続されたポートのIPアドレスやMACアドレスなど)も記憶する。
メッセージ通信部120は、各スイッチとの間で各種のメッセージを送受信する。具体的には、メッセージ通信部120は、Packet−Inメッセージを各スイッチから受信する。Packet−Inメッセージは、各スイッチに到着したデータを制御サーバ100に送信するためのメッセージである。Packet−Inメッセージは、送信元のスイッチおよび当該スイッチがデータを受信したポートの情報を含む。メッセージ通信部120は、受信したPacket−Inメッセージを、アドレス学習部130や転送制御部150に出力する。
また、メッセージ通信部120は、Packet−OutメッセージやFlow−Modメッセージを各スイッチに送信する。Packet−Outメッセージは、Packet−Inメッセージで取得したデータをスイッチに送信するためのメッセージである。Flow−Modメッセージは、各スイッチに対してフローエントリの設定を行うためのメッセージである。Packet−OutメッセージやFlow−Modメッセージは、転送制御部150によって生成される。以下の説明において、アドレス学習部130や転送制御部150によるメッセージ送受信は、メッセージ通信部120を介して行われる。
アドレス学習部130は、エンドホストのIPアドレス、MACアドレスおよびエッジ情報の対応を学習する。アドレス学習部130は、Packet−Inメッセージから転送対象のデータを取得する。アドレス学習部130は、アドレス−エッジ対応テーブル113を参照して、そのデータに含まれる送信元IPアドレスが属するIPアドレス空間に対応するエッジ情報を検索する。エッジ情報を検索できない場合、その送信元IPアドレスと、そのデータに含まれる送信元MACアドレスとエッジ情報との対応関係を生成し、エンドホストテーブル112に登録する。アドレス−エッジ対応テーブル113から何れかのエッジ情報を検索できた場合、アドレス学習部130は何もしない。
ポリシー処理部140は、アドレス学習部130によりエンドホストテーブル112に新たなエントリが追加されると、ポリシー情報111に登録されたポリシーに基づいて、学習されたIPアドレスが、何れのIPアドレス空間に属するかを特定する。ポリシー処理部140は、特定したIPアドレス空間と、アドレス学習部130によって学習されたエッジ情報との対応関係を示す情報を生成し、アドレス−エッジ対応テーブル113に登録する。
転送制御部150は、Packet−Inメッセージに含まれるデータの宛先IPアドレスに応じて、そのデータの転送先を決定する。その際、転送制御部150は、アドレス−エッジ対応テーブル113を用いる。具体的には、転送制御部150は、アドレス−エッジ対応テーブル113を参照して、宛先IPアドレスが属するIPアドレス空間に対応するエッジ情報を検索する。転送制御部150は、当該エッジ情報で示されるエッジのポートからそのデータを送出すると決定する。当該エッジ情報で示されるエッジは、ネットワーク20から外部のネットワークに対してデータを送出することになるから、ネットワーク20内での終点エッジということができる。
ここで、転送制御部150は、Packet−Inメッセージの送信元エッジ(以下、Packet−Inの送信元エッジということがある)から、終点エッジに至る通信経路を検出することができる。ここで、Packet−Inの送信元エッジは、ネットワーク20内における通信経路の始点になるから、始点エッジということもできる。転送制御部150は、前述のようにLLDPやOSPFなどを用いて各スイッチによるネットワークトポロジの情報を予め取得し、記憶部110に格納しておく。そうすれば、記憶部110に記憶されたネットワークトポロジの情報により、Packet−Inの送信元エッジ(始点エッジ)から、終点エッジに至る通信経路を把握できる。なお、通信経路の候補が複数存在する場合には、ネットワークトポロジを示すグラフにダイクストラ法などを適用して最短経路を選択してもよい。
転送制御部150は、検出した通信経路上に存在するスイッチに対して、終点エッジまでデータを転送するためのフローエントリを設定する。また、転送制御部150は、エッジ情報で示されるポートからデータを出力するためのフローエントリを終点エッジに設定する。フローエントリの設定には、前述のようにFlow−Modメッセージが用いられる。転送制御部150は、Packet−Inの送信元エッジ(始点エッジ)に対してPacket−Outメッセージを送信し、データを転送させる。
転送制御部150は、Packet−Inメッセージにより、ARPリクエストを受信することもある。その場合、転送制御部150は、アドレス−エッジ対応テーブル113を参照して、ARPリクエストに含まれる宛先(問合せ)IPアドレスが属するIPアドレス空間に対応するエッジ情報を検索する。何れかのエッジ情報を検索できた場合、転送制御部150は、上記のように当該エッジ情報で示されるエッジのポートからそのARPリクエストを送出すると決定する。一方、何れのエッジ情報も検索できない場合、ネットワーク21,22,23,24(ARPリクエストの送信元のエンドホストが属するネットワークを除く。以下、同様)に、そのARPリクエストを転送する。すなわち、この場合、転送制御部150は、複数のエッジのネットワーク21,22,23,24に繋がるポートから、そのARPリクエストを送出すると決定する。
図7は、第2の実施の形態のスイッチの機能例を示す図である。スイッチ200は、記憶部210、メッセージ通信部220および転送処理部230を有する。記憶部210は、RAM202に確保された記憶領域を用いて実現できる。メッセージ通信部220および転送処理部230は、プロセッサ201によって実行されるプログラムのモジュールであってもよい。
記憶部210は、転送処理部230の処理に用いられる情報を記憶する。記憶部210が記憶する情報は、フローテーブル211を含む。フローテーブル211は、フローを特定するマッチ条件と処理方法(アクション)との対応関係を示すフローエントリを記録した情報である。ここで、フローは転送対象のデータを区別する単位である。フローは、例えば送信元IPアドレス、宛先IPアドレス、宛先MACアドレスなど、または、これらを組み合わせたマッチ条件によって特定される。なお、記憶部210は、制御サーバ100との通信に用いられる情報(通信インタフェース107のMACアドレスやIPアドレスなど)も記憶する。
メッセージ通信部220は、制御サーバ100との間で各種のメッセージを送受信する。具体的には、メッセージ通信部220は、Packet−Inメッセージを制御サーバ100に送信する。Packet−Inメッセージは転送処理部230によって生成される。以下の説明において、転送処理部230によるメッセージ送受信は、メッセージ通信部220を介して行われる。
また、メッセージ通信部220は、Packet−OutメッセージやFlow−Modメッセージなどの各種のメッセージを制御サーバ100から受信する。メッセージ通信部220は、受信したPacket−OutメッセージやFlow−Modメッセージを転送処理部230に出力する。
転送処理部230は、フローテーブル211に基づいて、データの転送を行う。また、転送処理部230は、宛先IPアドレスが未知であるデータ(フローテーブル211の何れのマッチ条件にも合致しないデータ)をネットワーク21から受信すると、当該データを含むPacket−Inメッセージを生成して制御サーバ100に送信する。
転送処理部230は、Flow−Modメッセージを制御サーバ100から受信すると、Flow−Modメッセージの指示内容に従って、記憶部210に記憶されたフローテーブル211を更新する。転送処理部230は、記憶部210に記憶されたフローテーブル211に基づいて、受信したデータを転送する。
また、転送処理部230は、Packet−Outメッセージを制御サーバ100から受信すると、フローテーブル211に登録されたフローエントリに従って、Packet−Outメッセージに含まれるデータを転送する。転送処理部230は、Packet−Outメッセージ内のアクションに従って、Packet−Outメッセージに含まれるデータを処理することもある。
スイッチ300,400,500,600,700もスイッチ200と同様の機能を有する。
図8は、第2の実施の形態のポリシー情報の例を示す図である。ポリシー情報111は、同一エッジの配下(ネットワーク20の外部)に存在する複数のIPアドレス空間を特定するための情報である。ポリシー情報111は、IPアドレス空間の割り当て方法を定めた情報ということもできる。例えば、ポリシー情報111には、“/24で定義されるIPアドレス空間は、同一エッジの特定のポートに属する”という情報が登録されている。これは、IPアドレスの上位24ビットが同一である各IPアドレス空間(IPアドレスの集合)は、同一エッジの特定のポートに属することを示している。
これは一例であり、ポリシー情報111には、ユーザにより任意のポリシーを登録することができる。例えば、ポリシー情報111として、“IPアドレス:192.168.100.1〜192.168.100.100は同一エッジの特定のポートに属する”、“IPアドレス:192.168.100.101〜192.168.100.200は同一エッジの特定のポートに属する”のようにIPアドレスの複数の範囲を明示的に設定してもよい。また、上記のように連続した値の範囲とする他、不連続な値(例えば、“192.168.100.101”と“192.168.100.103”など)を要素として含むIPアドレスの集合を設定することも考えられる。
図9は、第2の実施の形態のエンドホストテーブルの例を示す図である。エンドホストテーブル112は、エッジ情報、IPアドレスおよびMACアドレスの項目を含む。エッジ情報の項目には、スイッチのポートを識別する情報が登録される。IPアドレスの項目には、エンドホストのIPアドレスが登録される。MACアドレスの項目には、エンドホストのMACアドレスが登録される。
例えば、エンドホストテーブル112には、エッジ情報が“A−a1”、IPアドレスが“192.168.30.55”、MACアドレスが“MAC1”という情報が登録されている。ここで、MACアドレス“MAC1”はクライアント30が備える通信インタフェースのMACアドレスである(以下、単に“クライアント30のMACアドレス”などという)。このエントリは、IPアドレス“192.168.30.55”およびMACアドレス“MAC1”を有するクライアント30がポートa1の先に存在することを示している。
図10は、第2の実施の形態のアドレス−エッジ対応テーブルの例を示す図である。アドレス−エッジ対応テーブル113は、エッジ情報およびIPアドレス空間の項目を含む。エッジ情報の項目には、スイッチのポートを識別する情報が登録される。IPアドレス空間の項目には、IPアドレス空間を示す情報が登録される。
例えば、アドレス−エッジ対応テーブル113には、エッジ情報が“A−a1”、IPアドレス空間が“192.168.30.0/24”という情報が登録される。これは、IPアドレス空間“192.168.30.0/24”に属するIPアドレスをもつエンドホストが、ポートa1の先に存在することを示している。
ポリシー処理部140は、ポリシー情報111およびエンドホストテーブル112のエントリに基づいてアドレス−エッジ対応テーブル113を生成できる。すなわち、IPアドレス空間割り当てポリシー(ポリシー情報111)を予め設定し、従来の方式(例えば、既知のラーニングスイッチと同様の方式)で得られる対応情報(エンドホストテーブル112)にポリシーを考慮した変換を行う。
具体的には、エンドホストテーブル112に登録されたIPアドレス“192.168.30.55”を、ポリシーで示される「上位24ビットが同じであるIPアドレス空間」“192.168.30.0/24”に変換する。そして、エンドホストテーブル112に登録されたIPアドレス“192.168.30.55”のエッジ情報“A−a1”に、IPアドレス空間“192.168.30.0/24”を対応付けることで、アドレス−エッジ対応テーブル113の上記エントリを生成できる。
図11は、第2の実施の形態のフローテーブルの例を示す図である。図11では、クライアント30により送信されたARPリクエストを、スイッチ200からネットワーク22,23,24に転送するためのフローテーブル211,311,411,511,611,711を例示している。ただし、ここで示すフローエントリは一例であり、エンドホスト間の通信状況によって変わり得る。
フローテーブル211は、前述のようにスイッチ200により保持される。フローテーブル311は、スイッチ300により保持される。フローテーブル411は、スイッチ400により保持される。フローテーブル511は、スイッチ500により保持される。フローテーブル611は、スイッチ600により保持される。フローテーブル711は、スイッチ700により保持される。
フローテーブル211,311,411,511,611,711は、マッチ条件およびアクションの項目を含む。マッチ条件の項目には、フローを特定するためのマッチ条件が登録される。アクションの項目には、そのフローに対する処理を示すアクションが登録される。
例えば、フローテーブル211には、マッチ条件が“宛先MACアドレス:FFFFFFFFFFFF かつ 送信元IPアドレス:192.168.30.55”、アクションが“ポートa2から出力”というフローエントリが登録されている。
このフローエントリは、転送対象のデータに含まれる宛先MACアドレスが“FFFFFFFFFFFF”かつ送信元IPアドレスが“192.168.30.55”である場合に、そのデータをポートa2から出力させるためのフローエントリである。なお、宛先MACアドレス“FFFFFFFFFFFF”は、データリンク層におけるブロードキャストアドレスである。当該フローエントリは、後述するように、ARPリクエストを想定したものである。
フローテーブル311,411,511,611,711にも同様のマッチ条件が登録されている。ただし、アクションはスイッチ毎に異なっている。また、各スイッチのフローテーブルには、他の情報(例えば、マッチ条件の適合回数など)が記録されてもよい。
転送制御部150は、Packet−Inメッセージを新たに受けたとき、アドレス−エッジ対応テーブル113を参照して、Packet−Inメッセージ内のフレームの宛先IPアドレスを含むIPアドレス空間のエントリが、アドレス−エッジ対応テーブル113になければ、当該宛先IPアドレスに対応するエッジ情報を取得するために、各エッジまでの図11に示したエントリを生成し、各スイッチのフローテーブルに設定する。
一方、転送制御部150は、Packet−Inメッセージを新たに受けたとき、アドレス−エッジ対応テーブル113を参照して、Packet−Inメッセージ内のフレームの宛先IPアドレスを含むIPアドレス空間のエントリが、アドレス−エッジ対応テーブル113にあれば、得られたエッジまで到達させるエントリを各スイッチのフローテーブルに設定する。
図12は、第2の実施の形態のARP用のフレームの例を示す図である。エンドホスト間で通信されるデータは、OSI参照モデルのデータリンク層(あるいは、イーサネット(Ethernet、登録商標))におけるフレームと呼ばれる単位で送受信される。以下の説明では、転送対象のデータを指して、フレームということがある。フレーム70は、ARP用のフレームを例示している。
フレーム70は、MACヘッダ71およびARPパケット72を含む。MACヘッダ71は、フレーム70のヘッダ領域である。MACヘッダ71は、宛先MACアドレス、送信元MACアドレスおよびタイプのフィールドを含む。
宛先MACアドレスのフィールドには、宛先MACアドレスが設定される。送信元MACアドレスのフィールドには、送信元MACアドレスが設定される。タイプのフィールドには、イーサネットタイプが設定される。
ARPパケット72は、ARPの送信元(問合せ元)および宛先(問合せ先)の情報を格納した領域である。ここで、パケットは、OSI参照モデルのネットワーク層(あるいは、IP)における通信単位である。ARPパケット72は、送信元MACアドレス、送信元IPアドレス、宛先MACアドレスおよび宛先IPアドレスの項目を含む。
宛先MACアドレスのフィールドには、宛先MACアドレスが設定される。送信元IPアドレスのフィールドには、送信元IPアドレスが設定される。宛先MACアドレスのフィールドには、宛先MACアドレスが設定される。宛先IPアドレスのフィールドには、宛先IPアドレスが設定される。
図12では、ARPリクエスト70aおよびARPリプライ70bも例示している。ARPリクエスト70aは、クライアント30により送信されたARPリクエストである。例えば、ARPリクエスト70aのMACヘッダには、宛先MACアドレス“FFFFFFFFFFFF”(データリンク層におけるブロードキャストアドレス)、送信元MACアドレス“MAC1”、タイプ“0x0806”(ARPを示す)が設定されている。ARPリクエスト70aのARPパケットには、送信元MACアドレス“MAC1”、送信元IPアドレス“192.168.30.55”、宛先MACアドレス“000000000000”、宛先IPアドレス“192.168.40.2”が設定されている。すなわち、ARPリクエスト70aは、IPアドレス“192.168.40.2”(サーバ40)に対応するMACアドレスを問い合わせるARPリクエストである。
また、ARPリプライ70bは、ARPリクエスト70aに対してサーバ40により送信されたARPリプライである。例えば、ARPリプライ70bにおいて、MACヘッダには、宛先MACアドレス“MAC1”、送信元MACアドレス“MAC2”、タイプ“0x0806”が設定されている。ここで、MACアドレス“MAC2”は、サーバ40のMACアドレスである。また、ARPリプライ70bにおいて、ARPパケットには、送信元MACアドレス“MAC2”、送信元IPアドレス“192.168.40.2”、宛先MACアドレス“MAC1”、宛先IPアドレス“192.168.30.55”が設定されている。
図13は、第2の実施の形態のPacket−Inメッセージの例を示す図である。Packet−Inメッセージ80は、各スイッチが受信したフレームを制御サーバ100に送信するために用いられる。例えば、Packet−Inメッセージ80は、buffer_id、total_len、reason、in_portおよびdataのフィールドを含む。
buffer_idフィールドには、受信したフレームをスイッチでバッファリングする場合に、フレームを格納したバッファを識別するバッファIDが設定される。フレームのバッファリングを行わない場合には、例えば、バッファIDを“−1”とする。以下の説明では、各スイッチで当該バッファリングを行わない場合を想定する。
total_lenフィールドには、フレームのデータ長が設定される。reasonフィールドには、Packet−Inメッセージが送信された理由が設定されている。具体的には、“マッチするフローエントリが存在しない”、“そのフローのフレームを制御サーバ100へ送信するようにフローエントリに設定されている”などである。
in_portフィールドには、フレームを受信したポート(入力ポート)のポート番号が設定される。例えば、スイッチ200がネットワーク21からARPリクエスト70aを受信する場合を想定すると、ポートa1,a2,a3のうちネットワーク21側のポートはポートa1である。したがって、スイッチ200がARPリクエスト70aを制御サーバ100に送信するなら、Packet−Inメッセージのin_portフィールドには、ポート番号“a1”が設定されることになる。
dataフィールドには、受信したフレームのイメージが設定される。例えば、スイッチ200がARPリクエスト70aを制御サーバ100に送信するなら、Packet−Inメッセージのdataフィールドには、ARPリクエスト70aの全部または一部(制御サーバ100での処理に用いられる部分)が設定されることになる。
なお、Packet−Inメッセージなどの各種のメッセージは、パケットに包含されて送られる。よって、制御サーバ100は、例えばIPヘッダの送信元IPアドレス(スイッチのIPアドレス)などにより送信元のスイッチを識別できる。
次に、制御サーバ100の処理手順を説明する。ここで、第2の実施の形態では、L2ネットワークを想定している。すなわち、エンドホストは、ネットワーク20を跨いで他のエンドホストと通信するとき、当該他のエンドホストのIPアドレスも自身と同じネットワークアドレス(あるいは、サブネット)に属していると認識する。よって、エンドホストは、当該他のエンドホストのMACアドレスを解決するために、ARPリクエストを送信することになる。そこで、まず、制御サーバ100がPacket−InメッセージによりARPリクエストを取得した場合の処理手順を例示する。
図14は、第2の実施の形態のARP要求時の処理例を示すフローチャートである。以下、図14に示す処理をステップ番号に沿って説明する。なお、ステップS11が最初に実行される前には、エンドホストテーブル112、アドレス−エッジ対応テーブル113および各スイッチのフローテーブルには何れの情報も登録されていないものとする。
(S11)メッセージ通信部120は、何れかのエッジからPacket−Inメッセージを受信する。当該Packet−InメッセージはARPリクエストを含む。アドレス学習部130および転送制御部150は、メッセージ通信部120からPacket−Inメッセージ(ARPリクエスト)を取得する。
(S12)アドレス学習部130は、アドレス−エッジ対応テーブル113を参照して、取得したARPリクエストの送信元IPアドレスを含むIPアドレス空間の情報があるか否かを判定する。ない場合、処理をステップS13に進める。ある場合、処理をステップS14に進める。
(S13)アドレス学習部130は、取得したARPリクエストの送信元IPアドレスと送信元MACアドレスとPacket−Inメッセージから特定されるエッジ情報との対応関係の情報を生成し、エンドホストテーブル112に追加する。ポリシー処理部140は、ポリシー情報111とエンドホストテーブル112に追加された情報とに基づいて、アドレス−エッジ対応テーブル113に新たなエントリを追加する。例えば、ARPリクエスト70aを受信した場合、次のようなエントリを追加する。ポリシー情報111は、“/24で定義されるIPアドレス空間は、同一エッジの特定のポートに属する”ことを示している。このとき、ARPリクエスト70aの送信元IPアドレスは“192.168.30.55”である。よって、その上位24ビットが共通するIPアドレス空間を“192.168.30.0/24”と表せる(IPアドレスをIPアドレス空間に変換する)。また、前述のように、Packet−Inメッセージから、ARPリクエスト70aを受信したエッジ情報を“A−a1”(スイッチ200のポートa1に相当)と特定できる。よって、ポリシー処理部140は、エッジ情報“A−a1”とIPアドレス空間“192.168.30.0/24”との対応関係を示す情報を生成し、アドレス−エッジ対応テーブル113に追加する。そして、処理をステップS14に進める。
(S14)転送制御部150は、アドレス−エッジ対応テーブル113を参照して、取得したARPリクエストの宛先IPアドレスを含むIPアドレス空間の情報があるか否かを判定する。ある場合、処理をステップS15に進める。ない場合、処理をステップS16に進める。
(S15)転送制御部150は、ステップS14で検索されたIPアドレス空間に対応するエッジ情報を、アドレス−エッジ対応テーブル113から取得する。転送制御部150は、Packet−Inの送信元エッジ(始点エッジ)から、エッジ情報に対応するエッジ(終点エッジ)に至るまでに経由するスイッチを特定する。前述のように、転送制御部150は、記憶部110に格納されたネットワークトポロジの情報から、当該スイッチを特定できる。転送制御部150は、始点エッジから終点エッジまでARPリクエストを到達させるためのフローエントリを、特定した各スイッチに設定する。転送制御部150は、各スイッチへのフローエントリの設定にFlow−Modメッセージを用いる(以下、同様)。このとき、転送制御部150は、終点エッジに対し、エッジ情報により特定されるポートからARPリクエストを出力するよう設定する。そして、処理をステップS17に進める。
(S16)転送制御部150は、ARPリクエストをPacket−Inの送信元エッジ以外の全てのエッジまで到達させるためのフローエントリを各スイッチに設定する。このとき、転送制御部150は、対象の各エッジに対し、ネットワーク20の外側(ネットワーク21,22,23,24側)のネットワークに接続されたポートからARPリクエストを出力するよう設定する。そして、処理をステップS17に進める。
(S17)転送制御部150は、取得したARPリクエストを含むPacket−Outメッセージを、メッセージ通信部120を介して、Packet−Inの送信元エッジに送信する。Packet−Outメッセージを受信したエッジは、ステップS15またはステップS16で設定されたフローエントリに従って、Packet−Outメッセージに含まれるARPリクエストを転送する。その他のスイッチも、設定されたフローエントリに従って、ARPリクエストを転送する。
なお、制御サーバ100は、ステップS12,S13を、ステップS14〜S17の後、またはステップS14〜S17と並行して実行してもよい。
図15は、第2の実施の形態のPacket−Inの例(その1)を示す図である。図15では、クライアント50からARPリクエスト70aが送信された場合を想定する。また、エンドホストテーブル112、アドレス−エッジ対応テーブル113および各スイッチのフローテーブルには何れの情報も登録されていないものとする。
ARPリクエスト70aはネットワーク21内でもブロードキャストされ、サーバ30aおよびポートa1に到着する。サーバ30aは、ARPリクエスト70aを無視する。ARPリクエスト70aの宛先IPアドレスは、サーバ30aのIPアドレスではないからである。
スイッチ200は、ARPリクエスト70aに合致するフローエントリを保持していないので、ARPリクエスト70aを含むPacket−Inメッセージを制御サーバ100に送信する。
すると、制御サーバ100は、IPアドレス空間“192.168.30.0/24”がスイッチ200のポートa1の先に存在することを検出する。制御サーバ100は、エッジ情報“A−a1”とIPアドレス空間“192.168.30.0/24”との対応関係をアドレス−エッジ対応テーブル113に登録する。
更に、制御サーバ100は、アドレス−エッジ対応テーブル113を参照して、ARPリクエスト70aの宛先IPアドレス“192.168.40.2”を包含するIPアドレス空間の情報が未登録であることを検出する。このため、制御サーバ100は、ARPリクエスト70aをネットワーク22,23,24へ転送するためのフローエントリを各スイッチに設定する。例えば、ARPリクエスト70aを特定するためのマッチ条件を、“宛先MACアドレス:FFFFFFFFFFFF かつ 送信元IPアドレス:192.168.30.55”とする。
アクションは、スイッチ毎に異なる。スイッチ200にはポートa2から出力させる。スイッチ600にはポートe2,e3から出力させる。スイッチ500にはポートd1から出力させる。スイッチ700にはポートf1,f2から出力させる。スイッチ300にはポートb2から出力させる。スイッチ400にはポートc1から出力させる。
図11では、これらのフローエントリを各スイッチのフローテーブルに設定した結果を例示している。その後、制御サーバ100は、ARPリクエスト70aを含むPacket−Outメッセージをスイッチ200に送信する。
なお、スイッチ200側でARPリクエスト70aをバッファリングするなら、制御サーバ100は、Packet−OutメッセージにARPリクエスト70aを含めなくてもよい。その場合、制御サーバ100は、上記Packet−InメッセージにおいてスイッチからバッファIDの指定を受け付けておく。そして、制御サーバ100は、Packet−Outメッセージで当該バッファIDに格納されたARPリクエスト70aの転送を指示すればよい。
図16は、第2の実施の形態のARPリクエストの転送例を示す図である。図16では、図11で例示した各スイッチのフローテーブルに基づいて、ARPリクエスト70aが転送される様子を例示している。スイッチ200は、ARPリクエスト70aをポートa1から出力する。スイッチ600は、ARPリクエスト70aをポートe1で受信する。スイッチ600は、ARPリクエスト70aを複製して、ポートe2,e3から出力する。
スイッチ500は、ARPリクエスト70aをポートd2で受信する。スイッチ500は、ARPリクエスト70aをポートd1から出力する。スイッチ700は、ARPリクエスト70aをポートf3で受信する。スイッチ700は、ARPリクエスト70aを複製して、ポートf1,f2から出力する。
スイッチ300は、ARPリクエスト70aをポートb1で受信する。スイッチ300は、ARPリクエスト70aをポートb2から出力する。スイッチ400は、ARPリクエスト70aをポートc2で受信する。スイッチ400は、ARPリクエスト70aをポートc1から出力する。
このように、ARPリクエスト70aはネットワーク22,23,24に到達する。ネットワーク22,23,24は、ARPリクエスト70aをブロードキャストする。クライアント50,60およびサーバ40aは、ARPリクエスト70aを受信しても無視する。ARPリクエスト70aに含まれる宛先IPアドレスは、クライアント50,60およびサーバ40aのIPアドレスではないからである。サーバ40は、ARPリクエスト70aを受信すると、ARPリプライ70bを生成して応答する。ARPリクエスト70aに含まれる宛先IPアドレスは、サーバ40のIPアドレスだからである。
図17は、第2の実施の形態のARP応答時の処理例を示すフローチャートである。以下、図17に示す処理をステップ番号に沿って説明する。
(S21)メッセージ通信部120は、何れかのエッジからPacket−Inメッセージを受信する。当該Packet−InメッセージはARPリプライを含む。アドレス学習部130および転送制御部150は、メッセージ通信部120からPacket−Inメッセージ(ARPリプライ)を取得する。
(S22)アドレス学習部130は、アドレス−エッジ対応テーブル113を参照して、取得したARPリプライの送信元IPアドレスを含むIPアドレス空間の情報があるか否かを判定する。ない場合、処理をステップS23に進める。ある場合、処理をステップS24に進める。
(S23)アドレス学習部130は、取得したARPリプライの送信元IPアドレスと送信元MACアドレスとPacket−Inメッセージから特定されるエッジ情報との対応関係の情報を生成し、エンドホストテーブル112に追加する。ポリシー処理部140は、ポリシー情報111とエンドホストテーブル112に追加された情報とに基づいて、アドレス−エッジ対応テーブル113に新たなエントリを追加する。例えば、ARPリプライ70bを受信した場合、ステップS13と同様にして、エッジ情報“B−b2”とIPアドレス空間“192.168.40.0/24”との対応関係を示す情報を生成し、アドレス−エッジ対応テーブル113に追加する。そして、処理をステップS24に進める。
(S24)転送制御部150は、アドレス−エッジ対応テーブル113を参照して、ARPリプライの宛先IPアドレスが属するIPアドレス空間に対応するエッジ情報を取得する。ARPリプライは、ARPリクエストに応じて送信されるものだから、先に発生したARPリクエストにより、ARPリプライの宛先IPアドレスが属するIPアドレス空間がアドレス−エッジ対応テーブル113に登録されているはずである。ただし、当該IPアドレス空間が未登録のときは通信エラーとしてもよい。
(S25)転送制御部150は、Packet−Inの送信元エッジ(始点エッジ)からステップS24で取得されたエッジ情報に対応するエッジ(終点エッジ)に至るまでに経由するスイッチを特定する。特定方法は、ステップS15で例示した通りである。転送制御部150は、始点エッジから終点エッジまでARPリプライを到達させるためのフローエントリを、特定した各スイッチに設定する。このとき、転送制御部150は、終点エッジに対し、エッジ情報により特定されるポートからARPリプライを出力するよう設定する。
(S26)転送制御部150は、取得したARPリプライを含むPacket−Outメッセージを、メッセージ通信部120を介して、Packet−Inの送信元エッジに送信する。そのPacket−Outメッセージを受信したエッジは、ステップS25で設定されたフローエントリに従って、Packet−Outメッセージに含まれるARPリプライを転送する。その他のスイッチも、設定されたフローエントリに従って、ARPリプライを転送する。
なお、制御サーバ100は、ステップS22,S23を、ステップS24〜S26の後、またはステップS24〜S26と並行して実行してもよい。
図18は、第2の実施の形態のPacket−Inの例(その2)を示す図である。図18では、図16に引き続いて、サーバ40からARPリプライ70bが送信された場合を想定する。
ARPリプライ70bはユニキャストで送信される。ARPリプライ70bは、ネットワーク22を介してポートb2に到着する。スイッチ300は、ARPリプライ70bに合致するフローエントリを保持していないので、ARPリプライ70bを含むPacket−Inメッセージを制御サーバ100に送信する。
すると、制御サーバ100は、IPアドレス空間“192.168.40.0/24”がスイッチ300のポートb2の先に存在することを検出する。制御サーバ100は、エッジ情報“B−b2”とIPアドレス空間“192.168.40.0/24”との対応関係をアドレス−エッジ対応テーブル113に登録する。
更に、制御サーバ100は、アドレス−エッジ対応テーブル113を参照して、ARPリプライ70bの宛先IPアドレス“192.168.30.55”を包含するIPアドレス空間“192.168.30.0/24”の情報が登録済であることを検出する。制御サーバ100は、そのIPアドレス空間に対応するスイッチ200のポートa1(エッジ情報“A−a1”に相当)からARPリプライ70bを出力する(すなわち、ネットワーク21へ転送する)と決定する。
そして、制御サーバ100は、ARPリプライ70bをネットワーク21へ転送するためのフローエントリをスイッチ200,300,600,700に設定する。例えば、ARPリプライ70bを特定するためのマッチ条件を、“宛先IPアドレス:192.168.30.55”とする。アクションは、スイッチ毎に異なる。スイッチ300にはポートb1から出力させる。スイッチ700にはポートf3から出力させる。スイッチ600にはポートe1から出力させる。スイッチ200にはポートa1から出力させる。この時点での更新後のアドレス−エッジ対応テーブル113および各スイッチのフローテーブルは次のようになる。
図19は、第2の実施の形態のARP応答時のテーブル例を示す図である。アドレス−エッジ対応テーブル113aは、アドレス−エッジ対応テーブル113の更新後を例示している。アドレス−エッジ対応テーブル113aには、エッジ情報“B−b2”とIPアドレス空間“192.168.40.0/24”との対応関係を示す情報が追加されている。
図20は、第2の実施の形態のARP応答時のテーブル例(続き)を示す図である。フローテーブル211a,311a,611a,711aは、それぞれフローテーブル211,311,611,711の更新後を例示している。ただし、図20では、追加されたフローエントリのみを図示している(他のフローエントリの図示を省略している)。
追加されたフローエントリのマッチ条件は、何れも“宛先IPアドレス:192.168.30.55”で共通している。一方、アクションはフローテーブル毎に異なる。フローテーブル211aでは“ポートa1から出力”である。フローテーブル311aでは“ポートb1から出力”である。フローテーブル611aでは“ポートe1から出力”である。フローテーブル711aでは“ポートf3から出力”である。
その後、制御サーバ100は、ARPリプライ70bを含むPacket−Outメッセージをスイッチ300に送信する。
図21は、第2の実施の形態のARPリプライの転送例を示す図である。図21では、図20で例示した各スイッチのフローテーブルに基づいて、ARPリプライ70bが転送される様子を例示している。ARPリプライ70bは、スイッチ300からスイッチ700,600,200を順番に経由してネットワーク21に転送される。その後、ARPリプライ70bは、その宛先MACアドレス“MAC1”に基づいて、ネットワーク21によりクライアント30まで転送される。クライアント30は、ARPリプライ70bに含まれる送信元MACアドレス“MAC2”を、IPアドレス“192.168.40.2”に対応するMACアドレスと特定できる。
なお、その後、例えば、宛先IPアドレス“192.168.30.9”(サーバ30aのIPアドレス)に対するMACアドレスを問い合わせるARPリクエストがサーバ40から送信されることを考える。この場合、スイッチ300は、そのARPリクエストを受信し、Packet−Inメッセージを用いて当該ARPリクエストを制御サーバ100に送信する。
このとき、アドレス−エッジ対応テーブル113aには、エッジ情報“A−a1”とIPアドレス空間“192.168.30.0/24”との対応関係が登録されている。よって、制御サーバ100は、そのARPリクエストをスイッチ200のポートa1から出力させると決定する。この場合、制御サーバ100は、スイッチ300からスイッチ200まで転送するフローエントリをスイッチ300,700,600に設定し、ポートa1から出力させるフローエントリをスイッチ200に設定する(図14のステップS15の処理)。一方、制御サーバ100は、当該ARPリクエストをスイッチ400,500へは転送しない。このため、当該ARPリクエストは、ネットワーク21にはブロードキャストされるが、ネットワーク23,24にはブロードキャストされない。次に、ARP以外のフレームに対する制御サーバ100の処理手順を説明する。
図22は、第2の実施の形態のARP以外の処理例を示すフローチャートである。ここで想定するフレームは、ARP以外のフレームである(図23〜26も同様)。以下、図22に示す処理をステップ番号に沿って説明する。
(S31)メッセージ通信部120は、何れかのエッジからPacket−Inメッセージを受信する。当該Packet−Inメッセージは所定のフレーム(ただし、ARPリクエストやARPレスポンス以外)を含む。当該フレームとしては、IPパケットにユーザデータ(例えば、サーバの所定のアプリケーションに対するリクエストや、そのアプリケーションによる処理結果を含むレスポンスなど)を含むものが考えられる。アドレス学習部130および転送制御部150は、メッセージ通信部120からPacket−Inメッセージを取得する。
(S32)アドレス学習部130は、フレームに含まれるIPパケットのヘッダから送信元IPアドレスを取得する。アドレス学習部130は、アドレス−エッジ対応テーブル113を参照して、その送信元IPアドレスを含むIPアドレス空間の情報があるか否かを判定する。ない場合、処理をステップS33に進める。ある場合、処理をステップS34に進める。
(S33)アドレス学習部130は、取得したフレームの送信元IPアドレスと送信元MACアドレスとPacket−Inメッセージから特定されるエッジ情報との対応関係の情報を生成し、エンドホストテーブル112に追加する。ポリシー処理部140は、ポリシー情報111とエンドホストテーブル112に追加された情報とに基づいて、アドレス−エッジ対応テーブル113に新たなエントリを追加する。例えば、クライアント60が送信したフレームがスイッチ500に到着し、そのフレームを含むPacket−Inメッセージを受信した場合を想定する。この場合、ポリシー処理部140は、エッジ情報“D−d1”とIPアドレス空間“192.168.60.0/24”との対応関係を示す情報を生成し、アドレス−エッジ対応テーブル113に追加する。そして、処理をステップS34に進める。
(S34)転送制御部150は、フレームに含まれるIPパケットのヘッダから宛先IPアドレスを取得する。転送制御部150は、アドレス−エッジ対応テーブル113を参照して、その宛先IPアドレスを含むIPアドレス空間の情報があるか否かを判定する。ある場合、処理をステップS35に進める。ない場合、処理をステップS37に進める。
(S35)転送制御部150は、ステップS34で検索されたIPアドレス空間に対応するエッジ情報を、アドレス−エッジ対応テーブル113から取得する。転送制御部150は、Packet−Inの送信元エッジ(始点エッジ)から、エッジ情報に対応するエッジ(終点エッジ)に至るまでに経由するスイッチを特定する。特定方法は、ステップS15で例示した通りである。転送制御部150は、始点エッジから終点エッジまでフレームを到達させるためのフローエントリを、特定した各スイッチに設定する。このとき、転送制御部150は、終点エッジに対し、エッジ情報により特定されるポートからフレームを出力するよう設定する。
(S36)転送制御部150は、取得したフレームを含むPacket−Outメッセージを、メッセージ通信部120を介して、Packet−Inの送信元エッジに送信する。そして、処理を終了する。なお、Packet−Outメッセージを受信したエッジは、ステップS35で設定されたフローエントリに従って、Packet−Outメッセージに含まれるフレームを転送する。その他のスイッチも、設定されたフローエントリに従って、当該フレームを転送する。そして、処理を終了する。
(S37)転送制御部150は、通信失敗と判断する。該当のフレームを何れのエッジまで転送すればよいかが不明だからである。例えば、転送制御部150は、記憶部110に格納された所定のログに、通信失敗の詳細情報を記録してもよい。そして、処理を終了する。
なお、制御サーバ100は、ステップS32,S33を、ステップS34〜S37の後、またはステップS34〜S37と並行して実行してもよい。
図23は、第2の実施の形態のPacket−Inの例(その3)を示す図である。図23では、図21に引き続いて、クライアント60からARP以外の所定のフレームが送信された場合を想定する。このフレームの送信元MACアドレスはクライアント60のMACアドレスである。送信元IPアドレスは“192.168.60.2”である。宛先MACアドレスはサーバ40aのMACアドレスである。宛先IPアドレスは“192.168.40.10”である。
フレームは、ネットワーク24を介してポートd1に到着する。スイッチ500は、このフレームに合致するフローエントリを保持していないので、当該フレームを含むPacket−Inメッセージを制御サーバ100に送信する。
すると、制御サーバ100は、IPアドレス空間“192.168.60.0/24”がスイッチ500のポートd1の先に存在することを検出する。制御サーバ100は、エッジ情報“D−d1”とIPアドレス空間“192.168.60.0/24”との対応関係を、アドレス−エッジ対応テーブル113aに登録する。
更に、制御サーバ100は、アドレス−エッジ対応テーブル113aを参照して、フレームの宛先IPアドレス“192.168.40.10”を包含するIPアドレス空間“192.168.40.0/24”の情報が登録済であることを検出する。制御サーバ100は、そのIPアドレス空間に対応するスイッチ300のポートb2(エッジ情報“B−b2”に相当)からフレームを出力する(すなわち、ネットワーク22へ転送する)と決定する。
そして、制御サーバ100は、フレームをネットワーク22へ転送するためのフローエントリをスイッチ300,500,600,700に設定する。例えば、当該フレームを特定するためのマッチ条件を、“宛先IPアドレス:192.168.40.10”とする。アクションは、スイッチ毎に異なる。スイッチ500にはポートd2から出力させる。スイッチ600にはポートe3から出力させる。スイッチ700にはポートf2から出力させる。スイッチ300にはポートb2から出力させる。この時点での更新後のアドレス−エッジ対応テーブル113aおよび各スイッチのフローテーブルは次のようになる。
図24は、第2の実施の形態の更新後のテーブル例を示す図である。アドレス−エッジ対応テーブル113bは、アドレス−エッジ対応テーブル113aの更新後を例示している。アドレス−エッジ対応テーブル113bには、エッジ情報“D−d1”とIPアドレス空間“192.168.60.0/24”との対応関係を示す情報が追加されている。
図25は、第2の実施の形態の更新後のテーブル例(続き)を示す図である。フローテーブル311b,511b,611b,711bは、それぞれフローテーブル311a,511,611a,711aの更新後を例示している。ただし、図25では、追加されたフローエントリのみを図示している(他のフローエントリの図示を省略している)。
追加されたフローエントリのマッチ条件は、何れも“宛先IPアドレス:192.168.40.10”で共通している。一方、アクションはフローテーブル毎に異なる。フローテーブル311bでは“ポートb2から出力”である。フローテーブル511bでは“ポートd2から出力”である。フローテーブル611bでは“ポートe3から出力”である。フローテーブル711bでは“ポートf2から出力”である。
その後、制御サーバ100は、転送対象のフレームを含むPacket−Outメッセージをスイッチ500に送信する。
図26は、第2の実施の形態のフレームの転送例を示す図である。図26では、図25で例示した各スイッチのフローテーブルに基づいて、フレームが転送される様子を例示している。当該フレームは、スイッチ500からスイッチ600,700,300を順番に経由してネットワーク22に転送される。その後、当該フレームは、その宛先MACアドレスに基づいて、ネットワーク22によりサーバ40aまで転送される。このようにして、クライアント60によって送信されたデータがサーバ40aまで転送される。
以上のようにして、制御サーバ100は、アドレスの学習を効率化できる。具体的には次の通りである。例えば、制御サーバ100は、エンドホストのIPアドレス毎に、各スイッチのポートとの対応関係を学習することも考えられる。しかし、この場合、IPアドレス毎に学習を行っていると、エンドホストの数が増大するほど、制御サーバ100によるアドレスの学習量が増大する。すなわち、制御サーバ100による学習の頻度や学習する情報量が増大してしまう。
制御サーバ100による学習の頻度が高まると、学習のための制御サーバ100の負荷が増大し得る。また、学習した情報量の巨大化により、RAM102などの記憶領域を圧迫し得る。また、IPアドレスやMACアドレス毎に学習を行って、エンドホストテーブル112のエントリ数が増大すると、その中から何れかのエントリを検索するための処理コストが増大し得る。
更に、例えば、未知のIPアドレスが発生するたびに(例えば、エンドホストから未知のIPアドレスに対するARPリクエストを受け付けるたびに)、ネットワーク20の外部の複数のネットワークにARPリクエストを転送することも考えられる。ARPリプライにより、IPアドレスとスイッチのポートとの対応を学習し得るからである。
しかし、この場合、各スイッチに設定されるルールが巨大化するおそれがある。複数のネットワーク(ネットワーク21,22,23,24など)までARPリクエストを転送するためのフローエントリが、問合せ対象のIPアドレス毎に、スイッチ200,300,400,500,600,700に設定されることになるからである。各スイッチのフローテーブルが巨大化すると、各スイッチのRAMなどの記憶領域を圧迫し得る。また、各スイッチにおいて、転送対象のフレームをフローエントリと照合するための処理コストが増大し得る。
そこで、制御サーバ100は、ポリシー情報111で特定されるIPアドレス空間を単位として、各IPアドレス空間に属するIPアドレスをもつエンドホストが、どのスイッチの、どのポートの先に存在するかを学習する。そして、制御サーバ100は、エッジ情報とIPアドレス空間との対応関係をアドレス−エッジ対応テーブル113に登録する。
その後、何れかのIPアドレス空間に属するIPアドレスを宛先としたフレームを受信した場合に、アドレス−エッジ対応テーブル113に基づいて、当該フレームを出力するエッジおよびポートを決定する。すなわち、制御サーバ100は、あるIPアドレスとエッジ情報との対応関係を検出できれば、そのIPアドレスが属するIPアドレス空間と当該エッジ情報との対応関係を学習する。したがって、当該IPアドレス空間に属する他のIPアドレスに関するエッジ情報を学習しなくてよい。よって、制御サーバ100によるアドレスの学習量を低減できる。学習量の低減は、学習のための負荷低減、記憶領域の節約、学習した情報内を検索する処理コストの低減に寄与する。
また、ARPリクエストを転送するときも、制御サーバ100は、その宛先IPアドレスの属するIPアドレス空間がアドレス−エッジ対応テーブル113に登録されていれば、そのIPアドレス空間に対応するエッジ情報を取得できる。この場合、当該エッジ情報により特定されるエッジまでARPリクエストを転送させればよく、他のエッジまでARPリクエストを転送させなくてよい。このため、ARPリクエストを転送させるための余計なフローエントリを、ARP転送に用いないスイッチに設定せずに済む。よって、各スイッチに設定されるフローエントリの数を低減できる。また、各スイッチに余計な転送処理を行わせずに済むので、スイッチの負荷を低減できる。更に、ユーザ側のネットワーク21,22,23,24も余計なブロードキャストを行わずに済むので、ネットワーク21,22,23,24の負荷も低減できる。
更に、ユーザは、学習させたいIPアドレス空間の情報をポリシー情報111として記憶部110に予め登録しておけばよい。例えば、ネットワーク21,22,23,24では、近接するアドレスをもつ複数のエンドホストが1つのネットワークに接続されるという運用上のポリシーが存在している。すると、ユーザはそのポリシーを把握してさえいれば、アドレスの集合を登録することができる。第2の実施の形態の例では、ユーザは“/24で定義されるIPアドレス空間は、同一エッジの特定のポートに属する”ことを把握していればよい。したがって、利用され得る全ての宛先IPアドレスについての転送ルールを制御サーバ100に設定することを、ユーザに強いずに済む。よって、ユーザによる作業の省力化を図れる。
以上のように、制御サーバ100では、IPアドレス空間割り当てポリシーを予め設定し、従来の方式で得られる学習情報(エンドホストテーブル112)にポリシーを考慮した変換を実施したアドレス−エッジ対応テーブル113を参照して、各スイッチに対するルール設定を行うことで、アドレスの学習を効率化できる。
なお、ポリシー処理部140は、エンドホストテーブル112を参照して、アドレス−エッジ対応テーブル113のエントリを生成するものとしたが、Packet−Inメッセージから当該エントリを直接生成してもよい。その場合、ポリシー処理部140は、Packet−Inメッセージからエッジ情報を取得できるし、Packet−Inメッセージに含まれるフレームのIPヘッダから送信元IPアドレスを取得できる。したがって、ポリシー処理部140は、ポリシー情報111に基づいて、エッジ情報とその送信元IPアドレスが属するIPアドレス空間との対応関係をアドレス−エッジ対応テーブル113に登録し得る。
また、上記の説明では、各スイッチのフローテーブルに設定するマッチ条件を宛先IPアドレス単位に設定するものとしたが(例えば、図20,25)、以下のようにIPアドレス空間単位に設定してもよい。
図27は、第2の実施の形態のフローテーブルの他の例を示す図である。制御サーバ100は、フローテーブル311b,511b,611b,711bで示したフローエントリの代わりに、フローテーブル311c,511c,611c,711cで示すフローエントリをスイッチ300,500,600,700に設定してもよい。具体的には、マッチ条件を、“宛先IPアドレス:192.168.40.10”とする代わりに、“宛先IPアドレス:192.168.40.0/24”のようにIPアドレス空間で設定してもよい。
この場合、スイッチ500,600,700は、フレームの宛先IPアドレスがIPアドレス空間“192.168.40.0/24”に属するか否かを判定し、属する場合に、そのフレームをスイッチ300へ向けて転送する。同様に、スイッチ300は、フレームの宛先IPアドレスがIPアドレス空間“192.168.40.0/24”に属するか否かを判定し、属する場合に、そのフレームをポートb2から出力する。スイッチ300,500,600,700は、例えば、宛先IPアドレスが当該IPアドレス空間に属しておらず、他に合致するフローエントリもなければ、制御サーバ100に処理方法を問合せる。
すると、IPアドレス空間“192.168.40.0/24”に属する他のIPアドレスを宛先とするフレームに対しても、当該フローエントリを利用できる。したがって、各スイッチに登録されるフローエントリの数を一層低減できる。また、宛先IPアドレス単位にフローエントリを設定する場合に比べて、制御サーバ100と各スイッチとのPacket−In/OutメッセージやFlow−Modメッセージなどのメッセージの送受信量も低減できる。よって、制御サーバ100や各スイッチの負荷を低減できる。また、ネットワーク10,20の負荷も低減できる。
[第3の実施の形態]
以下、第3の実施の形態を説明する。前述の第2の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
第2の実施の形態では、学習済のIPアドレス空間に属するIPアドレスを宛先とするARPリクエストを転送する際に、Packet−Inの送信元エッジに、Packet−Outメッセージを送信するものとした(図14のステップS15,S17)。
一方、ネットワーク20内におけるARPリクエストの転送には他の方法も考えられる。例えば、アドレス−エッジ対応テーブル113には、IPアドレス空間に対応するエッジ情報が登録されている。そこで、制御サーバ100は、そのエッジ情報で特定されるエッジに、当該ARPリクエストを含むPacket−Outメッセージを送信してもよい。第3の実施の形態では、その機能を提供する。
ここで、第3の実施の形態の情報処理システムは、図2,3で説明した第2の実施の形態の情報処理システムと同様である。また、第3の実施の形態の制御サーバやスイッチのハードウェアおよび機能例も、図4〜7で説明した第2の実施の形態の制御サーバ100やスイッチ200のハードウェアおよび機能例と同様である。そこで、第3の実施の形態では、第2の実施の形態と同一の名称・符号を用いる。第3の実施の形態では、ARPリクエストに対し、図14,17で例示した第2の実施の形態の手順に代えて、以下の手順を実行する点が異なる。
図28は、第3の実施の形態のAPR要求時の処理例を示すフローチャートである。以下、図28に示す処理をステップ番号に沿って説明する。ここで、図28の手順では、ステップS15に代えて、ステップS15aを実行する点が図14と異なる(その他のステップは図14と同様である)。そこで、以下の説明では、ステップS15aを説明し、他のステップの説明を省略する。ステップS15aは、ステップS14において、アドレス−エッジ対応テーブルに、宛先IPアドレスを含むIPアドレス空間の情報があると判定された場合に実行される。
(S15a)転送制御部150は、ステップS14で検索されたIPアドレス空間に対応するエッジ情報を、アドレス−エッジ対応テーブルから取得する。転送制御部150は、エッジ情報で特定されるエッジに、受信したARPリクエストを含むPacket−Outメッセージを送信する。このとき、転送制御部150は、エッジ情報で特定されるポートから当該ARPリクエストを出力するフローエントリを当該エッジに事前に設定しておく。そして、処理を終了する。
図29は、第3の実施の形態のARPリクエストの転送例を示す図である。図29では、制御サーバ100が、図19で例示したアドレス−エッジ対応テーブル113aを保持しており、かつ、宛先IPアドレスを“192.168.30.9”とするARPリクエストがサーバ40から送信された場合を想定する。各スイッチのフローテーブルには、当該ARPリクエストに合致するフローエントリは登録されていないものとする。
サーバ40から送信されたARPリクエストは、ネットワーク22内でブロードキャストされ、サーバ40aおよびポートb2に到着する。サーバ40aは、そのARPリクエストを無視する。宛先IPアドレス“192.168.30.9”はサーバ40aのIPアドレスではないからである。
スイッチ300は、そのARPリクエストに合致するフローエントリを保持していないので、当該ARPリクエストを含むPacket−Inメッセージを制御サーバ100に送信する。
制御サーバ100は、そのPacket−Inメッセージを受信する。アドレス−エッジ対応テーブル113aにはエッジ情報“B−b2”とIPアドレス空間“192.168.40.0/24”とが登録済である(学習済)。したがって、制御サーバ100は、当該IPアドレス空間の学習を行わない。
制御サーバ100は、アドレス−エッジ対応テーブル113aを参照して、ARPリクエストの宛先IPアドレス“192.168.30.9”を包含するIPアドレス空間“192.168.30.0/24”の情報が登録済であることを検出する。制御サーバ100は、そのIPアドレス空間に対応するスイッチ200のポートa1(エッジ情報“A−a1”に相当)からARPリクエストを出力する(すなわち、ネットワーク21へ転送する)と決定する。
そして、制御サーバ100は、当該ARPリクエストをポートa1から出力させるフローエントリをスイッチ200に設定する。制御サーバ100は、当該ARPリクエストを含むPacket−Outメッセージをスイッチ200に送信する。
スイッチ200は、Packet−Outメッセージを制御サーバ100から受信すると、Packet−Outメッセージに含まれるARPリクエストを抽出し、フローエントリに従ってポートa1から出力する。ARPリクエストは、ネットワーク21に到達すると、ネットワーク21においてブロードキャストされる。クライアント30は、そのARPリクエストを受信しても無視する。当該ARPリクエストに含まれる宛先IPアドレスは、クライアント30のIPアドレスではないからである。サーバ30aは、ARPリクエストを受信すると、ARPリプライを生成して応答する。当該ARPリクエストに含まれる宛先IPアドレスは、サーバ30aのIPアドレスだからである。
図30は、第3の実施の形態のARP応答時の処理例を示すフローチャートである。以下、図30に示す処理をステップ番号に沿って説明する。ここで、図30の手順では、ステップS25,S26に代えて、ステップS25aを実行する点が図17と異なる(その他のステップは図17と同様である)。そこで、以下の説明では、ステップS25aを説明し、他のステップの説明を省略する。ステップS25aは、ステップS24の次に実行される。
(S25a)ステップS24で取得されたエッジ情報で特定されるエッジに、受信したARPリプライを含むPacket−Outメッセージを送信する。このとき、転送制御部150は、エッジ情報で特定されるポートから当該ARPリプライを出力するフローエントリを当該エッジに事前に設定しておく。そして、処理を終了する。
図31は、第3の実施の形態のARPリプライの転送例を示す図である。図31では、図29に引き続いて、サーバ30aからARPリプライが送信された場合を想定する。ARPリプライは、ネットワーク21を介してポートa1に到着する。スイッチ200は、当該ARPリプライに合致するフローエントリを保持していないので、当該ARPリプライを含むPacket−Inメッセージを制御サーバ100に送信する。
制御サーバ100は、そのPacket−Inメッセージを受信する。アドレス−エッジ対応テーブル113aにはエッジ情報“A−a1”とIPアドレス空間“192.169.30.0/24”が登録済である(学習済)。したがって、制御サーバ100は、当該IPアドレス空間の学習を行わない。
制御サーバ100は、アドレス−エッジ対応テーブル113aを参照して、ARPリプライの宛先IPアドレス“192.168.40.2”を包含するIPアドレス空間“192.168.40.0/24”の情報が登録済であることを検出する。制御サーバ100は、そのIPアドレス空間に対応するスイッチ300のポートb2(エッジ情報“B−b2”に相当)からARPリプライを出力する(すなわち、ネットワーク22へ転送する)と決定する。
そして、制御サーバ100は、当該ARPリクエストをポートb2から出力させるフローエントリをスイッチ300に設定する。制御サーバ100は、当該ARPリプライを含むPacket−Outメッセージをスイッチ300に送信する。
スイッチ300は、Packet−Outメッセージを制御サーバ100から受信すると、Packet−Outメッセージに含まれるARPリプライを抽出し、フローエントリに従ってポートb2から出力する。ARPリプライは、ネットワーク22を介してサーバ40まで転送される。サーバ40は、当該ARPリプライに含まれる送信元MACアドレスを、IPアドレス“192.168.30.9”に対応するMACアドレスと特定できる。なお、図29および図31の直後のスイッチ200,300のフローテーブルは、次のようになる。
図32は、第3の実施の形態のフローテーブルの例を示す図である。フローテーブル211dは、図29のARPリクエスト転送時のスイッチ200のフローテーブルである。ただし、当該ARPリクエストの転送に用いられるフローエントリのみを図示している(他のフローエントリの図示を省略している)。例えば、フローテーブル211dには、マッチ条件“宛先IPアドレス:192.168.30.9”およびアクション“ポートa1から出力”が設定されている。
フローテーブル311dは、図31のARPリプライ転送時のスイッチ300のフローテーブルである。ただし、当該ARPリプライの転送に用いられるフローエントリのみを図示している(他のフローエントリの図示を省略している)。例えば、フローテーブル311dには、マッチ条件“宛先IPアドレス:192.168.40.2”およびアクション“ポートb2から出力”が設定されている。
このように、第3の実施の形態では、制御サーバ100は、アドレス−エッジ対応テーブルで特定されるエッジに、ARPリクエストおよびARPリプライを直接送信する。このため、スイッチ600,700に対してARPリクエストやARPリプライを転送するためのフローエントリを設定しなくてもよい。また、スイッチ600,700はARP転送を行わずに済むので、スイッチ600,700の負荷を低減できる。
なお、制御サーバ100は、ARPリクエストまたはARPリプライに対するアクションをPacket−Outメッセージに含めることもできる。例えば、図28のステップS15aおよび図30のステップS25aにおいて、転送制御部150は、Packet−Outメッセージに出力ポートを指定したアクションを含めてもよい。その場合、転送制御部150は、Flow−Modメッセージを用いてフローエントリをスイッチ200,300に別途設定しなくてもよい。
また、上記の説明では、各スイッチは、ARPリクエスト/リプライの転送用のフローエントリを保持していない場合に、Packet−Inメッセージを制御サーバ100に送るものとした。一方、制御サーバ100は、MACヘッダのイーサネットタイプが“0x0806(ARP)”であるフレームを制御サーバ100に送信するフローエントリを各エッジに予め設定しておいてもよい。
[第4の実施の形態]
以下、第4の実施の形態を説明する。前述の第2,第3の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
ネットワーク20内におけるARPリクエストの転送には更に他の方法も考えられる。具体的には、問合せ元のエンドホストから受け付けたARPリクエストに対し、制御サーバ100により任意のMACアドレスを応答してもよい。ネットワーク20内で当該MACアドレスに応じたルーティングを行えるからである。そこで、第4の実施の形態ではその機能を提供する。
ここで、第4の実施の形態の情報処理システムは、図2,3で説明した第2の実施の形態の情報処理システムと同様である。また、第4の実施の形態の制御サーバやスイッチのハードウェアおよび機能例も、図4〜7で説明した第2の実施の形態の制御サーバ100やスイッチ200のハードウェアおよび機能例と同様である。そこで、第4の実施の形態では、第2の実施の形態と同一の名称・符号を用いる。第4の実施の形態では、ARPリクエストに対し、図14,17で例示した第2の実施の形態の手順に代えて、以下の手順を実行する点が異なる。
図33は、第4の実施の形態のARP要求時の処理例を示すフローチャートである。以下、図33に示す処理をステップ番号に沿って説明する。ここで、図33の手順では、ステップS15に代えて、ステップS15b,S15cを実行する点が図14と異なる(その他のステップは図14と同様である)。そこで、以下の説明では、ステップS15b,15cを説明し、他のステップの説明を省略する。ステップS15bは、ステップS14において、アドレス−エッジ対応テーブルに、ARPリクエストの宛先IPアドレスを含むIPアドレス空間の情報があると判定された場合に実行される。
(S15b)転送制御部150は、所定のMACアドレスを用いて、ARPリプライを生成する。転送制御部150は、生成したARPリプライを含むPacket−OutメッセージをPacket−Inの送信元エッジへ送信する。このとき、転送制御部150は、ARPリクエストを受信したポートから当該ARPリプライを出力するフローエントリを、Packet−Inの送信元エッジに事前に設定しておく。なお、ARPリプライで何れのMACアドレスを応答するかは、ユーザにより任意に決定できる。例えば、Packet−Inの送信元エッジのMACアドレスでもよいし、その他のMACアドレスでもよい。
(S15c)転送制御部150は、ステップS14で検索されたIPアドレス空間に対応するエッジ情報を、アドレス−エッジ対応テーブルから取得する。転送制御部150は、エッジ情報で特定されるエッジに、受信したARPリクエストを含むPacket−Outメッセージを送信する。このとき、転送制御部150は、エッジ情報で特定されるポートから当該ARPリクエストを出力するフローエントリを当該エッジに事前に設定しておく。また、転送制御部150は、ARPリクエストに対するARPリプライが当該エッジにより受信された場合にそのARPリプライを制御サーバ100に送信するフローエントリ(ARPリプライをエッジから取得するためのフローエントリ)を当該エッジに設定する。そして、処理を終了する。
図34は、第4の実施の形態のARPリクエストの転送例を示す図である。図34では、制御サーバ100が、図19で例示したアドレス−エッジ対応テーブル113aを保持している状態で、宛先IPアドレスを“192.168.30.9”とするARPリクエストがサーバ40から送信された場合を想定する。各スイッチのフローテーブルには、当該ARPリクエストに合致するフローエントリは登録されていないものとする。
サーバ40から送信されたARPリクエストは、ネットワーク22内でブロードキャストされ、サーバ40aおよびポートb2に到着する。ただし、図34では、サーバ40aに到着するARPリクエストを示す矢印の図示を省略している。サーバ40aは、そのARPリクエストを無視する。宛先IPアドレス“192.168.30.9”はサーバ40aのIPアドレスではないからである。
スイッチ300は、そのARPリクエストに合致するフローエントリを保持していないので、当該ARPリクエストを含むPacket−Inメッセージを制御サーバ100に送信する。
制御サーバ100は、そのPacket−Inメッセージを受信する。アドレス−エッジ対応テーブル113aにはエッジ情報“B−b2”とIPアドレス空間“192.168.40.0/24”とが登録済である(学習済)。したがって、制御サーバ100は、当該IPアドレス空間の学習を行わない。
制御サーバ100は、アドレス−エッジ対応テーブル113aを参照して、ARPリクエストの宛先IPアドレス“192.168.30.9”を包含するIPアドレス空間“192.168.30.0/24”の情報が登録済であることを検出する。
すると、制御サーバ100は、スイッチ300のMACアドレスを応答するARPリプライを生成する。制御サーバ100は、そのARPリプライをポートb2から出力させるフローエントリをスイッチ300に設定する。制御サーバ100は、当該ARPリプライを含むPacket−Outメッセージをスイッチ300に送信する。
スイッチ300は、Packet−Outメッセージを制御サーバ100から受信すると、Packet−Outメッセージに含まれるARPリプライを抽出し、フローエントリに従ってポートb2から出力する。ARPリプライは、ネットワーク22を介してサーバ40まで転送される。サーバ40は、当該ARPリプライに含まれる送信元MACアドレス(ここでは、スイッチ300のMACアドレス)を、IPアドレス“192.168.30.9”に対応するMACアドレスと特定する。
更に、制御サーバ100は、IPアドレス空間“192.168.30.0/24”に対応するスイッチ200のポートa1(エッジ情報“A−a1”に相当)からARPリクエストを出力する(すなわち、ネットワーク21へ転送する)と決定する。
そして、制御サーバ100は、当該ARPリクエストをポートa1から出力させるフローエントリをスイッチ200に設定する。また、制御サーバ100は、ARPリクエストに対するARPリプライをスイッチ200が受信した場合に、ARPリプライを制御サーバ100に送信するフローエントリをスイッチ200に設定する。制御サーバ100は、そのARPリクエストを含むPacket−Outメッセージをスイッチ200に送信する。
スイッチ200は、Packet−Outメッセージを制御サーバ100から受信すると、Packet−Outメッセージに含まれるARPリクエストを抽出し、フローエントリに従ってポートa1から出力する。ARPリクエストは、ネットワーク21に到達すると、ネットワーク21においてブロードキャストされる。クライアント30は、そのARPリクエストを受信しても無視する。当該ARPリクエストに含まれる宛先IPアドレスは、クライアント30のIPアドレスではないからである。サーバ30aは、ARPリクエストを受信すると、ARPリプライを生成して応答する。当該ARPリクエストに含まれる宛先IPアドレスは、サーバ30aのIPアドレスだからである。
なお、図34におけるARPリクエストおよびARPリプライの転送に用いられるフローエントリは、図32で例示したものと同様である。ただし、スイッチ200には、例えば、“イーサネットタイプ:0x0806(ARP)、送信元IPアドレス:192.168.30.9(サーバ30aのIPアドレス)のフレームを制御サーバ100に送る”というフローエントリが設定されてもよい。これは、サーバ30aからのARPリプライを制御サーバ100に提供するためのフローエントリである。
また、図32で説明したように、制御サーバ100は、Packet−Outメッセージにより、ARPリクエストやARPリプライの出力ポートを、スイッチ200,300へ指示してもよい。
図35は、第4の実施の形態のARP応答時の処理例を示すフローチャートである。以下、図35に示す処理をステップ番号に沿って説明する。ここで、図35の手順では、ステップS24〜S26に代えて、ステップS24aを実行する点が図17と異なる(その他のステップは図17と同様である)。そこで、以下の説明では、ステップS24aを説明し、他のステップの説明を省略する。ステップS24aは、ステップS22でアドレス−エッジ対応テーブルに、ARPリプライの送信元IPアドレスを含むIPアドレス空間の情報があると判定された場合、または、ステップS23の次に実行される。
(S24a)転送制御部150は、Packet−Inの送信元エッジに、MACアドレス変換用のフローエントリを設定する。具体的には、転送制御部150は、受信したARPリプライから送信元MACアドレスおよび送信元IPアドレスを抽出する。そして、転送制御部150は、ARPリプライから抽出したIPアドレスを宛先IPアドレスとするフレームに対し、そのフレームの宛先MACアドレスを、ARPリプライから抽出したMACアドレスに変換するフローエントリを当該エッジに設定する。そして、処理を終了する。
図36は、第4の実施の形態のARPリプライの転送例を示す図である。図36では、図34に引き続いて、サーバ30aからARPリプライが送信された場合を想定する。ARPリプライは、ネットワーク21を介してポートa1に到着する。スイッチ200は、フローエントリに従って、当該ARPリプライを含むPacket−Inメッセージを制御サーバ100に送信する。
制御サーバ100は、そのPacket−Inメッセージを受信する。アドレス−エッジ対応テーブル113aにはエッジ情報“A−a1”とIPアドレス空間“192.169.30.0/24”が登録済である(学習済)。したがって、制御サーバ100は、当該IPアドレス空間の学習を行わない。
制御サーバ100は、取得したARPリプライから送信元MACアドレス(サーバ30aのMACアドレス)および送信元IPアドレス(この場合“192.168.30.9”)を抽出する。そして、制御サーバ100は、MACアドレス変換用のフローエントリをスイッチ200に設定する。この例では、制御サーバ100は、図34で例示したように、スイッチ300のMACアドレスをサーバ40に応答している。したがって、サーバ40は、宛先IPアドレス“192.168.30.9”を指定して通信するとき、フレームのMACヘッダにスイッチ300のMACアドレスを宛先MACアドレスとして設定することになる。
このため、制御サーバ100は、宛先IPアドレス“192.168.30.9”を含むフレームの宛先MACアドレスを、サーバ30aのMACアドレスに変換するフローエントリをスイッチ200に設定する(既存のフローエントリの変更でもよい)。すると、スイッチ200により保持されるフローテーブルは次のようになる。
図37は、第4の実施の形態のフローテーブルの例を示す図である。フローテーブル211eは、MACアドレス変換用のフローエントリが追加されたときのスイッチ200のフローテーブルである。ただし、追加された(または、変更された)フローエントリのみを図示している(他のフローエントリの図示を省略している)。例えば、フローテーブル211eには、マッチ条件“宛先IPアドレス:192.168.30.9”およびアクション“MACアドレスをMAC3に書き換えた後、ポートa1から出力”が設定されている。ここで、“MAC3”は、サーバ30aのMACアドレスである。
このように、制御サーバ100は、サーバ30aのMACアドレスとは異なるMACアドレスをサーバ40に提供してもよい。例えば、情報処理システムが更に多数のスイッチを含み、スイッチ300からスイッチ200までの通信経路に複数の候補が存在することも想定される。そのような場合に、サーバ40に提供した所定のMACアドレスを利用して、スイッチ300からスイッチ200までのルーティングを自在に制御できる点で有用である。
このとき、制御サーバ100は、サーバ30aのIPアドレスを宛先とするフレームについて、宛先MACアドレスをサーバ30aのMACアドレスに変換するフローエントリをスイッチ200に設定する。これにより、サーバ30aのMACアドレスとは異なるMACアドレスをサーバ40に提供したとしても、サーバ40からサーバ30aのIPアドレス宛に送信されたフレームをサーバ30aまで到達させることができる。なお、制御サーバ100は、ARPリプライに基づいて、エンドホストのIPアドレスとMACアドレスとの対応関係を次のように記録しておいてもよい。
図38は、第4の実施の形態のMACアドレス対応テーブルの例を示す図である。MACアドレス対応テーブル114は、記憶部110に格納される。MACアドレス対応テーブル114は、MACアドレスおよびIPアドレスの項目を含む。MACアドレスの項目には、MACアドレスが登録される。IPアドレスの項目には、IPアドレスが登録される。例えば、MACアドレス対応テーブル114には、MACアドレスが“MAC3”、IPアドレスが“192.168.30.9”という情報が登録されている。これは、図36で例示したPacket−Inメッセージ(ARPリプライ)に基づいて、制御サーバ100が記録した情報である。
例えば、制御サーバ100は、図33のステップS15bにおいて、ARPリクエストの宛先IPアドレスに対して応答するMACアドレスを、MACアドレス対応テーブル114に基づいて決定してもよい。すなわち、制御サーバ100は、当該ARPリクエストの宛先IPアドレスと同じIPアドレスがMACアドレス対応テーブル114に登録されていれば、そのIPアドレスに対応するMACアドレスを応答してもよい。この場合、図33のステップS15cおよび図35の処理を省略することができる。
なお、第3の実施の形態でも説明したように、制御サーバ100は、MACヘッダのイーサネットタイプが“0x0806(ARP)”であるフレームを制御サーバ100に送信するフローエントリを、各スイッチに予め設定しておいてもよい。その場合、図33のステップS15cにおいて、制御サーバ100は、ARPリプライをエッジから取得するためのフローエントリを該当のエッジに別途設定しなくてもよい。また、第3,第4の実施の形態の方法を用いてARPリクエストを転送する一方、ARP以外のフレームについては図22で示した手順を用いて適切に宛先へ転送できる。
[第5の実施の形態]
以下、第5の実施の形態を説明する。前述の第2〜第4の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
第2〜第4の実施の形態では、制御サーバ100が複数のスイッチを制御する場合を例示した。一方、制御サーバ100が制御するスイッチは1台でもよい。
図39は、第5の実施の形態の情報処理システムを示す図である。第5の実施の形態の情報処理システムは、スイッチ200,300,400,500,600,700に代えて、スイッチ800を有する点が図2,3で説明した第2の実施の形態の情報処理システムと異なる。その他は第2の実施の形態と同様である。スイッチ800のハードウェアおよび機能例は、図5,7で説明したスイッチ200のハードウェアおよび機能例と同様である。
スイッチ800は、ポートg1,g2,g3,g4,g5を有する。ポートg1は、ネットワーク21に接続されている。ポートg2は、ネットワーク24に接続されている。ポートg3は、ネットワーク23に接続されている。ポートg4は、ネットワーク22に接続されている。ポートg5は、制御サーバ100に接続されている。なお、スイッチ800の識別情報は“G”である。
制御サーバ100は、第2の実施の形態と同様にスイッチ800を制御できる。例えば、制御サーバ100は、クライアント30のIPアドレス“192.168.30.55”を送信元とするフレームをスイッチ800から取得したとする。すると、制御サーバ100は、ポリシー情報111に基づいて、エッジ情報“G−g1”とIPアドレス空間“192.168.30.0/24”との対応関係の情報を生成する。そして、制御サーバ100は、生成した情報をアドレス−エッジ対応テーブル113に登録する。
その後、例えば、制御サーバ100は、サーバ30aのIPアドレス“192.168.30.9”を宛先とするフレームをスイッチ800から取得したとする。すると、制御サーバ100は、アドレス−エッジ対応テーブル113に基づいて、そのフレームをスイッチ800のポートg1から出力させると決定する。このように、制御サーバ100は、“192.168.30.9”に対するエッジ情報を学習しなくても、“192.168.30.9”を宛先とするフレームの転送先を決定できる。したがって、第2の実施の形態と同様に、制御サーバ100によるアドレスの学習を効率化できる。
なお、第1〜第5の実施の形態では、ノードおよびエンドホストとして、物理的なコンピュータ(物理マシン)を用いてもよいし、物理マシン上で動作する仮想的なコンピュータ(仮想マシン)を用いてもよい。例えば、ハイパーバイザと呼ばれるソフトウェアが、物理マシン上のCPUやRAMなどのリソースを用いて、物理マシン上に仮想マシンを実現することがある。
また、第1の実施の形態の情報処理は、制御部1bとして用いられるプロセッサに、プログラムを実行させることで実現できる。第2〜第5の実施の形態の情報処理は、プロセッサ101にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体13に記録できる。
例えば、プログラムを記録した記録媒体13を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体13に記録されたプログラムまたは他のコンピュータから受信したプログラムを、RAM102やHDD103などの記憶装置に格納し(インストールし)、当該記憶装置からプログラムを読み込んで実行してもよい。