openflow1.3プロトコル入門handai-trema.github.io/deck/week3/open_flow13.pdf•どちらから接続してもよい...

17
OpenFlow1.3プロトコル入門 高宮安仁 @yasuhito

Upload: others

Post on 30-Jul-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: OpenFlow1.3プロトコル入門handai-trema.github.io/deck/week3/open_flow13.pdf•どちらから接続してもよい • ふつうはスイッチが接続しに行く スイッチ・コントローラ間の接続

OpenFlow1.3プロトコル入門

高宮安仁 @yasuhito

Page 2: OpenFlow1.3プロトコル入門handai-trema.github.io/deck/week3/open_flow13.pdf•どちらから接続してもよい • ふつうはスイッチが接続しに行く スイッチ・コントローラ間の接続

OpenFlow1.0と1.3の 共通仕様

Page 3: OpenFlow1.3プロトコル入門handai-trema.github.io/deck/week3/open_flow13.pdf•どちらから接続してもよい • ふつうはスイッチが接続しに行く スイッチ・コントローラ間の接続

• どちらから接続してもよい• ふつうはスイッチが接続しに行く

スイッチ・コントローラ間の接続

Page 4: OpenFlow1.3プロトコル入門handai-trema.github.io/deck/week3/open_flow13.pdf•どちらから接続してもよい • ふつうはスイッチが接続しに行く スイッチ・コントローラ間の接続

• Helloに自分のバージョンを入れて送る

• お互いに共通バージョンがあったら成功

バージョンネゴシエーション

Page 5: OpenFlow1.3プロトコル入門handai-trema.github.io/deck/week3/open_flow13.pdf•どちらから接続してもよい • ふつうはスイッチが接続しに行く スイッチ・コントローラ間の接続

• スイッチのスペックとdpidを取得

• これでようやくswitch_readyが起こる

DatapathIDの取得

Page 6: OpenFlow1.3プロトコル入門handai-trema.github.io/deck/week3/open_flow13.pdf•どちらから接続してもよい • ふつうはスイッチが接続しに行く スイッチ・コントローラ間の接続
Page 7: OpenFlow1.3プロトコル入門handai-trema.github.io/deck/week3/open_flow13.pdf•どちらから接続してもよい • ふつうはスイッチが接続しに行く スイッチ・コントローラ間の接続

OpenFlow1.3の利点

Page 8: OpenFlow1.3プロトコル入門handai-trema.github.io/deck/week3/open_flow13.pdf•どちらから接続してもよい • ふつうはスイッチが接続しに行く スイッチ・コントローラ間の接続

• OpenFlow1.0 では、フローテーブルは一つだけ

• 役割の違うエントリが混在 & 混乱しがち

OpenFlow1.0の問題点 1

Flow Tabledropルール1

書き換えルール1

書き換えルール2

転送ルール1

dropルール2

dropルール3

転送ルール2

Page 9: OpenFlow1.3プロトコル入門handai-trema.github.io/deck/week3/open_flow13.pdf•どちらから接続してもよい • ふつうはスイッチが接続しに行く スイッチ・コントローラ間の接続

フィルタリングdropルール1

dropルール2

dropルール3

OpenFlow1.3では

書き換え書き換え1

&GoTo

転送転送ルール1

転送ルール2

GoTo

• 分けてスッキリ!

• 処理をパイプライン化できるので性能が向上することも

書き換え2&GoTo

Page 10: OpenFlow1.3プロトコル入門handai-trema.github.io/deck/week3/open_flow13.pdf•どちらから接続してもよい • ふつうはスイッチが接続しに行く スイッチ・コントローラ間の接続

コントローラ

Flow Table

PacktInが大量に到着するとコントローラがパンク

知らないパケットが来た

Packet In

OpenFlow1.0の問題点 2

Page 11: OpenFlow1.3プロトコル入門handai-trema.github.io/deck/week3/open_flow13.pdf•どちらから接続してもよい • ふつうはスイッチが接続しに行く スイッチ・コントローラ間の接続

SendOutPort(:controller)

コントローラ

PacketIn

• 明示的に指定しない限り、PacketInは起こらない

OpenFlow1.3では

Page 12: OpenFlow1.3プロトコル入門handai-trema.github.io/deck/week3/open_flow13.pdf•どちらから接続してもよい • ふつうはスイッチが接続しに行く スイッチ・コントローラ間の接続

OpenFlow1.3での変更点 アクションと

インストラクション

Page 13: OpenFlow1.3プロトコル入門handai-trema.github.io/deck/week3/open_flow13.pdf•どちらから接続してもよい • ふつうはスイッチが接続しに行く スイッチ・コントローラ間の接続

アクション

• パケットの書き換えと転送 (OF1.0と同じ)

• OF1.3で種類が増えました (全40種類)

インストラクション

• テーブルの移動 (GoTo)

• アクションの実行方法の指定

Page 14: OpenFlow1.3プロトコル入門handai-trema.github.io/deck/week3/open_flow13.pdf•どちらから接続してもよい • ふつうはスイッチが接続しに行く スイッチ・コントローラ間の接続

• 宛先が 192.168.0.30 でHTTP だったら

send_flow_mod_add(

datapath_id,

table_id: 1,

idle_timeout: 0,

priority: 1,

match: Match.new,

instructions: GotoTable.new(2)

)

• 処理をテーブル2へ移行

Page 15: OpenFlow1.3プロトコル入門handai-trema.github.io/deck/week3/open_flow13.pdf•どちらから接続してもよい • ふつうはスイッチが接続しに行く スイッチ・コントローラ間の接続

• 宛先が 192.168.0.30 でHTTP だったら

send_flow_mod_add(

datapath_id,

...

actions: SendOutPort.new(1)

)

send_flow_mod_add(

datapath_id,

...

instructions: Apply.new(SendOutPort.new(1))

)

Page 16: OpenFlow1.3プロトコル入門handai-trema.github.io/deck/week3/open_flow13.pdf•どちらから接続してもよい • ふつうはスイッチが接続しに行く スイッチ・コントローラ間の接続

WriteActions(A1), GoTo(1)

アクションセット

• パケットに関連付いたアクション集合• WriteActionsでアクションを追加

• GoToを含まないエントリにマッチしたら実行

WriteActions(A2), GoTo(2)

WriteActions(A3)

[] [A1] [A1,A2]

A1-3をまとめて実行

Page 17: OpenFlow1.3プロトコル入門handai-trema.github.io/deck/week3/open_flow13.pdf•どちらから接続してもよい • ふつうはスイッチが接続しに行く スイッチ・コントローラ間の接続

まとめ

• switch_readyが起こるまで

• OpenFlow1.3の利点

• アクションとインストラクション• 実践的な使い方はルータの実装で説明