![Page 1: スイッチを作ろう コントローラhandai-trema.github.io/deck/week3/learning_switch13.pdf処理1! フィルタリング 処理2! 転送 ラーニングスイッチ • 802.1D/802.1Q](https://reader034.vdocuments.mx/reader034/viewer/2022050403/5f80f17622010b7d69266803/html5/thumbnails/1.jpg)
スイッチを作ろうOpenFlow1.3編
コントローラ
![Page 2: スイッチを作ろう コントローラhandai-trema.github.io/deck/week3/learning_switch13.pdf処理1! フィルタリング 処理2! 転送 ラーニングスイッチ • 802.1D/802.1Q](https://reader034.vdocuments.mx/reader034/viewer/2022050403/5f80f17622010b7d69266803/html5/thumbnails/2.jpg)
HelloWorld
スイッチ
トポロジディスカバリ
ルーティングスイッチ
仮想NW
![Page 3: スイッチを作ろう コントローラhandai-trema.github.io/deck/week3/learning_switch13.pdf処理1! フィルタリング 処理2! 転送 ラーニングスイッチ • 802.1D/802.1Q](https://reader034.vdocuments.mx/reader034/viewer/2022050403/5f80f17622010b7d69266803/html5/thumbnails/3.jpg)
おさらいOpenFlow1.0でのパケット処理
![Page 4: スイッチを作ろう コントローラhandai-trema.github.io/deck/week3/learning_switch13.pdf処理1! フィルタリング 処理2! 転送 ラーニングスイッチ • 802.1D/802.1Q](https://reader034.vdocuments.mx/reader034/viewer/2022050403/5f80f17622010b7d69266803/html5/thumbnails/4.jpg)
処理1フィルタリング
処理2転送
ラーニングスイッチ
• 802.1D/802.1Qreserved MAC
• マルチキャスト
ポートn番へ or
宛先 MAC =
FDB
をドロップ
FLOODING
![Page 5: スイッチを作ろう コントローラhandai-trema.github.io/deck/week3/learning_switch13.pdf処理1! フィルタリング 処理2! 転送 ラーニングスイッチ • 802.1D/802.1Q](https://reader034.vdocuments.mx/reader034/viewer/2022050403/5f80f17622010b7d69266803/html5/thumbnails/5.jpg)
処理1フィルタリング
処理2書き換え
処理3転送
例: ルータ
送信元/宛先 MACアドレス
ルーティングテーブル
![Page 6: スイッチを作ろう コントローラhandai-trema.github.io/deck/week3/learning_switch13.pdf処理1! フィルタリング 処理2! 転送 ラーニングスイッチ • 802.1D/802.1Q](https://reader034.vdocuments.mx/reader034/viewer/2022050403/5f80f17622010b7d69266803/html5/thumbnails/6.jpg)
OpenFlow1.3でのパケット処理
![Page 7: スイッチを作ろう コントローラhandai-trema.github.io/deck/week3/learning_switch13.pdf処理1! フィルタリング 処理2! 転送 ラーニングスイッチ • 802.1D/802.1Q](https://reader034.vdocuments.mx/reader034/viewer/2022050403/5f80f17622010b7d69266803/html5/thumbnails/7.jpg)
フローテーブルA
フローテーブルB
フローテーブルC
マルチプルテーブル
コントローラ
Goto Goto
処理ごとにテーブルを分けるとデバッグしやすくなる
![Page 8: スイッチを作ろう コントローラhandai-trema.github.io/deck/week3/learning_switch13.pdf処理1! フィルタリング 処理2! 転送 ラーニングスイッチ • 802.1D/802.1Q](https://reader034.vdocuments.mx/reader034/viewer/2022050403/5f80f17622010b7d69266803/html5/thumbnails/8.jpg)
ラーニングスイッチ
フィルタリングテーブル (ID=0)
dropルールdropルール
GoTo 1
Pri.
2
2
1
Flow Entry
…
転送テーブル(ID=1)
![Page 9: スイッチを作ろう コントローラhandai-trema.github.io/deck/week3/learning_switch13.pdf処理1! フィルタリング 処理2! 転送 ラーニングスイッチ • 802.1D/802.1Q](https://reader034.vdocuments.mx/reader034/viewer/2022050403/5f80f17622010b7d69266803/html5/thumbnails/9.jpg)
• 宛先が 192.168.0.30 でHTTP だったら
send_flow_mod_add(
datapath_id,
table_id: 0,
idle_timeout: 0,
priority: 2,
match: Match.new(ether_destination_address: '01:00:5e:00:00:00',
ether_destination_address_mask: 'ff:ff:ff:00:00:00')
)
• マルチキャストを落とす• 最初のテーブル (ID=0) で処理
![Page 10: スイッチを作ろう コントローラhandai-trema.github.io/deck/week3/learning_switch13.pdf処理1! フィルタリング 処理2! 転送 ラーニングスイッチ • 802.1D/802.1Q](https://reader034.vdocuments.mx/reader034/viewer/2022050403/5f80f17622010b7d69266803/html5/thumbnails/10.jpg)
• 宛先が 192.168.0.30 でHTTP だったら
send_flow_mod_add(
datapath_id,
table_id: 0,
idle_timeout: 0,
priority: 1,
match: Match.new,
instructions: GotoTable.new(1)
)
• フィルタにかからなかったら、 処理をテーブル1へ移行
• フィルタリング (pri=2) の後に このルール (pri=1) にヒット
![Page 11: スイッチを作ろう コントローラhandai-trema.github.io/deck/week3/learning_switch13.pdf処理1! フィルタリング 処理2! 転送 ラーニングスイッチ • 802.1D/802.1Q](https://reader034.vdocuments.mx/reader034/viewer/2022050403/5f80f17622010b7d69266803/html5/thumbnails/11.jpg)
ラーニングスイッチ(再掲)
フィルタリングテーブル (ID=0)
dropルールdropルール
GoTo 1
Pri.
2
2
1
Flow Entry
…
転送テーブル(ID=1)
![Page 12: スイッチを作ろう コントローラhandai-trema.github.io/deck/week3/learning_switch13.pdf処理1! フィルタリング 処理2! 転送 ラーニングスイッチ • 802.1D/802.1Q](https://reader034.vdocuments.mx/reader034/viewer/2022050403/5f80f17622010b7d69266803/html5/thumbnails/12.jpg)
フィルタリングテーブル (ID=0)
転送テーブル(ID=1)
CONTROLLER
Pri.
1
コントローラ
PacketIn
![Page 13: スイッチを作ろう コントローラhandai-trema.github.io/deck/week3/learning_switch13.pdf処理1! フィルタリング 処理2! 転送 ラーニングスイッチ • 802.1D/802.1Q](https://reader034.vdocuments.mx/reader034/viewer/2022050403/5f80f17622010b7d69266803/html5/thumbnails/13.jpg)
• 宛先が 192.168.0.30 でHTTP だったら
send_flow_mod_add(
datapath_id,
table_id: 1,
idle_timeout: 0,
priority: 1,
match: Match.new,
instructions: Apply.new(SendOutPort.new(:controller))
)
• 明示的にPacketInを起こす• OpenFlow1.3ではデフォルトドロップ
![Page 14: スイッチを作ろう コントローラhandai-trema.github.io/deck/week3/learning_switch13.pdf処理1! フィルタリング 処理2! 転送 ラーニングスイッチ • 802.1D/802.1Q](https://reader034.vdocuments.mx/reader034/viewer/2022050403/5f80f17622010b7d69266803/html5/thumbnails/14.jpg)
デフォルトドロップ(OpenFLow 1.3)
• OpenFlow1.0はデフォルトPacketIn
• フィルタ用フローエントリを打ち込むより前にパケットが大量に到着すると、最悪コントローラがパンク
• そこでOpenFlow1.3ではPacketInを明示的に起こすように修正された
![Page 15: スイッチを作ろう コントローラhandai-trema.github.io/deck/week3/learning_switch13.pdf処理1! フィルタリング 処理2! 転送 ラーニングスイッチ • 802.1D/802.1Q](https://reader034.vdocuments.mx/reader034/viewer/2022050403/5f80f17622010b7d69266803/html5/thumbnails/15.jpg)
転送テーブル(ID=1)
CONTROLLER
Pri.
1
コントローラ
転送ルール2
FlowMod
フィルタリングテーブル (ID=0)
FDB
![Page 16: スイッチを作ろう コントローラhandai-trema.github.io/deck/week3/learning_switch13.pdf処理1! フィルタリング 処理2! 転送 ラーニングスイッチ • 802.1D/802.1Q](https://reader034.vdocuments.mx/reader034/viewer/2022050403/5f80f17622010b7d69266803/html5/thumbnails/16.jpg)
• 宛先が 192.168.0.30 でHTTP だったら
send_flow_mod_add(
datapath_id,
table_id: FORWARDING_TABLE_ID,
idle_timeout: AGING_TIME,
priority: 2,
match: Match.new(in_port: packet_in.in_port,
ether_destination_address: packet_in.destination_mac,
ether_source_address: packet_in.source_mac),
instructions: Apply.new(SendOutPort.new(port_no))
)
• packet_inの送信元+ポートをフローエントリとして追加
• 優先度はPacketInより高い
![Page 17: スイッチを作ろう コントローラhandai-trema.github.io/deck/week3/learning_switch13.pdf処理1! フィルタリング 処理2! 転送 ラーニングスイッチ • 802.1D/802.1Q](https://reader034.vdocuments.mx/reader034/viewer/2022050403/5f80f17622010b7d69266803/html5/thumbnails/17.jpg)
フィルタリングテーブル (ID=0)
dropルールdropルール
GoTo 2
Pri.
2
2
1
Flow Entry
…
転送テーブル(ID=1)
CONTROLLER
Pri.
1
コントローラ
転送ルール2
転送ルール2…
![Page 18: スイッチを作ろう コントローラhandai-trema.github.io/deck/week3/learning_switch13.pdf処理1! フィルタリング 処理2! 転送 ラーニングスイッチ • 802.1D/802.1Q](https://reader034.vdocuments.mx/reader034/viewer/2022050403/5f80f17622010b7d69266803/html5/thumbnails/18.jpg)
まとめラーニングスイッチをOpenFlow1.3化
• マルチプルテーブルでデバッグしやすく• GotoTableインストラクションでテーブル (処理ステージ) を推移
• デフォルトでパケットをドロップ万が一の大量のPacketInが防げる