(57)【要約】【課題】コントローラにより集中制御されるネットワークにおいてＭＣＬＡＧ機能を実現する際に、スイッチ間の直接の情報交換を防ぎつつ、スケールするネットワークを実現すること。【解決手段】複数のスイッチによるパケットの転送を制御するコントローラは、複数のスイッチのインタフェースに関するインタフェース情報を収集する収集部と、収集した情報を複数のスイッチに送出する送出部とを備え、複数のスイッチは、コントローラから送出されたインタフェース情報に従ってマルチシャーシリンクアグリゲーション機能を実現する。【選択図】図１
2016158224.tif 000002
【特許請求の範囲】
【請求項１】
複数のスイッチと、
前記複数のスイッチによるパケットの転送を制御するコントローラと、を備え、
前記コントローラは、前記複数のスイッチのインタフェースに関するインタフェース情報を収集し、収集した情報を前記複数のスイッチに送出し、
前記複数のスイッチは、前記コントローラから送出されたインタフェース情報に従ってマルチシャーシリンクアグリゲーション機能を実現する、
ことを特徴とする通信システム。
【請求項２】
前記コントローラは、マルチシャーシリンクアグリゲーションに関する設定情報を受け付け、受け付けた設定情報を前記複数のスイッチに送出し、
前記複数のスイッチは、前記コントローラから送出された設定情報に従って前記マルチシャーシリンクアグリゲーション機能を実現する、
請求項１に記載の通信システム。
【請求項３】
前記設定情報は、マルチシャーシリンクアグリゲーションを構成するスイッチを識別する識別子と、該スイッチに含まれるポートのうちのマルチシャーシリンクアグリゲーションを構成するポートの識別子を含む、
請求項１または２に記載の通信システム。
【請求項４】
前記インタフェース情報は、前記複数のスイッチのポートの識別子を含む、
請求項１ないし３のいずれか１項に記載の通信システム。
【請求項５】
前記インタフェース情報は、前記複数のスイッチのポートの状態を表す情報を含む、
請求項１ないし４のいずれか１項に記載の通信システム。
【請求項６】
複数のスイッチによるパケットの転送を制御するコントローラであって、
前記コントローラは、前記複数のスイッチのインタフェースに関するインタフェース情報を収集する収集部と、
前記収集した情報を前記複数のスイッチに送出する送出部と、を備え、
前記複数のスイッチは、前記コントローラから送出されたインタフェース情報に従ってマルチシャーシリンクアグリゲーション機能を実現する、
ことを特徴とするコントローラ。
【請求項７】
前記収集部は、マルチシャーシリンクアグリゲーションに関する設定情報を受け付け、
前記送出部は、受け付けた設定情報を前記複数のスイッチに送出し、
前記複数のスイッチは、前記コントローラから送出された設定情報に従って前記マルチシャーシリンクアグリゲーション機能を実現する、
請求項６に記載のコントローラ。
【請求項８】
前記設定情報は、マルチシャーシリンクアグリゲーションを構成するスイッチを識別する識別子と、該スイッチに含まれるポートのうちのマルチシャーシリンクアグリゲーションを構成するポートの識別子を含む、
請求項６または７に記載のコントローラ。
【請求項９】
複数のスイッチによるパケットの転送を制御するコントローラが、前記複数のスイッチのインタフェースに関するインタフェース情報を収集するステップと、
前記収集した情報を前記複数のスイッチに送出するステップと、を含み、
前記複数のスイッチは、前記コントローラから送出されたインタフェース情報に従ってマルチシャーシリンクアグリゲーション機能を実現する、
ことを特徴とする通信方法。
【請求項１０】
複数のスイッチによるパケットの転送を制御するコントローラに設けられたコンピュータに対して、前記複数のスイッチのインタフェースに関するインタフェース情報を収集する処理と、
前記収集した情報を前記複数のスイッチに送出する処理と、を実行させ、
前記複数のスイッチは、前記コントローラから送出されたインタフェース情報に従ってマルチシャーシリンクアグリゲーション機能を実現する、
ことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信システム、コントローラ、通信方法、および、プログラムに関し、特にコントローラにより集中制御されるネットワークにおいてマルチシャーシリンクアグリゲーション（ＭＣＬＡＧ：Multi-Chassis Link Aggregation）機能を実現する通信システム、コントローラ、通信方法、および、プログラムに関する。
【背景技術】
【０００２】
複数台のスイッチを組として扱うスタック機能と、複数のリンクを論理的に１本であるかのように扱うリンクアグリゲーション機能を組み合わせて、冗長化・負荷分散を実現する機能として、マルチシャーシリンクアグリゲーション（ＭＣＬＡＧ：Multi-Chassis Link Aggregation）機能が知られている。
【０００３】
非特許文献１に記載されたオープンフロー（OpenFlow）で制御されるネットワークにおいて、ＭＣＬＡＧ機能を実現する方法として、以下の２つの方法が知られている。
【０００４】
「コントローラ方式」
コントローラ方式とは、OpenFlowコントローラが複数台のOpenFlowスイッチを組であると認識し、これらのOpenFlowスイッチに登録するフローエントリを調整・制御することによって実現する方法をいう。この手法では、OpenFlowスイッチはＭＣＬＡＧ機能を意識した機能を持たない。
【０００５】
「スイッチ方式」
スイッチ方式とは、複数台のOpenFlowスイッチが、あたかも１台のOpenFlowスイッチであるかのようにOpenFlowコントローラへ自身の情報を送信し、OpenFlowスイッチが冗長・負荷分散を担当する方法をいう。この手法では、OpenFlowコントローラはＭＣＬＡＧ機能を意識した機能は持たない。
【０００６】
なお、関連技術として、特許文献１には、既存ネットワーク機器にオープンフロー機能部を設けることにより、オープンフロースイッチとして機能させる技術が記載されている。特許文献１に記載された技術では、オープンフロー機能部は、リンクアグリゲーショングループインタフェースと、それを構成する物理ポートを既存ネットワーク機器のインタフェースとして管理する。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１１−１６０１７１号公報
【非特許文献】
【０００８】
【非特許文献１】Open Networking Foundation, "OpenFlow Switch Specification, Version 1.3.4 (Protocol versioin 0x04)," March 27, 2014, インターネット<URL:HTTPs://www.opennetworking.org/images/stories/downloads/sdn-resources/onf-specifications/openflow/openflow-switch-v1.3.4.pdf>
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上記特許文献および非特許文献の全開示内容は、本書に引用をもって繰り込み記載されているものとする。以下の分析は、本発明者によってなされたものである。
【００１０】
上記の２つの方式には、それぞれ以下の問題がある。
【００１１】
コントローラ方式は、リンクアグリゲーション機能の一部であるトラフィックの分散処理をOpenFlowコントローラが実現する必要がある。このとき、OpenFlowネットワークに流れるあらゆるトラフィックをOpenFlowコントローラが把握した上で分散を決定する必要があるため、OpenFlowコントローラへの負荷集中が避けられない。そのため、OpenFlowネットワークをスケールすることが困難となる。
【００１２】
一方、スイッチ方式は、ネットワークシステムとしては最適な実現方法であるが、OpenFlowスイッチ同士が独自に情報交換を行う必要があり、その機能を実装することは一般的には困難である。すなわち、スイッチ方式によると、OpenFlowスイッチの開発には長期間が必要となり、また、開発費や販売価格が増加するためソリューションも高価となる。また、この方式では、ユーザが各スイッチに対して設定を行う必要があるため、コントローラ方式に比べるとユーザビリティに欠けることとなる。特許文献１に記載された技術についても、スイッチ方式と同様のことが言える。
【００１３】
そこで、コントローラにより集中制御されるネットワークにおいてＭＣＬＡＧ機能を実現する際に、スイッチ間の直接の情報交換を防ぎつつ、スケールする（スケーラビリティを有する）ネットワークを実現することが課題となる。本発明の目的は、かかる課題解決に寄与する通信システム、コントローラ、通信方法、および、プログラムを提供することにある。
【課題を解決するための手段】
【００１４】
本発明の第１の態様に係る通信システムは、複数のスイッチと、前記複数のスイッチによるパケットの転送を制御するコントローラと、を備え、前記コントローラは、前記複数のスイッチのインタフェースに関するインタフェース情報を収集し、収集した情報を前記複数のスイッチに送出し、前記複数のスイッチは、前記コントローラから送出されたインタフェース情報に従ってマルチシャーシリンクアグリゲーション機能を実現する。
【００１５】
本発明の第２の態様に係るコントローラは、複数のスイッチによるパケットの転送を制御するコントローラであって、前記コントローラは、前記複数のスイッチのインタフェースに関するインタフェース情報を収集する収集部と、前記収集した情報を前記複数のスイッチに送出する送出部と、を備え、前記複数のスイッチは、前記コントローラから送出されたインタフェース情報に従ってマルチシャーシリンクアグリゲーション機能を実現する。
【００１６】
本発明の第３の態様に係る通信方法は、複数のスイッチによるパケットの転送を制御するコントローラが、前記複数のスイッチのインタフェースに関するインタフェース情報を収集するステップと、前記収集した情報を前記複数のスイッチに送出するステップと、を含み、前記複数のスイッチは、前記コントローラから送出されたインタフェース情報に従ってマルチシャーシリンクアグリゲーション機能を実現する。
【００１７】
本発明の第４の態様に係るプログラムは、複数のスイッチによるパケットの転送を制御するコントローラに設けられたコンピュータに対して、前記複数のスイッチのインタフェースに関するインタフェース情報を収集する処理と、前記収集した情報を前記複数のスイッチに送出する処理と、を実行させ、前記複数のスイッチは、前記コントローラから送出されたインタフェース情報に従ってマルチシャーシリンクアグリゲーション機能を実現する。なお、プログラムは、非一時的なコンピュータ可読記録媒体（non-transitory computer-readable storage medium）に記録されたプログラム製品として提供することもできる。
【発明の効果】
【００１８】
本発明に係る通信システム、コントローラ、通信方法、および、プログラムによると、コントローラにより集中制御されるネットワークにおいてＭＣＬＡＧ機能を実現する際に、スイッチ間の直接の情報交換を防ぎつつ、スケールするネットワークを実現することが可能となる。
【図面の簡単な説明】
【００１９】
【図１】一実施形態に係るコントローラの構成を例示するブロック図である。
【図２】第１の実施形態に係る通信システムの構成を例示するブロック図である。
【図３】ＭＣＬＡＧ設定情報の構成を例示する図である。
【図４】ＲＥＳＴメッセージの構成を例示する図である。
【図５】第１の実施形態に係る通信システムの動作を説明するための図である。
【図６】ＲＥＳＴメッセージの具体例を示す図である。
【図７】OpenFlowスイッチに設定されるフローエントリを例示する表である。
【発明を実施するための形態】
【００２０】
はじめに、一実施形態の概要について説明する。なお、この概要に付記する図面参照符号は、専ら理解を助けるための例示であり、本発明を図示の態様に限定することを意図するものではない。
【００２１】
図１は、一実施形態に係るコントローラ５０の構成を例示するブロック図である。図２は、コントローラ５０としてOpenFlowコントローラ１を備えた通信システムの構成を例示するブロック図である。
【００２２】
コントローラ５０は、複数のスイッチ（例えば、図３のOpenFlowスイッチ１０、２０）によるパケットの転送を制御する。図１を参照すると、コントローラ５０は、複数のスイッチのインタフェースに関するインタフェース情報を収集する収集部５１と、収集した情報を複数のスイッチに送出する送出部５２とを備えている。複数のスイッチは、コントローラから送出されたインタフェース情報に従ってマルチシャーシリンクアグリゲーション機能を実現する。
【００２３】
かかる構成において、インタフェース情報はトラフィックに関する情報に比べて圧倒的に情報量が少ないため、コントローラ５０への負荷集中がシステムのスケーラビリティの障害となることはない。また、かかる構成によると、スイッチのインタフェース情報は、コントローラを介して間接的にやりとりされるため、スイッチ間の直接の情報交換を防ぐことが可能となる。したがって、一実施形態に係るコントローラによると、コントローラにより集中制御されるネットワークにおいてＭＣＬＡＧ機能を実現する際に、スイッチ間の直接の情報交換を防ぎつつ、スケールするネットワークを実現することが可能となる。
【００２４】
＜実施形態１＞
第１の実施形態に係る通信システムについて、図面を参照して説明する。
【００２５】
本実施形態では、複数のスイッチでマルチシャーシリンクアグリゲーション機能を実現するにあたり、スイッチ方式のようにスイッチ間での直接的な情報同期を用いず、OpenFlowプロトコルを利用した最小限の情報交換で同等の機能を実現する。
【００２６】
また、本実施形態では、スイッチ方式で行われるOpenFlowスイッチ間の情報交換をOpenFlowコントローラを介して行う。
【００２７】
交換する情報とは、OpenFlowスイッチのインタフェースに関する情報である。具体的には、OpenFlowプロトコルによってOpenFlowスイッチのインタフェース情報をコントローラに集め、コントローラがそれを各OpenFlowスイッチに伝えることで、OpenFlowスイッチ同士が直接情報交換する必要をなくす。
【００２８】
インタフェース情報はトラフィックに関する情報に比べて圧倒的に情報量が少ないため、OpenFlowコントローラへの負荷集中がシステムスケーラビリティの障害となることはない。本方式ではOpenFlowプロトコルの機能のうちインタフェースに関する情報のやりとりにしか依存せず、フローなどのトラフィックに関する情報はそこに含まれない。よって、リンクアグリゲーション機能のトラフィック分散処理をOpenFlowコントローラからOpenFlowスイッチへオフロードすることも可能となり、システムのスケールを解決する手段が講じられるようになる。
【００２９】
スイッチのインタフェース情報をコントローラへ送信するという機能はOpenFlowスイッチの基本機能であり、容易に実装することが可能である。したがって、スイッチ方式と比較して、OpenFlowスイッチの開発期間やコストを大幅に削減することができる。
【００３０】
なお、OpenFlowコントローラに集まったインタフェース情報をOpenFlowスイッチに伝える手段が必要となるが、これは現時点ではOpenFlowプロトコルの範囲外であるため、OpenFlowプロトコル以外の実現手段が必要となる。本実施形態では、一例としてＲＥＳＴ  ＡＰＩ（Representational State Transfer Application Program Interface）を利用するものとする。
【００３１】
［構成］
図２は、本実施形態に係る通信システムの構成を例示するブロック図である。図２を参照すると、通信システムは、OpenFlowコントローラ１と、OpenFlowスイッチ１０、２０を備えている。OpenFlowコントローラ１とOpenFlowスイッチ１０、２０はSecure Channelネットワーク５を経由して接続されている。
【００３２】
OpenFlowコントローラ１は、表１に示すように、OpenFlowプロトコル機能部２、インタフェース管理部３、および、ＲＥＳＴ（Representational State Transfer）クライアント４を備えている。
【００３３】
表１：OpenFlowコントローラ１の機能部一覧
2016158224.tif 000003
【００３４】
OpenFlowスイッチ１０は、表２に示すように、OpenFlowプロトコル機能部１１、インタフェース管理部１２、および、ＲＥＳＴサーバ１３を備えている。
【００３５】
表２  OpenFlowスイッチ１０の機能部一覧
2016158224.tif 000004
【００３６】
さらに、OpenFlowスイッチ１０のポートには、表３に示すポート種別が存在する。
【００３７】
表３  OpenFlowスイッチのポート種別一覧
2016158224.tif 000005
【００３８】
OpenFlowスイッチ２０の構成は、OpenFlowスイッチ１０の構成と同様であるため、説明を省略する。
【００３９】
OpenFlowスイッチ１０、２０は、マルチシャーシリンクアグリゲーションを行うスイッチの組を構成する。
【００４０】
リンクＬ２とリンクＬ４は、MCLAG memberポート１４、２４につながる物理リンクである。リンクアグリゲーション機能では、これらを束ねて、１つの論理リンクとして扱う。これらのポートの対向側には、リンクアグリゲーション機能を持つＬ２スイッチ（Ｌ２ＳＷ）４０を接続する。
【００４１】
リンクＬ３は、OpenFlowスイッチ１０、２０のStackLinkポート１５、２５同士を結ぶ物理リンク（以下、stack-link）である。
【００４２】
リンクＬ１およびリンクＬ５は、通常の物理リンクである。
【００４３】
［動作］
本実施形態の通信システムの動作の流れは、以下のステップＳ１〜Ｓ８のとおりである。
【００４４】
（ステップＳ１）
設定端末６からOpenFlowコントローラ１にＭＣＬＡＧ設定情報を送信する。OpenFlowコントローラ１のインタフェース管理部３は、ＭＣＬＡＧ設定情報を保存する。
【００４５】
（ステップＳ２）
OpenFlowスイッチ１０、２０が、OpenFlowコントローラ１にOpenFlowプロトコルで接続する。OpenFlowコントローラ１はOpenFlowプロトコル機能部２を利用して、OpenFlowスイッチ１０、２０にOpenFlowインタフェース情報の送信を要求する。
【００４６】
（ステップＳ３）
OpenFlowスイッチ１０、２０は、それぞれ、OpenFlowプロトコル機能部１１、２１を利用して、OpenFlowコントローラ１に自装置ポート情報をOpenFlowインタフェース情報として送信する。OpenFlowコントローラ１のインタフェース管理部３は、受信したそれを保存する。
【００４７】
（ステップＳ４）
OpenFlowコントローラ１は、ＭＣＬＡＧ設定情報／OpenFlowスイッチ１０のOpenFlowインタフェース情報／OpenFlowスイッチ２０のOpenFlowインタフェース情報を、OpenFlowスイッチ１０、２０のＲＥＳＴサーバ１３、２３へ、ＲＥＳＴクライアント４を利用して送信する。
【００４８】
（ステップＳ５）
OpenFlowスイッチ１０、２０のインタフェース管理部１２、２２は、それぞれ、ＲＥＳＴサーバ１３、２３から受信したＭＣＬＡＧ設定情報、および、他装置のOpenFlowインタフェース情報から作成した他装置ポート情報を保存する。また、インタフェース管理部１２、２２は、そのＭＣＬＡＧで通信可能なポートの一覧を作成する。この一覧には、他装置のMCLAG memberポートも含む。
【００４９】
（ステップＳ６）
OpenFlowスイッチ１０、２０は、ＭＣＬＡＧへ送信すべきトラフィックが発生した場合、通信可能なポートの一覧からいずれか１つのポートを選択する。選択したポートが自装置のポートであれば、OpenFlowスイッチ１０、２０は、そのポートへそのまま送信する。一方、選択したポートが他装置のポートであれば、OpenFlowスイッチ１０、２０は、それぞれ、StackLinkポート１５、２５へ送信する。その際、OpenFlowスイッチ１０、２０は、StackLinkヘッダにinport情報とoutport情報を含める。
【００５０】
（ステップＳ７）
OpenFlowスイッチ１０、２０は、StackLinkポート１５、２５からトラフィックを受信した場合、StackLinkヘッダに含まれるoutport情報を確認し、そのポートへ送信する。また、その際、OpenFlowスイッチ１０、２０は、StackLinkヘッダに含まれるinport情報を確認し、その他装置のポートがあたかも自装置のポートであるかのように振る舞う。
【００５１】
（ステップＳ８）
OpenFlowスイッチ１０、２０は、自装置ポートの通信可能／不能状態が変化した場合、上記ステップＳ３を実施する。それを受けたOpenFlowコントローラ１は上記ステップＳ４を実施し、OpenFlowスイッチ１０、２０は上記ステップＳ５を実施する。これによりOpenFlowスイッチ１０、２０の「そのＭＣＬＡＧで通信可能なポートの一覧」が更新され、ステップＳ６で通信不能なポートを選択してしまい通信が成立しなくなるようなケースが回避される。
【００５２】
以下、上記の各ステップの詳細について説明する。
【００５３】
ステップＳ１では、設定端末６からOpenFlowコントローラ１へ、図３に示すＭＣＬＡＧに関する設定情報を送信する。
【００５４】
図３を参照すると、１行目はＭＣＬＡＧを構成するOpenFlowスイッチの組（以下、trunk-group）を定義する設定である。
２〜３行目は、そのＭＣＬＡＧを構成するOpenFlowスイッチ（以下、trunk-member）を特定する情報である。
４行目は、そのtrunk-groupでリンクアグリゲーションを行う、論理的に１つとみなす仮想ポート（以下、trunk-port）の設定である。
５〜６行目は、trunk-portを構成する実在のポート（以下、trunk-port-member）を羅列する情報である。
【００５５】
ステップＳ２、Ｓ３は、OpenFlowプロトコルの一般的な挙動であるため、ここでは、その詳細な説明を割愛する。本実施形態では、OpenFlowスイッチ１０、２０が送信するOpenFlowインタフェース情報に、以下の情報が含まれていればよい。
・すべてのポートのポート番号（以下、port-id）
・すべてのポートの通信可能／不能状態（以下、oper-status）
【００５６】
ステップＳ４では、OpenFlowコントローラ１は図４に示す情報をOpenFlowスイッチ１０、２０へ送信する。
【００５７】
図４を参照すると、２〜１６行目は、ＭＣＬＡＧ設定情報である。
４行目は、作成するtrunk-portのＩＤ（Identifier）である。trunk-group毎に一意なＩＤであり、OpenFlowコントローラ１が採番する。（ステップＳ１で、設定端末６からOpenFlowコントローラ１に入力してもよい）
６〜１３行目はtrunk-port-memberとするポートを羅列する領域であり、一般的には複数列挙することになる。７行目はOpenFlowスイッチを特定する情報、１０行目にはそのOpenFlowスイッチのMCLAG memberポートを特定する情報である。
１７〜２９行目は、OpenFlowインタフェース情報である。
１９〜２７行目の領域は、trunk-memberとなるOpenFlowスイッチの数だけ作成する。図２の場合、OpenFlowスイッチ１０用の領域とOpenFlowスイッチ２０用の領域の２つとなる。
２０行目は、OpenFlowスイッチを特定する情報である。
２２〜２５行目の領域は、そのOpenFlowスイッチに存在するポートの数だけ作成する。図２のOpenFlowスイッチ１０の場合、通常ポート１６、MCLAG memberポート１４、StackLinkポート１５の３つとなる。
２３行目は、そのポートを特定する情報（port-id）である。
２４行目は、そのポートの通信可能／不能状態（oper-status）を表す情報である。
【００５８】
ステップＳ５では、OpenFlowスイッチ１０、２０はステップＳ４で受信したメッセージから以下の情報を読み取る。OpenFlowスイッチ１０、２０は、図４の３〜１５行目の領域の個数から、必要なtrunk-portの個数を読み取る。OpenFLowスイッチ１０、２０は、４〜１４行目の領域から、そのtrunk-portを構成するポートの組み合わせを、自装置のポートと他装置のポートを合わせた形で認識する。OpenFlowスイッチ１０、２０は、２０行目が自装置のＩＤとは異なる１９〜２７行目があれば、２２〜２５行目の領域から他装置ポート情報を認識する。OpenFlowスイッチ１０、２０は、２０行目が自装置のＩＤであれば、その１９〜２７行目は無視する。OpenFlowスイッチ１０、２０は、OpenFlowコントローラ１からのメッセージを参照するまでもなく、自装置ポート情報を認識しているからである。
【００５９】
ステップＳ６は、図２の例では、端末３１または端末３２から端末３３へ向けたトラフィックが発生した場合の動作である。以下では、端末３１からトラフィックが発生した場合について説明する。
【００６０】
端末３１からのトラフィックを受信したOpenFlowスイッチ１０は、何らかの手段（例えばOpenFlowプロトコル機能部１１のフローテーブルを走査するなど）により、そのトラフィックはtrunk-portに出力する必要があると判断する。OpenFlowスイッチ１０は、そのtrunk-portに通信可能なtrunk-port-memberがどれだけ含まれているかを、ステップＳ５で受信したメッセージにより把握しているため、その内の１つを何らかの手段で選択する。
【００６１】
リンクアグリゲーション機能を持つ一般的なスイッチでは、ラウンドロビンによる選択や、フレームのヘッダパターンによるハッシュ計算により求める実装が一般的だが、本実施形態では、その手段を特に限定しない。
【００６２】
選択したポートがOpenFlowスイッチ１０のMCLAG memberポート１４である場合、OpenFlowスイッチ１０は受信したトラフィックをそのポートからそのまま送信する。一方、選択したポートがOpenFlowスイッチ２０のMCLAG memberポート２４である場合、OpenFlowスイッチ１０は受信したトラフィックにStackLinkヘッダを付与して、StackLinkポート１５へ送信する。この場合、StackLinkヘッダのinport情報はOpenFlowスイッチ１０の通常ポート１６のＩＤが、outport情報にはOpenFlowスイッチ２０のMCLAG memberポート２４のＩＤが入力される。
【００６３】
ステップＳ７は、ステップＳ６の説明中の動作例の続きとして説明する。OpenFlowスイッチ２０はStackLinkポートからトラフィックを受信すると、StackLinkヘッダのoutport情報を確認する。前述の例ではOpenFlowスイッチ２０のMCLAG memberポート２４のＩＤが含まれているため、OpenFlowスイッチ２０はそのトラフィックのStackLinkヘッダを剥がし、MCLAG memberポート２４へ送信する。
【００６４】
ステップＳ７の動作の別の例として、図２で端末３３から端末３１に向けたトラフィックが発生し、それがリンクＬ４からOpenFlowスイッチ２０に到着したケースについて説明する。この場合、OpenFlowスイッチ２０は何らかの手段（例えば、フローテーブルを走査するなど）により、そのトラフィックをStackLinkポート２５へ送信する必要があると判断する。すると、OpenFlowスイッチ１０は、StackLinkヘッダのinport情報にOpenFlowスイッチ２０のMCLAG memberポート２４のＩＤが入力されたトラフィックをStackLinkポート１５から受信する。
【００６５】
このとき、OpenFlowスイッチ１０はinport情報に記載されたポートがあたかも自身にあるかのように、そのトラフィックを扱う。例えば、一般的なＬ２スイッチが行うような送信元ＭＡＣ（Media Access Control）アドレスの学習を行う場合、StackLinkポートで受信したとして学習するのではなくinport情報に基いた学習を行う。つまり、OpenFlowスイッチ１０は、そのトラフィックをあたかも自装置に「OpenFlowスイッチ２０のMCLAG memberポート２４」が存在し、そこから受信したかのように扱いつつ、StackLinkヘッダのoutport情報によりリンクＬ１へ送信する。この振る舞いと、ステップＳ５で受信した他装置ポート情報が合わさることで、OpenFlowスイッチ１０、２０は他装置のポートをあたかも自装置のポートであるかのように動作できるようになる。
【００６６】
ステップＳ８は、OpenFlowスイッチの各ポートの通信可能／不能状態が変化した際に行われる動作である。例えば、図２の構成で、OpenFlowスイッチ２０のMCLAG memberポート２４が通信不能状態に陥った場合、OpenFlowスイッチ２０はステップＳ３により、それをOpenFlowコントローラ１へ通知する。この通知を受けたOpenFlowコントローラ１はステップＳ４により、その情報をOpenFlowスイッチ１０へ通知する。すると、ステップＳ５によりOpenFlowスイッチ１０はOpenFlowスイッチ２０のMCLAG memberポート２４が利用できないことを認識する。これによりOpenFlowスイッチ１０は、ステップＳ６でポートを選択する際にはOpenFlowスイッチ２０のMCLAG memberポート２４を選択肢から除外し、OpenFlowスイッチ１０のMCLAG memberポート１４しか選択しないようになる。
【００６７】
逆に、OpenFlowスイッチ２０のMCLAG memberポート２４が通信不能状態から可能状態へ遷移する場合も、同様にステップＳ３〜Ｓ５を実施することにより、OpenFlowスイッチ１０はステップＳ６でポートを選択する際の選択肢にOpenFlowスイッチ２０のMCLAG memberポート２４を含むようになり、トラフィックが再度分散送信されるようになる。
【００６８】
次に、本実施形態に係る通信システムの動作について、具体例に基づいて、さらに説明する。図５は、図２に示す通信システムにおいて、各ポートに番号を付したときの図である。図５を参照すると、MCLAG memberポート１４、２４には番号「１０」が付され、通常ポート１６、２６には番号「２０」が付され、StackLinkポート１５、２５には番号「３０」が付されている。
【００６９】
図６は、図５のようにポートに番号を付与した場合における、図４に示したＲＥＳＴメッセージの具体例を示す図である。図６のmclag-configにおいて、trunk-portのＩＤとして「１」が指定されている。このとき、OpenFlowスイッチ１０、２０は、いずれも、ＭＣＬＡＧのポートの番号を「１」とする。また、trunk-port-memberとするポートを指定するために、OpenFlowスイッチを特定する情報（dpid）と、そのOpenFlowスイッチのMCLAG memberポートを特定する情報（id）が指定されている。また、図６のinterface-statusの欄には、OpenFlowインタフェース情報が指定されている。ここでは、OpenFlowスイッチ１０に存在するポートと、OpenFlowスイッチ２０に存在するポートが指定されている。
【００７０】
なお、OpenFlowスイッチ１０に存在するポートは、OpenFlowスイッチ２０にとっては他の装置のポートであるが、OpenFlowスイッチ２０は、OpenFlowスイッチ１０の番号「１０」、「２０」、「３０」のポートを、それぞれ、自身の架空のポート「１００１０」、「１００２０」、「１００３０」とみなしてもよい。同様に、OpenFlowスイッチ２０に存在するポートは、OpenFlowスイッチ１０にとっては他の装置のポートであるが、OpenFlowスイッチ１０は、OpenFlowスイッチ２０の番号「１０」、「２０」、「３０」のポートを、それぞれ、自身の架空のポート「１００１０」、「１００２０」、「１００３０」とみなしてもよい。
【００７１】
図７は、図５のようにポートに番号を付した場合に、図４のＲＥＳＴメッセージを受信したOpenFlowスイッチ１０、２０に設定されるフローエントリを例示する表である。
【００７２】
図７のOpenFlowスイッチ１０のフローエントリにおいて、No.1〜No.3はユニキャスト通信用のフローエントリである。このエントリは、ＭＡＣアドレス単位の出力先が分かっている場合に用いられる。また、このエントリはOpenFlowスイッチ１０が自動的に作成してもよい。
【００７３】
Match条件が「DstMAC=端末３１」の場合、OpenFlowスイッチ１０のポート「２０」に出力される。また、Match条件が「DstMAC=端末３２」の場合、OpenFlowスイッチ２０のポート「２０」（すなわち、OpenFlowスイッチ１０のポート「１００２０」）に出力される。さらに、Match条件が「DstMAC=端末３３」の場合、「MCLAGポート１に出力」(すなわち、OpenFlowスイッチ１０の１に出力)となる。このとき、OpenFlowスイッチ１０は、OpenFlowスイッチ１０のポート「１０」とOpenFlowスイッチ２０のポート「１０」のどちらから出力するかを何らかのロジックで決定する。OpenFlowスイッチ１０のポート「１０」から出力する場合、そのまま出力する。一方、OpenFlowスイッチ２０のポート「１０」から出力する場合、「OpenFlowスイッチ２０の１０へ出力」という情報をフレームの特殊領域に追加し、ポート「３０」へ出力する。これを受信したOpenFlowスイッチ２０は、追加された領域を削除して、ポート「１０」へ出力する。
【００７４】
図７のOpenFlowスイッチ１０のフローエントリにおいて、No.4〜No.6はFlooding用のフローエントリである。このエントリは、ＭＡＣアドレス単位の出力先が不明の場合に用いられる。また、このエントリはOpenFlowコントローラ１が作成する必要がある。OpenFlowスイッチ１０が自動的に作成してもよい。
【００７５】
Match条件が「Inport=10」の場合、OpenFlowスイッチ１０のポート「２０」と「３０」に出力される。また、Match条件が「Inport=20」の場合、OpenFlowスイッチ１０のポート「１０」と「２０」に出力される。さらに、Match条件が「Inport=30」の場合、OpenFlowスイッチ１０のポート「２０」に出力される。
【００７６】
［効果］
本実施形態によると、以下の効果が得られる。すなわち、本実施形態によると、コントローラ方式と比較して、システムのスケールを妨げることなくＭＣＬＡＧ機能を実現することができる。また、本実施形態によると、スイッチ方式と比較して、OpenFlowスイッチの開発コスト削減と開発期間の短縮が可能となり、新製品のタイムリーな市場投入が実現される。さらに、本実施形態によると、設定端末による設定作業がOpenFlowコントローラ１に集約されるため、スイッチ方式と比較して、効率的な設定方法をユーザに提供することができる。
【００７７】
［変形例］
上記実施形態では、インタフェース情報のスイッチ間同期にOpenFlowプロトコルを利用する。OpenFlowプロトコルをそれ以外の目的、例えばフロー制御などで利用する必要性はない。つまり、トラフィックの経路選択やフロー制御はOpenFlowプロトコルではなく、従来のＬ２スイッチと同様にOpenFlowコントローラ無しで実現してもよい。図２や上述の説明では「OpenFlowスイッチ」と記述しているが、「インタフェース情報に関するOpenFlowプロトコルの一部機能だけを実装した、通常のＬ２スイッチ」を用いてもよい。
【００７８】
また、ステップＳ４とＳ５でOpenFlowコントローラ１からOpenFlowスイッチ１０、２０へインタフェース情報を送信する方法はＲＥＳＴ  ＡＰＩに限定されず、同等の情報量が送信可能であれば他の方法を用いてもよい。
【００７９】
なお、本発明において、下記の形態が可能である。
［形態１］
上記第１の態様に係る通信システムのとおりである。
［形態２］
前記コントローラは、マルチシャーシリンクアグリゲーションに関する設定情報を受け付け、受け付けた設定情報を前記複数のスイッチに送出し、
前記複数のスイッチは、前記コントローラから送出された設定情報に従って前記マルチシャーシリンクアグリゲーション機能を実現する、
形態１に記載の通信システム。
［形態３］
前記設定情報は、マルチシャーシリンクアグリゲーションを構成するスイッチを識別する識別子と、該スイッチに含まれるポートのうちのマルチシャーシリンクアグリゲーションを構成するポートの識別子を含む、
形態１または２に記載の通信システム。
［形態４］
前記インタフェース情報は、前記複数のスイッチのポートの識別子を含む、
形態１ないし３のいずれか一に記載の通信システム。
［形態５］
前記インタフェース情報は、前記複数のスイッチのポートの状態を表す情報を含む、
形態１ないし４のいずれか一に記載の通信システム。
［形態６］
上記第２の態様に係るコントローラのとおりである。
［形態７］
前記収集部は、マルチシャーシリンクアグリゲーションに関する設定情報を受け付け、
前記送出部は、受け付けた設定情報を前記複数のスイッチに送出し、
前記複数のスイッチは、前記コントローラから送出された設定情報に従って前記マルチシャーシリンクアグリゲーション機能を実現する、
形態６に記載のコントローラ。
［形態８］
前記設定情報は、マルチシャーシリンクアグリゲーションを構成するスイッチを識別する識別子と、該スイッチに含まれるポートのうちのマルチシャーシリンクアグリゲーションを構成するポートの識別子を含む、
形態６または７に記載のコントローラ。
［形態９］
前記インタフェース情報は、前記複数のスイッチのポートの識別子を含む、
形態６ないし８のいずれか一に記載のコントローラ。
［形態１０］
前記インタフェース情報は、前記複数のスイッチのポートの状態を表す情報を含む、
形態６ないし９のいずれか一に記載のコントローラ。
［形態１１］
上記第３の態様に係る通信方法のとおりである。
［形態１２］
前記コントローラが、マルチシャーシリンクアグリゲーションに関する設定情報を受け付けるステップと、
受け付けた設定情報を前記複数のスイッチに送出するステップと、を含み、
前記複数のスイッチは、前記コントローラから送出された設定情報に従って前記マルチシャーシリンクアグリゲーション機能を実現する、
形態１１に記載の通信方法。
［形態１３］
上記第４の態様に係るプログラムのとおりである。
［形態１４］
マルチシャーシリンクアグリゲーションに関する設定情報を受け付ける処理と、
受け付けた設定情報を前記複数のスイッチに送出する処理と、を前記コンピュータに実行させ、
前記複数のスイッチは、前記コントローラから送出された設定情報に従って前記マルチシャーシリンクアグリゲーション機能を実現する、
形態１３に記載のプログラム。
【００８０】
なお、上記特許文献および非特許文献の全開示内容は、本書に引用をもって繰り込み記載されているものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態の変更・調整が可能である。また、本発明の全開示の枠内において種々の開示要素（各請求項の各要素、各実施形態の各要素、各図面の各要素等を含む）の多様な組み合わせ、ないし、選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。
【符号の説明】
【００８１】
１    OpenFlowコントローラ
２    OpenFlowプロトコル機能部
３    インタフェース管理部
４    ＲＥＳＴクライアント
５    セキュアチャネルネットワーク
６    設定端末
１０、２０    OpenFlowスイッチ
１１、２１    OpenFlowプロトコル機能部
１２、２２    インタフェース管理部
１３、２３    ＲＥＳＴサーバ
１４、２４    ＭＣＬＡＧメンバポート
１５、２５    スタックリンクポート
１６、２６    通常ポート
３１〜３３    端末
４０    Ｌ２スイッチ（Ｌ２ＳＷ）
４１、４２    ＬＡＧメンバポート
５０    コントローラ
５１    収集部
５２    送出部
Ｌ１〜Ｌ５    リンク
【図１】
2016158224.tif 000006
【図２】
2016158224.tif 000007
【図３】
2016158224.tif 000008
【図４】
2016158224.tif 000009
【図５】
2016158224.tif 000010
【図６】
2016158224.tif 000011
【図７】
2016158224.tif 000012