2.2 OpenFlowプロトコル詳細
2.2 OpenFlowプロトコル詳細
OpenFlowプロトコルに従ってやり取りされるメッセージを列挙すると以下の表のようになります。
| 図4:OpenFlowプロトコルに従ってやり取りされるメッセージ(クリックで拡大) |
ここではそのうち利用頻度の高いもの、OpenFlowスイッチのふるまいに大きな影響を与えるものについて詳しく説明していきます。
2.2.1 コントローラからスイッチへのメッセージ
- ・Flow- Mod
- OpenFlowスイッチで記述されているフローを書き換えたい場合にコントローラからスイッチに対して送信するメッセージです。新しくOpenFlowスイッチにフローを追加する場合もこのFlow Modメッセージが用いられます。
OpenFlowスイッチのフローテーブルのフローを修正、追加する際にはフローのデータのうちヘッダフィールドおよびアクションを指定します。つまり、マッチングに用いるためのヘッダフィールドおよび、ヘッダフィールドが一致した際にどのように処理するかを記述したアクションをセットにして、コントローラからスイッチに送信します。 - ・Packet-Out
- OpenFlowスイッチからパケットを送出させるために、コントローラからスイッチに対して送信するメッセージです。この際、スイッチのどのポートからどのようなパケットを送出させるかについてはOpenFlowコントローラにて自由に指定することができます。例えば、コントローラにてLLDPパケットを生成しOpenFlowスイッチの全ポートからパケットを送出するといったことが可能になります。
- ・Statics-Request
- OpenFlowスイッチに置いて管理されている統計情報の取得をするためのメッセージです。統計情報としては、フロー単位・ポート単位などの単位でパケット数・バイト数などの情報を取得することができます。また、OpenFlowスイッチのフローテーブルで管理されているフロー数などもこのメッセージを送ることで取得することが可能です。これらの情報は後述するStatics-Replyメッセージでコントローラに通知されます。
2.2.2 スイッチからコントローラへのメッセージ
- ・Packet-In
- OpenFlowスイッチからコントローラに対して、パケットを受信したことを通知するメッセージです。例えば、スイッチは、未知のパケット(どのフローのヘッダフィールドにも一致しなかった場合)を受け取った時に、このメッセージを用いてコントローラに対してそのパケットを通知します。コントローラは通知の内容を解析し、ふるまいを決定します(一般的には、コントローラ側ではそのパケットの内容を判断したうえで、スイッチに対してFlow-ModやPacket-Outといったメッセージを送信します)。
- ・Statics-Reply
- OpenFlowコントローラからのStatics-Request要求(前述の通り)に対して、その統計情報を応答するメッセージです。