openflow1.3プロトコル入門handai-trema.github.io/deck/week3/open_flow13.pdf•どちらから接続してもよい...
Post on 30-Jul-2020
3 Views
Preview:
TRANSCRIPT
OpenFlow1.3プロトコル入門
高宮安仁 @yasuhito
OpenFlow1.0と1.3の 共通仕様
• どちらから接続してもよい• ふつうはスイッチが接続しに行く
スイッチ・コントローラ間の接続
• Helloに自分のバージョンを入れて送る
• お互いに共通バージョンがあったら成功
バージョンネゴシエーション
• スイッチのスペックとdpidを取得
• これでようやくswitch_readyが起こる
DatapathIDの取得
OpenFlow1.3の利点
• OpenFlow1.0 では、フローテーブルは一つだけ
• 役割の違うエントリが混在 & 混乱しがち
OpenFlow1.0の問題点 1
Flow Tabledropルール1
書き換えルール1
書き換えルール2
転送ルール1
dropルール2
dropルール3
転送ルール2
…
…
フィルタリングdropルール1
dropルール2
dropルール3
OpenFlow1.3では
書き換え書き換え1
&GoTo
転送転送ルール1
転送ルール2
GoTo
• 分けてスッキリ!
• 処理をパイプライン化できるので性能が向上することも
書き換え2&GoTo
コントローラ
Flow Table
PacktInが大量に到着するとコントローラがパンク
知らないパケットが来た
Packet In
OpenFlow1.0の問題点 2
SendOutPort(:controller)
コントローラ
PacketIn
• 明示的に指定しない限り、PacketInは起こらない
OpenFlow1.3では
OpenFlow1.3での変更点 アクションと
インストラクション
アクション
• パケットの書き換えと転送 (OF1.0と同じ)
• OF1.3で種類が増えました (全40種類)
インストラクション
• テーブルの移動 (GoTo)
• アクションの実行方法の指定
• 宛先が 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へ移行
• 宛先が 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))
)
WriteActions(A1), GoTo(1)
アクションセット
• パケットに関連付いたアクション集合• WriteActionsでアクションを追加
• GoToを含まないエントリにマッチしたら実行
WriteActions(A2), GoTo(2)
WriteActions(A3)
[] [A1] [A1,A2]
A1-3をまとめて実行
まとめ
• switch_readyが起こるまで
• OpenFlow1.3の利点
• アクションとインストラクション• 実践的な使い方はルータの実装で説明
top related